도면에서 오브젝트(도형)를 선택하는 작업을 귀찮게 느끼지 않았습니까? 1회나 2회라면 아직도 몇번이나 수동으로 선택해 처리를 하는 것은 시간도 수고도 걸려 효율이 나빠, 스트레스가 모입니다.
그런 때는 AutoLISP로 선택 동작을 자동화해 버리면 편합니다. 이번 기사에서는 오브젝트를 선택할 때 작성되는 선택 세트에 대해 설명합니다.
선택 세트를 조작하는 것으로 선택 동작을 자동화할 수 있으므로 꼭 봐 주세요.
함수를 설명하기 전에 선택 세트에 대해 설명합니다.
선택 세트란 간단하게 말하면 복수 도형을 하나의 그룹으로 한 것 입니다. 그건 그렇고, Autodesk의 도움말은 다음과 같이 설명합니다.
선택 세트는 선택된 하나 이상의 오브젝트(도형)로 구성된 그룹입니다.
AUTODESK AUTOCAD 2018 도움말
대화식으로 선택 세트에 오브젝트를 추가하고, 선택 세트에서 오브젝트를 제거하고, 선택 세트의 오브젝트를 나열할 수 있습니다.
오브젝트(도형)의 추가나 제거는 앞으로 해설해 가는 함수로 실행할 수 있습니다.
또, 선택 세트내에는 도형명이라고 불리는 라벨이 포함됩니다. 도형명이란 그대로의 의미로 도형의 이름을 나타내고 있어, 도형 단체를 지정하는 것이 가능합니다.
도형 이름은 도면의 객체에 할당된 숫자 레이블입니다. 이것은 AutoCAD에 의해 유지되는 파일에 대한 포인터이며, 이를 사용하여 객체의 데이터베이스 레코드와 해당 벡터(표시되는 경우)를 검색할 수 있습니다.
AUTODESK AUTOCAD 2018 도움말
도형명으로부터는 도형 정의 데이터를 취득할 수도 있으므로, 도형 단체에 대해서 여러가지 편집을 더하는 것이 가능하게 됩니다.
이번에 설명하는 선택 세트의 함수는 다음 6가지입니다.
ssget은 도면에서 선택한 오브젝트에서 선택 세트를 작성하는 함수입니다. 선택 방법이나 선택 범위는 인수로 변경할 수 있으므로, 선택하는 오브젝트를 좁힐 수가 있습니다.
(ssget [선택 방법] [좌표1] [좌표2] [좌표 목록] [필터 목록])
선택 방법 문자열 | 설명 예 | 내용 |
생략 | (ssget) | 표준 방식으로 사용자에게 선택을 요청합니다. |
X | (ssget "X") | 도면에서 모든 도형을 선택합니다. |
P | (ssget "P") | 직전에 선택한 도형을 선택합니다. |
L | (ssget "L") | 마지막으로 추가된 가시 도형을 선택합니다. |
C | (ssget "C" p1 p2) | 지정된 범위 내 또는 그 범위와 교차하는 도형을 선택합니다. |
W | (ssget "W" p1 p2) | 지정된 범위 내의 도형을 선택합니다. |
F | (ssget "F" (list p1 p2)) | 지정된 좌표의 선분을 교차하는 도형을 선택합니다. |
CP | (ssget "CP" (list p1 p2 p3 p4)) | 지정한 다각형 내 또는 그 다각형과 교차하는 도형을 선택합니다. |
WP | (ssget "WP" (list p1 p2 p3 p4)) | 지정한 다각형의 도형을 선택합니다. |
;좌표(10,10)을 통과하는 객체의 선택 세트 만들기
(ssget (list 10 10))
;도면층 "layer1", 도형종류 "circle"의 오브젝트를 도면 전체에서 선택하여 선택 세트를 작성
(ssget "X" (list (cons 8 "layer1") (cons 0 "circle"))
두 번째 예에서는 도형의 속성을 연관 목록으로 지정하여 도면 전체에서 선택하는 객체를 좁히고 있습니다. 그건 그렇고, 연관 목록은 요소에 두 개의 요소로 구성된 목록을 갖는 목록 입니다.
도형을 정의하는 데이터는 연관 목록이므로 지정된 속성을 가진 도형을 좁힐 수 있습니다.
ssadd는 기존 선택 세트에 도형 이름을 추가할 수 있는 함수입니다.
도형 이름을 지정하지 않으면 빈 선택 집합이 만들어집니다. 또, 도형명만을 지정했을 경우는 그 도형명을 포함한 새로운 선택 세트가 작성됩니다.
(ssadd [도형명 [선택 세트]])
;빈 선택 세트를 만들어 원을 선택 세트에 추가
(setq ss (ssadd))
(command "circle" (list 0 0) "D" 10)
(ssadd (entlast) ss)
"entlast"는 마지막으로 만든 도형의 도형 이름을 반환하는 함수입니다.
ssdel은 선택 세트에서 지정한 도형 이름을 제거하는 함수입니다. 제거되는 것은 어디까지나 도형명만으로 오브젝트 자체는 삭제되지 않습니다.
(ssdel 도형 이름 선택 세트)
;기존 선택 세트에서 마지막으로 만든 도형 삭제
(command "circle" (list 0 0) "D" 10)
(setq ss (ssadd (entlast)))
(ssdel (entlast) ss)
ssname은 선택 세트의 도형 이름을 얻는 함수입니다. 선택 세트내의 요소 번호를 정수로 지정하는 것으로 도형명을 취득할 수 있습니다. 선두의 요소 번호는 0 이므로 주의해 주세요.
(ssname 선택 세트 요소 번호)
;선택 세트 내의 첫번째 객체의 도형 종류를 취득한다
(command "circle" (list 0 0) "D" 10)
(setq ss (ssadd (entlast)))
(ssname ss 0)
sslength는 선택 세트의 요소 수(도형 이름 수)를 얻는 함수입니다. 빈 선택 세트의 경우 요소가 없으므로 0이 반환됩니다.
(sslength 선택 세트)
;도면 전체의 객체 개수를 얻는다.
(setq ss (ssget "X"))
(sslength ss)
ssmemb은 선택 세트에서 도형 이름을 검색하는 함수입니다. 지정된 도형명이 발견되면 그 도형명을 돌려주어, 발견되지 않으면 nil를 돌려줍니다.
(ssmemb 도형 이름 선택 세트)
;마지막으로 만든 도형이 선택 세트에 포함되어 있는지 검색
(setq ss (ssget "X"))
(command "circle" (list 0 0) "D" 10)
(ssmemb (entlast) ss)
마지막으로 만든 원의 도형 이름은 변수 ss에 포함되지 않으므로 위의 예에서는 nil이 반환됩니다.
이번 정리
기능 | 내용 |
ssget | 선택한 오브젝트(도형)에서 선택 세트를 작성합니다. |
ssadd | 기존 선택 세트에 도형 이름을 추가합니다. 도형 이름을 지정하지 않으면 빈 선택 집합이 만들어집니다. |
ssdel | 선택 세트로부터 지정한 도형명을 제거한다. |
ssname | 선택 세트 내의 도형명을 취득한다. |
sslength | 선택 세트의 요소수(도형명의 수)를 취득한다. |
ssmemb | 선택 세트내에서 도형명을 검색한다. |
기사의 내용이나 AutoLISP, DCL에 대해 잘 모르는 곳이 있는 것 같으면 코멘트나 메일로 부담없이 연락해 주세요!
리스트의 요소를 취득하는 함수 nth, last, assoc (0) | 2021.12.25 |
---|---|
AutoLISP의 도형 이름 함수 (0) | 2021.12.25 |
지정된 횟수만큼 반복하는 함수 "repeat" (0) | 2021.12.24 |
AutoLISP의 변수 (0) | 2021.12.24 |
AutoLISP의 문자열 함수 (0) | 2021.12.23 |
댓글 영역