AutoLisp

[AutoCAD]오토캐드 AutoLisp 강좌 예제 - AutoLisp으로 단축키를 만들기

데브프로그라 2024. 2. 23. 22:10
반응형

*단축키를 함 만들어 보기

단축키를 설정하는 파일은 Acad.PGP파일로 설정을 하는데..

파일의 위치는 Support폴더에 있으며,

AutoCAD 2024에서는 컴퓨터 로그인이름아래에

C:\Users\사용자\AppData\Roaming\Autodesk\AutoCAD 2024\R24.3\kor\Support\acad.pgp가 존재한다.

이것은 로그인하는 사람에 따라서 각종 정보를 달리 사용할 수 있도록하는 설정보조기능이다.

 

PGP파일로 단축키를 설정하며, AutoLisp으로는 프로그램을 작성하여 명령어 이름을 입력하여 사용한다.

다만, 간단하게 연습할 수 있어 사용해봅니다.

 

1. Line 명령의 단축키

아래의 글을 Notepad.exe 나 기타 텍스트에디터로 하나 만들어서
원하는 이름으로 저장하고 (예:test1.lsp  확장자는 꼭 LSP)
AutoCAD에서 Appload에서 test1.lsp를 로드하거나

AutoCAD Command에서 (load "test1.lsp")로 로드를 해주어야 한다.

(defun c:Li() (command "LINE"))

위의 글은 "line"을 "Li" 라는 단축키로 바꾸어 사용해 본다.
c: 다음의 "Li" 가 단축키로 사용될 명령어이며,
현재 설정이 되어있으며.. 예를 들어 다른명령을 해본다.

복사명령 : CP or CO로 사용을 하는데...

(defun c:CC() (command "copy"))

로 설정하시면 앞으로 CC도 사용가능하다.

 

2. (defun 이란?
명령을 정의한다. 항상 시작을 (defun 으로 시작한다.
우선 캐드에서는 "("로 시작하여야 AutoLisp 구문으로 인식함.

3. c: 이란?
command란 AutoLisp에서 명령어를 명명할 때 사용함.
"c:" 가 없으면 명령어로 사용할 수 없고, "( 명령어 ) "로 내부 함수로 사용할 수 있음.
"Li" 뒤의 ()는 인수 전달 및 변수 메모리 소거에 필요하므로, 그 부분은 추후 설명토록 한다.

4. (command "line") 이란?
Command는 AutoCAD 명령을 사용할 때 사용하는 함수.
Command는 사용자가 AutoCAD 명령을 사용할 때 나오는 입력 등을 명령어 그대로 사용하면 된다.

 

(command "line" "0,0" "100,100")
이렇게 하면 (0,0)에서 (100,100) 으로 선을 그리는 명령 실행.
AutoCAD에서 Line 명령을 사용하는 것 같다.

(command "circle" "0,0" "10")
원 그리기로 (0,0)에 반지름 10인 원을 그린다.

입력하는 숫자, 문자 모두 문자로 인식하므로 모두 ""안에 넣어준다.
AutoCAD에서 Circle명령어는  center point, 반지름을 입력받기에 이 같은 형식에 유의한다.

 

(command "line")

이렇게 작성하면, Line의 명령만을 실행하며 첫번째 점과 다음점들은 사용자가 Line명령어를 사용하듯 사용하게 된다.

 

(command "circle" "0,0") 

위의 경우 circle명령어를 이용하여 중심점 0,0을 기준으로 반지름은 사용자가 입력하게 한다.

5. 괄호는 "("의 갯수와 ")"의 갯수가 꼭 같아야 합니다.
AutoLisp은 규칙이 맞아야 에러가 발생하지 않는다.

예를 들어 괄호 ( 가 열리면 반드시 ) 닫아야 하며,  " " 등 규칙에 맞게 사용해야 한다.

 

6. Setq란

Setq는 정의함수로 변수의 값을 지정한다.

<형식1> (setq 변수1 1 변수2 2)
<형식2>
(setq 변수1 1
변수2 2
 )

형식1과 형식2와 같이 한줄 또는 여러줄로 사용이 가능하다.

1을 변수1, 2를 변수2. 사용하며, 마지막 괄호를 닫아준다.

예)

(Setq str "Test") - str변수에 "Test" 값을 저장한다.

(Setq str "Test" index 1) - str변수에 "Test"가 저장되고, Index라는 변수에 1이 저장된다.

(Setq str "Test"

     index1 4

     index2 2)

- str 변수에 "Test"가 저장되고, Index1에 4를 Index2에 2를 저장한다.

여기에 숫자 변수들이면 사칙연산을 할 수 있다.

(+ index1 index2) => 6

(- index1 index2) => 2

(* index1 index2) => 8

(/ index1 index2) => 2

 

AutoLisp Programming 규칙

AutoLisp은 함수, 변수 등은 앞쪽에 위치한다. (PreFix)

PreFix : 전위 => (+ 1 2)

InFix : 중위 => (1 + 2)

PostFix : 후위 ( 1 2 +)

(Setq nSum(+ 2 3)) => 5

 

- 각도(Angle)

각도는 Degree와 radian으로 구분한다.

90, 180, 360도는 degree, 3.14159, pi는 radian

AutoLisp에서는 radian각도를 사용한다.

수평각도 즉, degree각도 180도를 radian 각도로 ‘pi’라 지칭한다.

pi는 AutoLisp에서는 하나의 상수로 그 값은 3.141592이다.

> degree각도 90도는 radian 각도로 pi/2

degree각도 60도는 radian 각도로 Pi/3

- 대소문자

리습은 대소문자를 구별하지 않는다.

- 상수

숫자, Pi(3.141592)가 있다.

 

데이터의 종류 1

정수 : 리습에서 정수는 소수점이 없는 수를 말한다.

실수 : 소수점을 포함하는 수. 정수와 실수의 연산에서 결과값은 실수가 된다.

문자열 : “”(큰따옴표)로 묶어 놓은 것을 말한다.

 

다음회에 계속

 

 

 

반응형

/* 코드복사 버튼 */ pre { position: relative; overflow: visible; } pre .copy-button { opacity: 0; position: absolute; right: 8px; top: 4px; padding: 6px 18px; color: rgb(255, 255, 255); background: rgba(255, 223, 0, 0.6); border-radius: 5px; transition: opacity .3s ease-in-out; } pre:hover .copy-button { opacity: 1; } pre .copy-button:hover { color: #eee; transition: all ease-in-out 0.3s; } pre .copy-button:active { color: #33f; transition: all ease-in-out 0.1s; } .copy-message:before { content: attr(copy-message); position: absolute; left: -95px; top: 0px; padding: 6px 18px; color: #fff; background: rgba(255, 223, 0, 0.6); border-radius: 5px; } /* 코드복사 버튼 END */