블럭안의 치수만 지우는 방법입니다.
치수로 캐드의 입장에서는 하나의 블럭이기 때문에.. 이를 처리하는 과정을 잘 숙지하면 리습에 더 빨리 익숙해 질 수 있습니다.
아래 방법은 선택한 영역 안에서만 처리를 하는 방법이고,
;;;-----------------------------------------------------------------------------;
;; 블럭안의 치수만 지우는 두가지 방법
;; 출처: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 |