사용자가 다수 선택한 다양한 객체들중에 특정 객체의 종류의 객체들을 따로 추출하여 저장하는 예제문입니다

 

 

블록들만 추출

    (ssget) ; 사용자가 다양한 방법으로 다수 객체 선택 선택완료후 엔터입력으로 선택완료
    (setq ssblock (ssget "p" '((0 . "INSERT") )) )    ; insert 는 블록을 의미  

 

원들만 추출

(ssget)

(setq sscir (ssget "p" '((0 . "CIRCLE"))) )

 

 

 

치수들만 추출

(ssget)

(setq ssdim (ssget "p" '((0 . "dimension"))) )

 

 

 

점들만 추출

(ssget)

(setq sspnt (ssget "p" '((0 . "point"))) )

 

 

 

문자들만 추출

(ssget)

(setq sstxt (ssget "p" '((0 . "text"))) )

 

 

 

치수리더들만 추출

(ssget)

(setq ssled (ssget "p" '((0 . "leader"))) )

 

 

공차들만 추출

(ssget) 

(setq sstol (ssget "p" '((0 . "TOLERANCE"))) )

 

 

 

 

라인들만 추출

(ssget) 

(setq ssline (ssget "p" '((0 . "LINE"))) )

 

 

 

 

sslength 는 선택된 다수의 객체 집합에서 그 객체의 수량을 응답하여 줍니다

 

 

 

 

 

(setq ss (ssget)) ; 객체 다수를 선택 ss에 저장

(setq ssno (sslength ss))     ; 선택한 ss 의 객체갯수를 ssno 저장

 

 

 

 

 

 

entdel 은 부여한 객체의 이름으로 삭제합니다

 

(entdel 객체이름)

 

객체이름 얻기는 entget 과 ssname 을 참조 바랍니다

 

 

예제는 erase 효과가 됩니다

(setq aaa (entsel)) ; 객체 하나 선택 aaa 저장
(setq ename (car aaa)) ; aaa의 리스트중 첫째인 객체이름을 ename 을 저장

(entdel ename) ; 객체 하나 삭제

 

 

 

 

 

'E 함수' 카테고리의 다른 글

*ERROR* 에러문 설정 원상복귀  (0) 2022.08.11

repeat 은 다음의 정수만큼 그다음의 문장들을 반복 실행합니다

 

(repeat 반복수 실행문)

 

 

예제 <청색 문장들이 반복됨>

(setq ss (ssget)) ; 객체 다수를 선택

필터로 희망하는 객체의 종류를 필터하는 과정<예제에서는 생략>

(setq ssno (sslength ss))     ; 선택한 ss 의 객체갯수를 ssno 저장
(setq no 0) ; 반복진행의 원점수 설정
(repeat ssno ; 객체수 ssno 만큼 반복선언

        (setq entname (ssname ss no))  ; 객체중 no번째 객체 호출 0은 첫번째 객체

        entname 객체를 다루는 문장들

         여러분둘 목적에 맞게 작성

 

 

 

        (setq no (1+ no)) ; 객체 다음순번 지정, ssno 반복시 객체 전체를 다루는 결과

) ;; end repeat

 

객체의 수량만큼 반복하므로 선택한 모든 객체를 빠짐없이 다루는 결과를 얻습니다

 

 

사용자 임의 변수 ss  ssno  no  entname

 

 

 

 

다음 예제는 lineno 정의가 nil 이 될때까지 계속 반복 실행합니다

사전 정의변수 객체집합 line 점 p1 p2 

     (setq no 0) 
     (repeat lineno (setq linename (ssname line no))  (command "break" linename p1 p2)  (setq no (1+ no))  ) ;; end repeat

반복마다 객체이름이 1 씩 증가하는 청색문장 응답이 nil이아니면 계속 반복 합니다

 


 

 

 

 

 

 

 

 

 

 

 

 

 

'R 함수' 카테고리의 다른 글

RTOS 실수를 문자로 변환  (0) 2022.08.04

서브리습의 괄호에 변수명을 넣고 추후 서브리습 호출시 실수값을 병기하면 그 값으로 연산한 값을 얻습니다



예제 서브리습은 1도를 라디안으로 환산합니다
사용자 임의 변수명 dorad ildo
(defun dorad (ildo) (* pi (/ ildo 180.00)))


다른 리습문에서 dorad 호출시 값을 병기하면 ildo 값으로 연산합니다

(dorad 15.0) ; 서브리습 dorad 를 호출하되 15.0 값을 ildo 로 하여 연산시킵니다
; 이 리습 진행은 15도를 라디안각도로 환산한 값을 응답합니다

다른리습에서 다른 각도의 연산값을 얻습니다
(dorad 45.0); 45도의 라디안값 얻기

반복되는 라디안 환산을 간편화 합니다







 

pause 는 command 문 내에서 사용자 입력을 요구하면서 대기하는 함수 입니다

 

command 진행은 잠시 멈추며 사용자가 값을 입력하거나 점을 클릭시 다음 command 를 수행 진행합니다

 

 

(COMMAND "text" pause "" "" "TEXT TEST" ^c)

; text 명령을 시작하고 사용자에게 text 작성지점 클릭을 요구하면서 대기합니다

; 사용자가 점을 클릭하면 그 다음을 진행합니다

;  "" 는 그냥엔터를 의미합니다  "" "" 는 글자크기= 전값 글자회전=종전값이 됩니다

 

 

 

 

'P 함수' 카테고리의 다른 글

PRINC PRIN1 PRINT 실행 출력 결과 차이점  (0) 2022.08.15
PROGN 연속실행문  (0) 2022.08.09
PI 원주율 고유함수  (0) 2022.08.08

linetype 을 load 하는 리습 예제 입니다

 

현 도면내에 원하는 라인타입이 존재하는지 먼저 검색후 존재하면 "이미 존재함"을 표현후 종료하고 존재하지 않으면 해당 라인타입을 로드하는 command 문을 작성 합니다

 

 

(defun loadcenter()   

(if (tblsearch "LTYPE" "center") (prompt "  Loaded Linetype Center  ")  (command "-linetype" "L" "center" "" "") ) 

) ; end defun

 

 

 

 

 

'리습 예제 1부' 카테고리의 다른 글

도면번호 형식 문자 검색  (0) 2022.09.05
블록 존재여부로 작도 삽입 if 문  (0) 2022.08.19
리습 작도전 화면 크기 제어  (0) 2022.08.19
메인리습 서브리습  (0) 2022.08.08
리습 목적별 예제 문장  (0) 2022.07.27

각종 규격표의 호칭별 규격치수를 나열하고 사용자가 선택한 호칭의 규격을 활용 적용하는 예제 입니다

 

 

(setq scm(getdist)) ; 호칭규격을 사용자가 선택 입력토록 합니다

(cond
((= scm 3)  (setq size '( 3.0 0.5 1.5 0.3 1.5 0.6))) ; size 에 해당 호칭의 규격치수들을 나열
((= scm 4)  (setq size '( 4.0 0.7 2.0 0.3 2.0 0.8)))
((= scm 5)  (setq size '( 5.0 0.8 2.5 0.5 2.5 0.9)))

 

 

(t (exit)) ; 사용자 입력값이 규격범위를 벗어나면  exit 종료

) ;cond   사용자가 입력한 호칭에 따라 size 의 data 가 달라집니다
(setq d1 (nth 0 size) ph (nth 1 size) b (nth 2 size) e (nth 3 size) m (nth 4 size) k (nth 5 size)

; data 값들을 활용할 변수로 저장합니다

 

사용자 임의 변수들 scm size d1 ph b e m k

 

 

 

 

 

 

 

 

 

 

 

while 은 제시한 조건에 부합하는 동안 계속 실행하며 조건에 맞지 않으면 종료합니다

 

 

 

예제는 특정객체이후의 생성된 객체 모두를 ss 로 저장하는 목적의 리습문 입니다

더이상 추가된 객체가 없어 변수 enext 값이 nil 이되면 while 문을 종료합니다

(while enext (setq ss (ssadd enext ss) enext (entnext enext)) ) 

 

 

 

 

 

(command "-insert" blkname "none" pt) ; 블록 삽입 명령 진행 사용자 점지정까지

(while (= (getvar "cmdactive") 1)  ; 사용자가 점을 지정하는한 계속 실행

(command 1 1 pause "-insert" blkname pause) ; 점지정 이후의 scale 입력 및 블록 삽입 절차 진행

)

 

 

 

 

예제는 한점을 중심으로 직경값 입력을 멈출때까지 계속하여 동심원을 그리는 기능

(setq p1(getpoint "\n 중심점 클릭  "))

(while (/= cd nil)  

 (setq cd(getdist "직경 입력 "))
 (if (null cd)(setq cd cd1) (setq cd1 cd))  

 (setq r(/ cd 2))

(setvar "osmode" 0)

(command "circle" p1 r )

(setvar "osmode" osm) 

 ) ; end while

 

 

 

 

(>  aaa bbb) ; 조건 bbb 보다 aaa 가 큰 경우

 

(<  aa bb) ; bb 보다 aa 가 작은 경우

 

(= ccc ddd) ; 조건 ccc 와 ddd 가 같은 경우

 

(<= eee fff) ; 조건 fff 가 eee 와 같거나 큰경우

 

(>= ee ff) ; ee 가 ff 보다 크거나 같은 경우

 

(= ggg nil) ; 조건 ggg 값이 nil (오류) 인 경우

 

(= hhh "") ; 사용자 입력 hhh 문자값이 그냥엔터로 값이 없는 경우

 

(/= cd nil) ; nil아니면 참 응답

 

 

 

 

 

 

 

menucmd 는 캐드메뉴를 호출하여 열어줍니다

 

예제는 CadBOX 의 이미지메뉴를 엽니다

 

리습 이전에 캐드 메뉴 작성 및 로드되어 있어야합니다

 

예제들은 CadBOX 용 메뉴가 로드되어 있는 경우 입니다

 

메뉴 작성문 내에는 각 메뉴의 고유 이름이 존재하여야 합니다

 

 

 

 

My Block 이미지 메뉴 호출

(menucmd "i=CadBOX_MyMenu.MyBlock")(menucmd "i=*")

 

 

 

My Lisp 이미지 메뉴 호출

(menucmd "i=CadBOX_MyMenu.MyLisp")(menucmd "i=*")

 

entget 는 객체정보를 응답하게 하여 필요한 정보를 추출합니다

 

 

 

(setq blocksel (entsel)  ; 객체선택

   ename (car blocksel)  ; 객체이름 저장

   dtblock (entget ename)  ; 객체이름의 객체 상세정보 저장

   blkname (cdr (assoc 2 dtblock)) ; 저장된 정보중에 필요 정보 확보

)

 

 

 

 

 

 

entget 으로 얻어진 상세정보는 필연적으로 assoc 로 상세정보를 추출합니다

assoc 로 상세정보를 추출하는 내용 참조바랍니다

 

 

 

ASSOC 객체의 세부 정보 추출

assoc 는 객체의 세부 정보를 응답하여 줍니다 assoc 문장 형식 (assoc 정보종류 객체) 정보종류는 DXF 코드로 정해져 있습니다 DXF 코드 객체 DXF CODE 정보내용 LINE 10 시작점 11 끝점 POINT 10 점의 위치 CIRC

autocadlisp.tistory.com

 

 

 

tblsearch 는 도면내의 보조요소를 검색합니다

 

주로 if 문에서 존재 유무에 따른 실행문들을 작성합니다

 

 

(tblsearch "LTYPE" "center") ; center 라는 linetype 검색

 

(tblsearch "block" blockname) ; defun으로 정의된 blockname 이름의 block 검색

 

(tblsearch "layer" "1") ; 1 이란 이름의 layer 검색

 

 

 

 

 

블록을 검색하여  존재하면 삽입  비존재시 서브리습으로 새로작도

(if  (tblsearch "block" blkname) (command "-insert" blkname pt 1 1 0) (beam-lsub) )

 

 

도면테이블 검색결과 없음를 참으로   있음을 거짓으로 하는 if 문

(if (= (tblsearch "block" blkname) nil ) (beam-lsub) (command "-insert" blkname pt 1 1 0) )

 

 

 

 

CADBOX  AUTOBOX 는 오토캐드에 강력한 기능들을 추가합니다

 

 

 

 

'T 함수' 카테고리의 다른 글

TRIM fence 옵션으로 다수객체 트림  (0) 2022.08.18

nil 은 연산이나 오류시 nil 을 응답합니다

 

nil 은 pi 와 마찬가지로 고유함수 이므로 사용자 임의로  defun 으로 정의 할 수 없습니다

 

오류의 의미를 가지지만 이 nil 도 변수로 사용가능합니다

 

 

 

 

도면테이블검색하여 원하는 블록이 존재하지 않으면 서브리습으로 새로 작도하고 블록이 존재하면 insert 하는 기능 예제

 

(if (= (tblsearch "block" blkname) nil ) (beam-hsub) (command "-insert" blkname pt 1 1 0) )

 

이때 존재하지 않으면 조건에 nil 을 사용합니다

 

 

 

 

리습 활용으로 캐드를 유용하게 사용하지만

때론 리습 제작자의 의도와 다른 사용자의 조작이나 입력의 부조합으로 에러가 생기는경우기 있습니다

 

어쩌면 사용자 조작과 관계없이 원활한 리습 제작의 한계도 존재합니;다

 

리습의 작도나 삽입을 위해 캐드설정을 미리 설정후 작업을 완료한다음 캐드설정을 원래대로 복원합니다

 

에러가 발생한 경우 미리 캐드설정한 그대로 빠져나오므로 사용자는 자신이 설정한 샹태와 다르게 됩니다

 

또한 사용자가 리습 진행 도중  취소나 esc 로 빠져 나오는 경우도 마찬가지입니다

 

캐드 사용자가 자신이 주로 설정한 값이 자주 바뀌면 매우 불편합니다

 

이 불편을 해소하기위해 에러문을 작성합니다

 

 

이 에러문은 에러 발생시 작동하여 osnap 과 pickbox 값을 리습실행 이전 상태로 복귀합니다

(defun *error* (msg)

 (princ msg) 

(setvar "osmode" osm) (setvar "pickbox" pbox) (prompt "\n Return OSNAP PICKBOX ")

 (prin1 osm)

 (princ) 

 ) 

리습문장내에 이전 osnap 값을 osm 으로  pickbox 겂을 pbox 로 저장한 경우 입니다

 

 

CADBOX  AUTOBOX 는 오토캐드에 강력한 기능들을 추가합니다

 

 

 

 

'E 함수' 카테고리의 다른 글

ENTDEL 객체의 이름으로 삭제  (0) 2022.08.14

긴문장의 복잡한 리습 문장을 작성시 특정부분에 메모 또는 주석을 달 필요가 있을 수 있습니다

 

이 주석으로 리습 작성자는 혼동없이 확인 완성하는데 도움을 줍니다

 

주석의 정의는 ; 단하나의 기호로 정의 됩니다

 

주석이므로 작성자 임의로 자유롭게 작성합니다

 

문장의 라인에서  ; 우측의 모든 문장이나 문자는 무시되어 리습에 영향이 없습니다

 

; 은 해당 라인에만 유효합니다

 

;  가 하나 또는 여러개  ;;;  갯수 무관하게 동일한 역활을 합니다 

 

 

예문

(setq ucspt (getvar "ucsorg") )  ; 사용자좌표계 원점을 기억해두기

 

 

 

 

+ Recent posts