같은 작업을 수동으로 반복하는 것에 혐오감을 가한 경험은 없을까요? 그럴 때는 프로그래밍을 활용하여 자동화해 봅시다.
AutoLISP에서는 "while"이라는 표준 함수로 반복 처리할 수 있습니다. 이번 기사에서는 while에 대해 해설하겠습니다. 귀찮은 작업으로부터 해방되고 싶은 분에게 있어서 유익한 내용이 되고 있으므로 꼭 봐 주세요.
덧붙여서, while 이외에도 「repeat」라고 하는 지정의 횟수만큼 반복 처리를 계속하는 함수가 있습니다.
while은 조건을 만족하는 한 동일한 처리를 반복하는 함수입니다. 조건은 <, >= 등의 비교 함수를 사용하여 필요한 조건식을 지정합니다. 조건식이 nil을 반환하면(조건을 충족하지 않음) 반복이 종료됩니다. 반대로 말하면 조건식이 nil을 돌려주지 않으면 반복을 계속해 버려, 무한 루프가 되어 버리므로 반드시 nil을 돌려주는 조건식을 지정해 주세요.
(setq x 0)
(while (<= x 40)
(setq center (list x 0))
(command "circle" center "D" 5)
(setq x (+ x 10))
)
while로 원을 작성하는 처리를 반복해, 옆 줄의 원을 5개 작성하는 예입니다. while 내에서는 다음 동작이 반복됩니다.
X 좌표의 초기 값은 0이므로 처음 생성되는 원의 중심 좌표는 (0,0)입니다. 다음에 작성하는 원의 중심은 X 좌표가 10만 가산되므로 두 번째 원은 (10,0)에 작성됩니다. 덧붙여서 원의 직경은 5입니다.
while의 조건식이 '<= x 40'이므로 변수 x가 40을 초과하면 반복이 종료됩니다. 따라서, 변수 x가 50이 되는 시점, 즉 원을 5개 작성하면 반복은 종료입니다. 출력 결과는 다음과 같습니다.
(while (setq center (getpoint "\n원의 중심을 선택합니다."))
(command "circle" center "D" 5)
)
getpoint로 원의 중심을 취득해 복수의 원을 작성하는 예입니다. 이 예에서는 다음과 같은 동작을 반복합니다.
getpoint에서는 화면상에서 임의의 점을 클릭하는 것으로, 그 좌표를 취득할 수 있습니다. 직접 키보드에서 입력해도 됩니다. 취득한 좌표는 변수 center에 저장됩니다.
변수 center가 nil이 되지 않는 한 원의 작성이 반복됩니다. getpoint를 실행할 때 Enter 또는 Esc 키를 누르면 변수 center에 nil이 저장되므로 반복이 종료됩니다.
while 구문과 인수 및 반환값은 다음과 같습니다.
이번 정리
AutoLISP의 변수 (0) | 2021.12.24 |
---|---|
AutoLISP의 문자열 함수 (0) | 2021.12.23 |
동작의 흐름을 조종하라! AutoLISP의 조건 함수 if (0) | 2021.12.23 |
AutoLISP 비교 연산 (0) | 2021.12.22 |
AutoLISP의 논리 연산 설명 (0) | 2021.12.22 |
댓글 영역