블럭안의 치수만 지우는 방법입니다.
치수로 캐드의 입장에서는 하나의 블럭이기 때문에.. 이를 처리하는 과정을 잘 숙지하면 리습에 더 빨리 익숙해 질 수 있습니다.
아래 방법은 선택한 영역 안에서만 처리를 하는 방법이고,
;;;-----------------------------------------------------------------------------; ;; 블럭안의 치수만 지우는 두가지 방법 ;; 출처:https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/delete-dimensions-inside-blocks/td-p/2840905 ;;;-----------------------------------------------------------------------------; (defun c:Test (/ ss i sn name lst) (vl-load-com) ;;; ------ Tharwat 15. June. 2012 ----- ;;; ;;; codes to delete all dimensions entities in the ;;; ;;; selected blocks ;;; (if (not acdoc) (setq acdoc (vla-get-activedocument (vlax-get-acad-object))) ) (if (setq ss (ssget "_:L" '((0 . "INSERT")))) (repeat (setq i (sslength ss)) (setq sn (ssname ss (setq i (1- i)))) (if (not (member (setq name (cdr (assoc 2 (entget sn)))) lst)) (progn (setq lst (cons name lst)) (vlax-for each (vla-item (vla-get-blocks acdoc) name) (if (wcmatch (vla-get-objectname each) "AcDb*Dimension") (vla-delete each)) ) ) ) ) (princ) ) (if ss (vla-regen acdoc AcAllviewports)) (princ) )
이 방법은 도면 전체에 대한 처리 방법입니다.
선택영역을 구분하지 않는다면, 이 방법이 통상적으로 사용되는 방법입니다.
또한 세번째 방법도 존재할 수 있는데.. 이 방법을 주구문으로 하여 내부에 선택영역의 블럭 이름과 비교를 해서 처리는 하는 방법도 있을 수 있습니다.
;;;-----------------------------------------------------------------------------; (defun c:Test (/ aDoc) (vl-load-com) (setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-for blk (vla-get-blocks aDoc) (if (and (eq :vlax-false (vla-get-isXref blk)) (eq :vlax-false (vla-get-isLayout blk)) (not (wcmatch (vla-get-name blk) "`*D*")) ) (vlax-for dim blk (if (wcmatch (vla-get-ObjectName dim) "AcDb*Dimension") (vla-delete dim)) ) ) ) (vla-regen aDoc acAllViewports) (princ) )
'Lisp & Tips > Lisp' 카테고리의 다른 글
vla-get-selectionsets, vla-get-activeselectionset 활용법 (0) | 2016.05.08 |
---|---|
=, eq, equal (0) | 2016.04.02 |
vl-every, vl-some 함수 (0) | 2016.02.20 |
vla-get-blocks 과 그 내용 (0) | 2015.09.09 |
블럭의 삽입점을 좌표로 받는 네가지 방법 (0) | 2015.07.28 |