프로그래밍의 강점은 동일한 동작을 정확하게 반복할 수 있다는 점에 있습니다. 이번 기사에서 해설하는 함수 "repeat"는 반복 처리를 할 수 있기 때문에 바로 강점의 상징 입니다.
AutoLISP로 AutoCAD의 작업을 효율화하고 싶은 분에게 매우 유익한 내용이 되고 있습니다. 사용 예와 함께 해설하고 있으므로 꼭 봐 주세요.
덧붙여서, repeat 이외에도 「while」라고 하는 조건을 만족하는 한 반복 처리를 계속하는 함수가 있습니다. 이미 다뤘으니 여기서는 생략하고 repeat 함수만 설명하겠습니다.
repeat는 동일한 처리를 지정된 횟수만큼 반복하는 함수입니다. repeat 내에는 반복하고 싶은 처리를 복수 기술할 수가 있습니다. 반복 횟수에는 정수 를 지정하십시오.
반복 처리로 5개의 동심원을 작성하는 예입니다. 중심은 (0,0)으로 반경을 1씩 크게 합니다.
(setq center (list 0 0))
(setq radius 1)
(repeat 5
(command "circle" center radius)
(setq radius (1+ radius))
)
우선, 중심 좌표(0,0)를 변수 center에 격납하고, 최초의 원의 반경인 수치의 1을 변수 radius에 격납하고 있습니다. 이 예제는 이해하기 쉽기 때문에 setq를 두 줄로 나누어 각 변수에 값을 저장하지만 한 줄로 묶어도 괜찮습니다.
repeat의 뒤에 기술하고 있는 것이 반복의 횟수입니다. 이번에는 5개 엔을 작성하기 때문에 수치의 5를 지정하고 있습니다. 원 작성 명령 circle을 호출하여 원을 작성한 후, 작성하는 원의 반경을 1만큼 증가시키는 동작이 반복됩니다.
실행 결과는 다음과 같습니다.
덧붙여서 변수의 값을 1만큼 증가시키는 연산을 인크리먼트(increment)라고 부릅니다. AutoLISP에서는 "1+"라는 함수로 실행할 수 있습니다. 또, 1만큼 감소시키는 연산은 디크리먼트(decrement)라고 불려 「1-」로 표현할 수 있습니다.
리스트에 저장된 좌표를 차례로 꺼내서 원을 작성하는 예입니다. 원의 반경은 1입니다.
(setq pt1 (list 0 0))
(setq pt2 (list 2 2))
(setq pt3 (list 4 4))
(setq lst (list pt1 pt2 pt3))
(setq n 0)
(repeat (length lst)
(command "circle" (nth n lst) 1)
(setq n (1+ n))
)
변수 pt1~pt3에 좌표를 격납한 후, 그 좌표를 변수 lst에 리스트로서 격납합니다. length로 얻은 변수 lst의 요소 수는 repeat의 반복 횟수입니다. 이 예에서는 세 번 반복합니다.
증가의 변수 n과 n번째의 요소를 취득하는 함수 nth에 의해, 반복할 때마다 중심 좌표가 바뀌어 가기 때문에 각각의 좌표에 원을 작성할 수 있습니다.
실행 결과는 다음과 같습니다.
repeat 구문과 인수 및 반환 값은 다음과 같습니다.
이번 정리
AutoLISP의 도형 이름 함수 (0) | 2021.12.25 |
---|---|
AutoLISP 선택 세트 ssget (0) | 2021.12.24 |
AutoLISP의 변수 (0) | 2021.12.24 |
AutoLISP의 문자열 함수 (0) | 2021.12.23 |
조건을 만족하는 한 반복하는 함수 「while」 (0) | 2021.12.23 |
댓글 영역