AutoLISP ObjectDBX 방법을 사용하여 도면 내부 블록의 모든 속성을 삭제하고 싶습니다.
아래 프로그램은 잘 작동합니다. 도면 내 모든 블록의 속성을 삭제하지만 블록 편집기에서이 블록을 편집 할 때 모든 속성이 여전히 존재하는 것을 볼 수 있습니다.
블록 정의에서이 속성을 삭제해야한다고 생각합니다.
;[dwgin]--input drawing file
;[dwgout]-- Output drawing fath with name
;function 'LM:GetDocumentObject' lee mac function to open drawing in ObjectDBX method
(defun DBXAttDelete ( dwgin dwgout / doc flg val )
(if (setq doc (LM:GetDocumentObject dwgin))
(progn
(vlax-for lyt (vla-get-layouts doc)
(vlax-for obj (vla-get-block lyt)
(if (and (= "AcDbBlockReference" (vla-get-objectname obj))
(= :vlax-true (vla-get-hasattributes obj))
)
(foreach att (vlax-invoke obj 'getattributes)
(if (vl-catch-all-error-p (setq err (vl-catch-all-apply 'vla-delete (list att))))
(princ (strcat "\nERROR: " (vl-catch-all-error-message err)))
)
)
)
)
)
(vla-saveas doc dwgout)
(vlax-release-object doc)
flg
)
(prompt (strcat "\nThe drawing \"" dwgin "\" was not found or could not be accessed."))
)
)
이 프로그램을 개선 / 수정해야하는 부분을 찾는 데 도움을 줄 수 있습니까?
블록 정의는 기본적으로 블록에 대한 "청사진"이고 각 블록 참조는 도면의 특정 위치, 축척, 회전 및 방향에서 블록 정의 내에서 발견 된 객체를 표시하는 인스턴스입니다.
이 특성은 속성 정의 차단 내에 정의 하고, 대응하는 속성 참조 각 블록에 부착 참조 . 그런 다음 이러한 속성 참조는 도면에 삽입 된 각 블록 참조에 대해 서로 다른 텍스트 컨텐츠를 보유 할 수 있습니다.
흥미롭게도 속성 참조는 블록 정의와 관계없이 프로그래밍 방식으로 블록 참조에 첨부 될 수 있지만 표준 기본 프런트 엔드를 사용하여 AutoCAD를 작동 할 때는 허용되지 않습니다.
따라서 도면에서 모든 속성을 제거하려면 모든 블록 참조와 연관된 속성 참조를 삭제하고 해당 블록 정의에서 속성 정의를 삭제해야합니다.
삭제 작업을 수행하기 전에 잠긴 레이어의 잠금을 해제하고이 작업 후에 이전에 잠긴 레이어를 다시 잠글 수도 있습니다.
배치는 단지 블록 유형일 뿐이므로 블록 집합을 반복하면 모든 배치, 블록 및 내포 된 블록 (외부 참조 제외)을 처리하기에 충분합니다.
(defun DBXAttDelete ( dwgin dwgout / doc lck )
(if (setq doc (LM:GetDocumentObject dwgin))
(progn
(vlax-for lay (vla-get-layers doc)
(if (= :vlax-true (vla-get-lock lay))
(progn
(setq lck (cons lay lck))
(vla-put-lock lay :vlax-false)
)
)
)
(vlax-for blk (vla-get-blocks doc)
(if (= :vlax-false (vla-get-isxref blk))
(vlax-for obj blk
(cond
( (= "AcDbBlockReference" (vla-get-objectname obj))
(if (= :vlax-true (vla-get-hasattributes obj))
(foreach att (vlax-invoke obj 'getattributes)
(vla-delete att)
)
)
)
( (= "AcDbAttributeDefinition" (vla-get-objectname obj))
(vla-delete obj)
)
)
)
)
)
(foreach lay lck
(vla-put-lock lay :vlax-true)
)
(vla-saveas doc dwgout)
(vlax-release-object doc)
t
)
(prompt (strcat "\nThe drawing \"" dwgin "\" was not found or could not be accessed."))
)
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다