;; 속성변경에는 다음 명령이 필요하다. (subst) (entmod) (cons)
;; 단점은 한번에 속성 하나씩 (subst 가 여러개의 cons를 한꺼번에 바꾸지 못함.)
;; 'dxf' 정보에 기본인 속성은 표시되지 않아, (append) 추가함
;; 기존 속성이 있으면, (subst) 로 속성 교체,
;; 없으면 (append) 로 추가.
;; cons 정보는 list 로 처리함.
;; color: bylayer; layer: 0; (setq conslist (list (cons 62 256) (cons 8 "0")))
;; 바꿀 속성 conslist 갯수만큼 순환 시킴. 마지막에 (entmod) 실행.
;; 아래 샘플 명령 '00'은 선택한 개체들을 bylayer 색상, 0 레이어로 바꿈 (c:00)
;; (cons 420은 트루컬러일 때 세팅 됨. 따라서 (cons 420이 있으면, 리스트에서 제거함.
(defun KM:SUBST_CONS ( _DXFNAME _CONS / dxn con v ndx ncons )
(setq dxn _DXFNAME con (car _CONS) v (cdr _CONS))
(setq ndx dxn)
(if (/= nil (assoc con ndx))
(progn
(setq nlist (cons con v) olist (assoc con ndx))
(setq ndx (subst nlist olist ndx))
)
(progn
(setq ncons (list (cons con v)))
(setq ndx (append ndx ncons))
)
);if
);defun
;;
;;(KM:SUBST_CONS dx conn)
;;(setq dx (append dx '((62 . 4))))
;;(setq conn '(( 62 . 4)))
;;(setq conn (cons 62 256))
;;(setq conn (list conn))
;;
(defun KM:CONSmulti ( _DXFNAME _CONSLIST / dn conli cnt n conn )
(setq dn _DXFNAME conli _CONSLIST cnt 0 n 0)
(setq cnt (length conli))
(repeat cnt
(setq conn (nth n conli))
(setq dn (KM:SUBST_CONS dn conn))
(setq n (1+ n))
);repeat
(entmod dn)
(princ)
);defun
;;
;;
(defun c:00 ( / ss n dx conslist cnt ) ;; Selected Entities setting to 'Bylayer' color, '0' layer
(vl-load-com)
(setq ss (ssget) n 0 cnt (sslength ss) )
(setq conslist (list (cons 62 256) (cons 8 "0")))
;;(while (/= nil ss) while에서 에러가 남. repeat로 변경.
(repeat cnt
(setq dx (entget (ssname ss n)))
(if (/= nil (assoc 420 dx))
(setq dx (vl-remove (assoc 420 dx) dx)) ;; remove true color
);if
; (setq dx (entget (car (entsel))))
(KM:CONSmulti dx conslist)
(setq n (1+ n))
);repeat
(princ)
);defun
;;
;;
while 문에서 에러가 발생. repeat 문으로 변경. 에러 없음^^
역시 순환문은 어렵습니다. ㅠㅠ?
반응형
'autocad' 카테고리의 다른 글
| 대화상자 끄기. DialogBox_OFF (0) | 2025.09.12 |
|---|---|
| Remove item in the LIST (0) | 2025.09.10 |
| radian (0) | 2025.09.08 |
| 문장 내부에 마지막 숫자만 무조건 1 증가; 감소 (0) | 2025.09.04 |
| 대소문자 바꾸기 (0) | 2025.09.03 |