SUBST 예제

 

 

(setq selent(entsel "\n 객체 선택 " ))

 

; 하나의 객체를 선택합니다

 

(setq entname (entget selent))

 

; 선택한 객체의 이름을 저장합니다

 

(setq entname (subst (cons 8 "2") (assoc 8 entname) entname ))

 

;  subst 대체데이터 구데이터 교체대상

; subst 함수로 선택했던 entname의 레이어를(뭔지모르지만) "2" 레이어로 교체하여

; 새로운 객체를 생성하고 그 이름은 entname 덮어쓰기 저장합니다

; 교체대상은 엔티티이름이어야 합니다

 

 

(entmod entname)

 

; 내부 정보가 수정된 엔티티이름의 객체를 갱신표현 합니다

 

SUBST 는 객체의 내부 정보를 교체하여 수정하는 매우 강력한 함수입니다

 

 

 

 

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

 

 

삼각함수로 라디안각도를 구하거나 라디안 각도로 삼각형의 길이를 구합니다

 

 

(sin ang) ; 삼각함수 사인 ang 라디안각

 

(cos ang) ; 삼각함수 코사인 ang 라디안각

 

(atan aa bb) ; 역탄젠트 라디안각 응답, 탄젠트 bb/aa 에 해당하는 라디안각도 응답

 

 

 

 

 

 

 

princ는 따옴표 없이 문자열을 표시합니다.

 

prin1은 따옴표로 묶인 문자열을 표시합니다.

 

print는 따옴표로 둘러싸인 문자열을 표시하지만 식 앞에 빈 줄을 배치하고 뒤에 공백을 배치합니다.

 

 

 

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

PAUSE 사용자 입력 대기  (0) 2022.08.13
PROGN 연속실행문  (0) 2022.08.09
PI 원주율 고유함수  (0) 2022.08.08

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

 

 

블록들만 추출

    (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

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

 

 

(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 을 사용합니다

 

 

 

 

+ Recent posts