안녕하세요.
열심히 독학 중인 1인입니다.
도면에서 같은 이름을 가지고 있는 블록들을 선택해서 그 블록들이 몇개인지 알아내는 리습입니다.
(defun c:bc(/ bc1 bc2 a b)
(setq bc1 (car (entsel “n객체 블럭 선택 : “)))
(setq bc2 (assoc 2 (entget bc1)))
(sssetfirst nil (ssget “_x” (list bc2)))
(princ (strcat “n선택한 Block 이름 : ” (cdr (assoc 2 (entget bc1)))))
(command “select”)
(princ)
)
아직 잘 몰라서 이거저거 가져와다가 쓰고 있다가
제가 좀 만들어 보고 싶어서 문의드립니다.
1. 4번째줄 [ (sssetfirst nil (ssget “_x” (list bc2))) ]
어떤 내용들의 함수인지 이해가 되지 않아서 설명 좀 해주실 분 계신가요?
2. 위 리습은 도면 전체에서 해당하는 블록을 잡아주는 건데 제가 선택한 객체에 대해서
해당 블록을 선택하고 싶으면 어떻게 해야하는지요?
3. 해당 블록을 선택하여 갯수가 몇개인지 볼려고 하는데 6번째줄 (command “select”)라는
명령어를 하나 넣으니 갯수가 나오더라구요.. 혹시 다르게 표현할 수 있는 함수가 있나요?
본 기능은 신속선택으로도 가능하지만 보다 빠르고 편리하게 해볼려고 합니다.
공유
선택되거나 맞물릴 객체를 설정합니다.
(sssetfirst gripset [pickset])
gripset 인수에 의하여 지정된 객체의 선택 세트는 맞물려지고 pickset에 의하여 지정된 객체의 선택 세트는 맞물리과 동시에 선택됩니다. 객체가 두 선택 세트에
공통으로 포함되어 있는 경우, sssetfirst는 pickset에 의해 지정된 선택 세트만 맞물림하고 선택합니다(gripset 세트는 맞물리지 않습니다).
올바른 선택 세트를 작성하는 것은 프로그래머의 책임입니다. 예를 들어, 배경 도면 공간 뷰포트(DXF 그룹 코드
69)가 선택 세트에 포함되지 않도록 확인해야 합니다. 또한, 다음 코드에서처럼 선택된 객체가 현재 배치에 속하도록 해야 합니다.
인수
gripset
맞물릴 선택 세트. gripset이 nil이고 pickset이 지정되면, sssetfirst는 pickset을 맞물리고
선택합니다. gripset이 nil이고 pickset이 지정되지 않으면, sssetfirst는 이전에 켠 맞물림 핸들과 선택을 해제합니다.
pickset
선택될 선택 세트
리턴 값
선택 세트 또는 지정된 세트
보기
먼저, 정사각형을 그리고 세 개의 선택 세트를 만드십시오. 모서리 1을 그리고 이 선을 포함하도록 선택 세트를 작성하는
것부터 시작합니다.
명령: (entmake (list (cons 0 “line”) ‘(10
0.0 0.0 0.0)'(11 0.0 10.0 0.0)))
((0 . “line”) (10 0.0 0.0 0.0) (11 0.0 10.0 0.0))
명령: (setq gripset (ssget “_l”))
<Selection set: a5>
변수 gripset은 작성된 선택 세트를 가리킵니다.
모서리 2를 그리고 이것을 gripset 선택 세트에 추가합니다.
명령: (entmake (list (cons 0 “line”) ‘(10
0.0 10.0 0.0)'(11 10.0 10.0 0.0)))
((0 . “line”) (10 0.0 10.0 0.0) (11 10.0 10.0 0.0))
명령: (ssadd (entlast) gripset)
<Selection set: a5>
모서리 2만 포함하도록 다른 선택 세트를 작성합니다.
명령: (setq 2onlyset (ssget “_l”))
<Selection set: a8>
모서리 3을 그리고 이것을 gripset 선택 세트에 추가합니다.
명령: (entmake (list (cons 0 “line”) ‘(10
10.0 10.0 0.0)'(11 10.0 0.0 0.0)))
((0 . “line”) (10 10.0 10.0 0.0) (11 10.0 0.0 0.0))
명령: (ssadd (entlast) gripset)
<Selection set: a5>
또 다른 선택 세트를 작성하고 모서리 3을 이 선택 세트에 포함시킵니다.
명령: (setq pickset (ssget “_l”))
<Selection set: ab>
변수 pickset은 새로운 선택 세트를 가리킵니다.
모서리 4를 그리고 이것을 gripset 및 pickset 선택 세트에 추가합니다.
명령: (entmake (list (cons 0 “line”) ‘(10
10.0 0.0 0.0)'(11 0.0 0.0 0.0)))
((0 . “line”) (10 10.0 0.0 0.0) (11 0.0 0.0 0.0))
명령: (ssadd (entlast) gripset)
<Selection set: a5>
명령: (ssadd (entlast) pickset)
<Selection set: ab>
이 시점에서, gripset은 모서리 1-4를 포함하고, pickset은 모서리 3과 4를 포함합니다. 그리고 2onlyset은 모서리 2만 포함합니다.
gripset 선택 세트에 있는 모든 객체에 대하여 맞물림을 켭니다.
명령: (sssetfirst gripset)
(<Selection set: a5>)
gripset에 있는 모든 객체에 대하여 맞물림 핸들을 해제합니다.
명령: (sssetfirst nil)
(nil)
pickset에 있는 모든 객체에 맞물림 핸들을 켜고 이들을
선택합니다.
명령: (sssetfirst nil pickset)
(nil <Selection set: ab>)
2onlyset에 있는 모든 객체에 대하여 맞물림 핸들을 켜고
pickset의 모든 객체를 선택합니다.
명령: (sssetfirst 2onlyset pickset)
(<Selection set: a8> <Selection set: ab>)
각 sssetfirst 호출은 이전 sssetfirst 호출에서 맞물려지거나 선택된 선택 세트를 교체합니다. 예를 들어, 다음 명령이
실행된 후, 2onlyset에서 맞물림이 켜지고 아무 선택 세트도 선택되지 않습니다.
명령: (sssetfirst 2onlyset
(<Selection set: a8>)
주: AutoCAD가 명령을 실행하고 있는 도중에 sssetfirst를 호출하지 마십시오.
라고 설명서에 써있네요 ㅎㅎ;; 번역에 성의가 없어서 보면서도 도저히 뭔지는 모르겠고 보통 선택된 객체들 확인용으로 사용하네요 저는 .
두번째 질문은 올리신 리습의 순서를 바꿔서 먼저 드래그 선택하고 나중에 클릭선택을 하시던가 이름을 직접 타이핑하시던가 하시면 되겠네요
움짤에 보는것이 제가 딱 원하는 리습입니다!
올려주신 수정본 천천히 보면서 공부하고 이해하도록 하겠습니다.
매번 감사드립니다^^