아래와 같이 특정 색상을 선택하여 삭제하는 리습을 구했습니다.
(defun c:ec(/ ss OS en ent obj col color layobj sss smemeber color2 ssno num sslen sss )
(defun *error* (msg)(princ “error: “)(princ msg)
(setvar “osmode” os) (command “clayer” “0”) (princ) )
(setq os (getvar “osmode”))
;(vl-load-com)
(sssetfirst)
(setq sss nil sss (ssadd))
(setq en (car (entsel “컬러필터링 삭제 – 기준컬러 객체를 선택”)))
(WHILE ( = EN NIL)
(setq en (car (entsel “n 컬러필터링 삭제 – 기준컬러 객체를 선택”)))
) ;WHILE END
(setq ent (entget en) color (cdr (assoc 62 ent)) layer (cdr (assoc 8 ent)))
(if (= nil color)
(progn ;;;;;;; bylayer 인 경우의 처리
(setq obj(vlax-ename->vla-object en))
(setq col (vla-get-TrueColor obj))
(setq color(vlax-get col ‘Colorindex))
(if (= color 256)
(progn
(setq layobj (vlax-ename->vla-object (tblobjname “LAYER” (vlax-get obj ‘LAYER))))
(setq layobj (vla-get-TrueColor layobj))
(setq color (vla-get-ColorIndex layobj))
(PRINC “n ColorIndex = “)
(PRINC COLOR)
)
);if end
);progn end
;;————————-
(progn ;;;;;;; bylayer가 아닌경우의 처리
(PRINC “n ColorIndex = “)
(PRINC COLOR)
);progn end
); if end
;;;;;;;;;;;;;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;;;;;;;;;;;;;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;;;;;;;;;;;;;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(prompt “n객체범위를 선택”)
(while (/= (setq ss (ssget)) nil)
(progn
(if ( = ss nil)
(exit)
)
(setq sslen (sslength ss)
ssno 0
num 0)
(while (/= sslen ssno) ;while bbb
(progn
(setq smember (ssname ss ssno))
(setq ssno (+ ssno 1))
(setq color2 (cdr (assoc 62 (entget smember))))
(if (= nil color2)
(progn ;;;;;;; bylayer 인 경우의 처리
(setq obj (vlax-ename->vla-object smember))
(setq col (vla-get-TrueColor obj))
(setq color2 (vlax-get col ‘Colorindex))
(if (= color2 256)
(progn
(setq layobj (vlax-ename->vla-object (tblobjname “LAYER” (vlax-get obj ‘LAYER))))
(setq layobj (vla-get-TrueColor layobj))
(setq color2 (vla-get-ColorIndex layobj))
);progn end
);if end
) ;progn end
) ; if end
(if (= color color2)
;(command “erase” smember “” )
(ssadd smember sss)
) ; if end
);progn end
);while-bbb end
(command “erase” sss “”)
);progn end
);while end
) ;defun end
(command “erase” sss “”)
==> (sssetfirst nil sss)
함수를 사용하면 될 것 같긴한데….
(defun c:TTT(/ entdata entcolour colour layer layerlist layercolourlist layernamefilter strlayer strlayerlen filter)
(setq entdata (entget (car (entsel “nPls select object color.”))))
(if (setq entcolour (cdr (assoc 62 entdata)))
(setq colour entcolour)
(setq colour (cdr (assoc 62 (tblsearch “layer” (cdr (assoc 8 entdata))))))
)
(setq layer (tblnext “layer” T))
(while layer
(setq layerlist (append layerlist (list layer)))
(setq layer (tblnext “layer”))
)
(while layerlist
(if
(/= colour (cdr (assoc 62 (nth 0 layerlist))))
(setq layerlist (cdr layerlist))
(progn
(setq layercolourlist (append (list (cdr (assoc 2 (nth 0 layerlist)))) layercolourlist))
(setq layerlist (cdr layerlist))
)
)
)
(if (= layercolourlist nil)
(setq filter (list (cons 62 colour) (cons -4 “”)))
(progn
(setq strlayer “”)
(while (car layercolourlist)
(setq strlayer (strcat strlayer (car layercolourlist) “,”))
(setq layercolourlist (cdr layercolourlist))
)
(setq strlayerlen (strlen strlayer))
(setq layernamefilter (substr strlayer 1 (1- strlayerlen)))
(setq filter (list (cons -4 “<or") (cons -4 "”) (cons 62 colour) (cons -4 “or>”) (cons -4 “”)))
)
)
(prompt “nPls select object.”)
(sssetfirst nil (ssget filter))
(princ)
)
색상 선택 리습입니다..
선택유지됩니다