상세 컨텐츠

본문 제목

AutoLISP 선택 세트 ssget

IT & Programming/LISP 공부

by 그림아이 2021. 12. 24. 08:00

본문

반응형

도면에서 오브젝트(도형)를 선택하는 작업을 귀찮게 느끼지 않았습니까? 1회나 2회라면 아직도 몇번이나 수동으로 선택해 처리를 하는 것은 시간도 수고도 걸려 효율이 나빠, 스트레스가 모입니다.

그런 때는 AutoLISP로 선택 동작을 자동화해 버리면 편합니다. 이번 기사에서는 오브젝트를 선택할 때 작성되는 선택 세트에 대해 설명합니다.

선택 세트를 조작하는 것으로 선택 동작을 자동화할 수 있으므로 꼭 봐 주세요.

 

선택 세트란 무엇인가?

함수를 설명하기 전에 선택 세트에 대해 설명합니다.

선택 세트란 간단하게 말하면 복수 도형을 하나의 그룹으로 한 것 입니다. 그건 그렇고, Autodesk의 도움말은 다음과 같이 설명합니다.

선택 세트는 선택된 하나 이상의 오브젝트(도형)로 구성된 그룹입니다.
대화식으로 선택 세트에 오브젝트를 추가하고, 선택 세트에서 오브젝트를 제거하고, 선택 세트의 오브젝트를 나열할 수 있습니다.

AUTODESK AUTOCAD 2018 도움말

오브젝트(도형)의 추가나 제거는 앞으로 해설해 가는 함수로 실행할 수 있습니다.

또, 선택 세트내에는 도형명이라고 불리는 라벨이 포함됩니다. 도형명이란 그대로의 의미로 도형의 이름을 나타내고 있어, 도형 단체를 지정하는 것이 가능합니다.

도형 이름은 도면의 객체에 할당된 숫자 레이블입니다. 이것은 AutoCAD에 의해 유지되는 파일에 대한 포인터이며, 이를 사용하여 객체의 데이터베이스 레코드와 해당 벡터(표시되는 경우)를 검색할 수 있습니다.

AUTODESK AUTOCAD 2018 도움말

도형명으로부터는 도형 정의 데이터를 취득할 수도 있으므로, 도형 단체에 대해서 여러가지 편집을 더하는 것이 가능하게 됩니다.

 

선택 세트를 조작하는 함수

이번에 설명하는 선택 세트의 함수는 다음 6가지입니다.

설명하는 선택 세트의 함수
  • 선택 세트 만들기 ssget
  • 선택 세트에 도형명 추가 ssadd
  • 선택 세트에서 도형 이름 제거 ssdel
  • 선택 세트로부터 지정 요소 번호의 도형명을 취득 ssname
  • 선택 세트의 요소 수 얻기 sslength
  • 지정된 도형 이름이 선택 세트에 포함되어 있는지 확인 ssmemb

선택 세트 만들기 ssget

ssget의 특징은?

  1. 선택한 객체(도형)에서 선택 세트를 만들 수 있습니다.
  2. 필터로 선택할 개체를 좁힐 수 있습니다.

ssget은 도면에서 선택한 오브젝트에서 선택 세트를 작성하는 함수입니다. 선택 방법이나 선택 범위는 인수로 변경할 수 있으므로, 선택하는 오브젝트를 좁힐 수가 있습니다.

ssget의 사용법은?

구문

(ssget [선택 방법] [좌표1] [좌표2] [좌표 목록] [필터 목록])

인수
선택 방법(옵션)개체 선택 방법을 지정하는 문자열을 입력합니다.
지정할 수 있는 문자열의 목록은 아래 표와 같습니다.좌표 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)) 지정한 다각형의 도형을 선택합니다.
반환값
선택 세트오브젝트가 선택되었을 경우는 작성된 선택 세트를 돌려줍니다.nil아무것도 선택되지 않으면 nil을 반환합니다.

ssget 사용 예

;좌표(10,10)을 통과하는 객체의 선택 세트 만들기
(ssget (list 10 10))
;도면층 "layer1", 도형종류 "circle"의 오브젝트를 도면 전체에서 선택하여 선택 세트를 작성
(ssget "X" (list (cons 8 "layer1") (cons 0 "circle"))

두 번째 예에서는 도형의 속성을 연관 목록으로 지정하여 도면 전체에서 선택하는 객체를 좁히고 있습니다. 그건 그렇고, 연관 목록은 요소에 두 개의 요소로 구성된 목록을 갖는 목록 입니다.

도형을 정의하는 데이터는 연관 목록이므로 지정된 속성을 가진 도형을 좁힐 수 있습니다. 

 

선택 세트에 도형명 추가 ssadd

ssadd의 특징은?

  1. 기존 선택 세트에 도형 이름을 추가할 수 있습니다.
  2. 빈 선택 세트를 만들 수 있습니다.

ssadd는 기존 선택 세트에 도형 이름을 추가할 수 있는 함수입니다.

도형 이름을 지정하지 않으면 빈 선택 집합이 만들어집니다. 또, 도형명만을 지정했을 경우는 그 도형명을 포함한 새로운 선택 세트가 작성됩니다.

ssadd의 사용법은?

구문

(ssadd [도형명 [선택 세트]])

인수
도형명(옵션)선택 세트에 추가할 도형 이름 .선택 세트(옵션)도형 이름을 추가하는 기존 선택 세트 .
반환값
선택 세트지정한 도형명을 추가한 기존의 선택 세트를 돌려줍니다. 인수를 생략하면 빈 선택 집합이 반환됩니다.

ssadd의 사용 예

;빈 선택 세트를 만들어 원을 선택 세트에 추가
(setq ss (ssadd))
(command "circle" (list 0 0) "D" 10)
(ssadd (entlast) ss)

"entlast"는 마지막으로 만든 도형의 도형 이름을 반환하는 함수입니다.

 

선택 세트에서 도형 이름 제거 ssdel

ssdel의 특징은?

  1. 선택 세트에서 도형명을 제거할 수 있다
  2. 객체 자체는 삭제되지 않음

ssdel은 선택 세트에서 지정한 도형 이름을 제거하는 함수입니다. 제거되는 것은 어디까지나 도형명만으로 오브젝트 자체는 삭제되지 않습니다.

 ssdel의 사용법은?

구문

(ssdel 도형 이름 선택 세트)

인수
도형명선택 세트에서 제거할 도형 이름.선택 세트도형 이름을 제거하는 선택 세트.
반환값
선택 세트지정한 도형명을 제거한 선택 세트가 돌려주어집니다.

ssdel 사용 예

;기존 선택 세트에서 마지막으로 만든 도형 삭제
(command "circle" (list 0 0) "D" 10)
(setq ss (ssadd (entlast)))
(ssdel (entlast) ss)

선택 세트로부터 지정 요소 번호의 도형명을 취득 ssname

ssname의 특징은?

  1. 선택 세트 내의 도형명을 취득할 수 있다
  2. 취득하는 도형명은 요소 번호로 지정한다
  3. 선두의 요소 번호는 0

ssname은 선택 세트의 도형 이름을 얻는 함수입니다. 선택 세트내의 요소 번호를 정수로 지정하는 것으로 도형명을 취득할 수 있습니다. 선두의 요소 번호는 0 이므로 주의해 주세요.

 ssname의 사용법은?

구문

(ssname 선택 세트 요소 번호)

인수
선택 세트도형명을 취득하는 선택 세트.요소 번호취득하고 싶은 도형명의 선택 세트내의 번호. 선두의 요소 번호는 0.
반환값
도형명지정된 요소 번호의 도형명을 돌려줍니다.nil지정된 요소 번호가 마이너스 또는 요소수 이상인 경우는 nil 를 돌려줍니다.

 ssname 사용 예

;선택 세트 내의 첫번째 객체의 도형 종류를 취득한다
(command "circle" (list 0 0) "D" 10)
(setq ss (ssadd (entlast)))
(ssname ss 0)

선택 세트의 요소 수 얻기 sslength

sslength의 특징은?

  1. 선택 세트의 요소 수를 얻을 수 있습니다.

sslength는 선택 세트의 요소 수(도형 이름 수)를 얻는 함수입니다. 빈 선택 세트의 경우 요소가 없으므로 0이 반환됩니다.

 sslength의 사용법은?

구문

(sslength 선택 세트)

인수
선택 세트요소의 수를 취득하는 선택 세트.
반환값
정수선택 세트내의 요소수를 정수로 돌려줍니다.

 sslength 사용 예

;도면 전체의 객체 개수를 얻는다.
(setq ss (ssget "X"))
(sslength ss)

선택 세트에서 지정된 도형 이름 찾기 ssmemb

ssmemb의 특징은?

  1. 선택 세트내에서 지정의 도형명을 검색할 수 있다

ssmemb은 선택 세트에서 도형 이름을 검색하는 함수입니다. 지정된 도형명이 발견되면 그 도형명을 돌려주어, 발견되지 않으면 nil를 돌려줍니다.

 ssmemb 사용법은?

구문

(ssmemb 도형 이름 선택 세트)

인수
도형명선택 세트 내에서 검색하는 도형명.선택 세트지정한 도형명을 검색하는 선택 세트.
반환값
도형명선택 세트내에서 지정한 도형명이 발견되었을 경우는 그 도형명을 돌려줍니다.nil지정한 도형명이 발견되지 않았던 경우는 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의 선택 세트를 조작하는 함수에 대해 설명했습니다. 오브젝트 선택의 자동화는 작업 전체의 효율화에 공헌해 주기 때문에 꼭 활용해 보세요.

기사의 내용이나 AutoLISP, DCL에 대해 잘 모르는 곳이 있는 것 같으면 코멘트나 메일로 부담없이 연락해 주세요!

 

프로그래밍

 

728x90
반응형

관련글 더보기

댓글 영역