SSGET 사용법 정리

2014.11.07 01:16

; 윈도우와 크로싱은 억제하지 않음.

; 위도우와 크로싱을 억제하기 위해서는 앞에 "+."  가 붙어야 함

; 다만 한번의 선택만 허용

(defun c:test1()
   (setq ss (ssget ":E:S" '((0 . "line"))))
   (command "erase" ss "")
)

 

 

; 블럭 내부 엔터티를 선택

; 즉 nentsel 을 여러개 하는 것과 같음

(defun c:test2()
   (setq ss (ssget ":N" '((0 . "insert"))))
   (command "erase" ss "")
)

 

 

;중복 선택 허용

;즉, 동일한 객체를 두 번 선택해도 선택 셋에 모두 포함됨

(defun c:test3()
   (setq ss (ssget ":D" '((0 . "insert"))))
   (sslength ss) ; 동일한 블럭을 4번 클릭하면, 선택갯수가 4로 표기됨
)

 

 

;한번 선택으로 종료

;선택의 방법은 피크, 윈도우, 크로싱이 모두 가능

;즉, 다중 선택을 허용하나, 이 역시 한번의 선택만 허용 

(defun c:test4()
   (setq ss (ssget ":S" '((0 . "line"))))
   (command "erase" ss "")
)

 

 

;잠긴 객체는 선택에서 제외 

(defun c:test5()
   (setq ss (ssget ":L" '((0 . "insert"))))
   (sslength ss)
)

 

 

;이전 선택 객체 재 선택 

(defun c:test6()
   (setq ss (ssget "P" '((0 . "insert"))))
   (sslength ss)
)

 

 

;단일 선택을 위한 첨가어. 아래 문구와 조합을 이루어 완성 

(defun c:test7() (setq ss (ssget "+." '((0 . "insert")))) (sslength ss) ) 

 

 

; 윈도우와 크로싱 억제, 피크로만 선택

; 그러나, 여러번 클릭해서 다중선택은 가능 

(defun c:test71()
   (setq ss (ssget "+.:E" '((0 . "insert"))))
   (sslength ss)
)

 

 

;  ":E:S" 와 동일하나, 하나의 객체, 한번의 선택만 가능

; 즉, 윈도우와 크로싱이 억제됨 

(defun c:test72()
   (setq ss (ssget "+.:S" '((0 . "insert"))))
   (sslength ss)
)

  

(defun c:tt73()
   (setq ss (ssget "+.:E:S" '((0 . "insert"))))
   (sslength ss)
)

  

 

; "+.:E" 와 비슷해 보이나, 윈도우와 크로싱을 억제하지 않음

; 다중선택 가능 

(defun c:test8()
   (setq ss (ssget ":E" '((0 . "insert"))))
   (sslength ss)
)

 

 

 

즉, 정리하면 다음과 같다.

 

 

 

 윈도우, 크로싱

허용

 여러 객체 선택

허용

 여러번 선택

허용

 샘플명령어

 :E

 o

 o

 o

 test8

 :S

 o

 o

 x

 test4

 +.:E

 x

 o

 x

 test71

 +.:S

 x

 x

 x

 test72

 :E:S

 o

 o

 x

 test1

 +.:E:S

 x

 x

 x

 test73

 




;도면상의 모든 객체 선택, 얼려져 있는 개체도 선택


(defun c:test9()
   (setq ss (ssget "X" '((0 . "insert"))))
   (sslength ss)
)


;x 와 같으나, 얼려진 객체 제외

(defun c:test10()

(setq ss (ssget "A" '((0 . "insert"))))

    (sslength ss)

)


;내용에 숫자가 포함된 문자를 선택

(defun c:test11()

(setq ss (ssget '((1 . "*[0-9]*"))))

)


;내용에 숫자가 포함된 문자를 선택 (위와 기능이 같음)

(defun c:test11()

(setq ss (ssget '((1 . "*#*"))))

)


;내용이 숫자로만 이루어진 문자를 선택

(defun c:test12()

(setq ss (ssget '((0 . "text,mtext") (1 . "~*[~.0-9]*" ))) )

)


;내용에 숫자가 포함되지 않은 문자만 선택

(defun c:test13()

(setq ss (ssget '((-4 . "<NOT")

    (1 . "*[0-9]*")

    (-4 . "NOT>"))

  )))


;내용에 숫자가 포함되지 않은 문자만 선택 (위와 기능이 같음)

(defun c:test13()

(setq ss(ssget '((1 . "~*#*"))))

)


;내용에 영문자가 포함된 문자만 선택

(defun c:test14()

(setq ss (ssget '((1 . "*[a-A-z-Z]*"))))

)


;내용이 영문자로만 되어 있는 문자만 선택

(defun c:test15()

(setq ss (ssget '((0 . "text,mtext") (1 . "~*[~a-A-z-Z]*" ))))

)


;내용에 영문자가 포함되어 있지 않은 문자만 선택

(defun c:test16()

(setq ss (ssget '((-4 . "<NOT")

    (1 . "*[a-A-z-Z]*")

    (-4 . "NOT>"))))

)


;내용에 영문자가 포함되어 있지 않은 문자만 선택 (위와 기능이 같음)

(defun c:test16()

(setq ss (ssget '((1 . "~*[a-A-z-Z]*"))))

)


;지름이 800보다 크고, 8000보다 작은 원만 선택

(defun c:test17()

(setq ss (ssget '((-4 . "<and")

    (0 . "circle")

    (-4 . ">")(40 . 800)

    (-4 . "<")(40 . 8000)

    (-4 . "and>"))

  ))

)


;켜가 1,2,3,4 인 선 객체만 선택

(defun c:test18()

  (setq la '("1" "2" "3" "4")

     ss (ssget (list '(0 . "line") (cons 8 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) la)))))

  ))


;단일 점으로 찍힌 객체만 선택

(defun c:test19()

(setq pt (getpoint))

(setq ss (ssget “c” pt pt))

)



;통상적인 두점으로 선택하는 방식 (윈도우)

(defun c:test191()

(setq pt (getpoint))

(setq pt1 (getpoint))

(setq ss (ssget “W” pt pt1))

)



;켜가 0이 아닌 선만 선택

(defun c:test20()

(setq ss (ssget  '((-4 . "<AND")

     (0 . "line")

     (-4 . "<NOT")

     (8 . "0")

     (-4 . "NOT>")

     (-4 . "AND>"))

)))



;켜가 0이 아닌 선만 선택 (위와 기능이 같음)

(defun c:test21()

(setq ss (ssget '((0 . "line")(8 . "~0"))))

)



;켜이름에 영문자가 없는 선만 선택

(defun c:test22()

(setq ss (ssget '((0 . "line")(8 . "~*[a-A-z-Z]*"))))

)


;191과 같으나, 영역 윈도우의 형상이 눈에 보임 (윈도우)

(defun c:test23()

(setq pt1 (getpoint))

(setq pt3 (getcorner pt1))

(setq ss(ssget "w" pt1 pt3 '((0 . "insert"))))

;점을 리스트로 만들어서 "wp" 로 선택해도 같은 결과임...(setq ss(ssget "wp" ptl '((0 . "insert"))))

)


;위와 같으나, 크로싱

(defun c:test24()

(setq pt1 (getpoint))

(setq pt3 (getcorner pt1))

(setq ss(ssget "c" pt1 pt3 '((0 . "insert"))))

;점을 리스트로 만들어서 "cp" 로 선택해도 같은 결과임...(setq ss(ssget "cp" ptl '((0 . "insert"))))

)


;지나간 점으로 이루어진 선에 걸치는 직선 선택

(defun c:test25()

  (setq ptl nil)

  (while (setq pt (getpoint))

     (setq ptl (cons pt ptl))

    )

(setq ss (ssget "f" ptl '((0 . "line"))))

  (command "erase" ss "")

  )



저작자 표시 비영리 동일 조건 변경 허락
신고

'CAD > Lisp' 카테고리의 다른 글

문자 또는 숫자 자동 증가  (0) 2014.11.22
grread 옵션 정리  (0) 2014.11.10
SSGET 사용법 정리  (0) 2014.11.07
리스트에서 순서 뽑기 기초  (0) 2014.10.27
(mapcar) 와 (lambda)  (0) 2014.10.25
Entmake 할 때, 객체별 요구리스트 정리  (0) 2014.10.25

+ Recent posts