; 한번의 선택만 허용

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

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

(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
리스트에서 순서 뽑기 기초  (0) 2014.10.27
(mapcar) 와 (lambda)  (0) 2014.10.25
Entmake 할 때, 객체별 요구리스트 정리  (0) 2014.10.25