; 한번의 선택만 허용
; 윈도우와 크로싱은 억제하지 않음.
; 위도우와 크로싱을 억제하기 위해서는 앞에 "+." 가 붙어야 함
(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 "") )
'Lisp & Tips > 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 |