用新模板更新旧模板
所以我不得不做很多无聊的工作,比如用新模板更新旧模板。我被要求将所有属性文本复制到新模板。不,我不打算做那个手册。所以我开始在论坛上搜索我可以使用的autolisp。到目前为止,我几乎得到了它,除了一个我丢失的小链接。问题是新模板没有与新模板相同的标签,甚至少了一个主题行。所以我必须合并一个属性(att1+att2)=att3就足够了。
Edit在搜索battman lisp后找到了重命名标记lisp文件
edit2:我现在一切正常,只需要合并两个属性值。
EDIT3仅当块具有相同名称时,代码粘贴才起作用。该块尝试删除检查但失败。有人知道怎么取消姓名审查吗?
check new posts
哈哈,我在这里做了很多非真题(至少我学到了很多)。
为我工作的代码现在用新标签重命名旧标签,然后用新标签替换模板,并用attsync更新模板。它还调整新模板的比例。
(defun changeTags (/ BLK DOC I TAGLST SS)
(vl-load-com)
(setq blk "A10"
tagLst '(
;"Old Tag" "New Tag"
("REG1" "PROJECTTITLE2")
("REG2" "TITLE1")
("REG3" "TITLE2")
("CLIENT" "CLIENT1")
("PROJECT" "PROJECTTITLE1")
("REG1" "PROJECTTITLE2")
)
i -1
doc (vla-get-activedocument (vlax-get-acad-object))
)
(if (ssget "_X" (list (cons 0 "INSERT")(cons 2 blk)))
(vlax-for bl (setq ss (vla-get-activeselectionset doc))
(foreach att (vlax-invoke bl 'getAttributes)
(If (assoc (vla-get-tagstring att) tagLst)
(vla-put-tagstring att (cadr (assoc (vla-get-tagstring att) tagLst)))
)))
(princ "\nNo Selection Set Found."))
(princ)
(progn
(command "-rename" "b" "A10" "new block NEW LOGO")
(command "_.-insert" "new block NEW LOGO=Template_New_2010" "y" nil);replaced convert template to new template.
(command "_.attsync" "n" "new block NEW LOGO")
(scl);; scales all templates
)(princ)(princ "succes!")(princ)
)
;; Run program manually with this:
(defun c:ChTag () (changeTags))
;; Uncomment this to run when lisp loaded
;(changeTags)
;; Scale the old template to new one
(defun scl (/ ss)
(vl-load-com)
(if (setq SS (ssget "_X" (list '(0 . "INSERT") (cons 2 "new block NEW LOGO"))))
;(if (setq ss (ssget '((0 . "CIRCLE,ARC,ELLIPSE"))))
(mapcar
(function
(lambda (Obj)
(vla-ScaleEntity Obj
(vla-get-insertionpoint Obj)9.673518)))
(mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp
(mapcar 'cadr (ssnamex ss))))))
(princ))
这一切都是成批进行的,所以我要休息一天
页:
[1]