发一个添加标注前缀φ的程序,之前社区有一些不太适合自己用。
本帖最后由 183017064 于 2025-3-7 13:30 编辑[*]情况1:标注已含%%C前缀情况(跳过操作)
[*]情况2:标注文字被用户修改过(非测量值)添加φ
[*]情况3:标注为原始测量值(未被修改)添加φ(defun c:tt (/ ss i ent obj currText)
(vl-load-com)
(setq ss (ssget '((0 . "DIMENSION")))) ; 选择所有标注对象
(if ss
(progn
(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq obj (vlax-ename->vla-object ent))
(setq currText (vla-get-TextOverride obj))
(cond
;; 情况1:标注已含%%C前缀(跳过操作)
((wcmatch currText "%%C*")
nil ; 不执行任何操作
)
;; 情况2:标注文字被用户修改过(非测量值)
((/= currText "")
(vla-put-TextOverride obj (strcat "%%C" currText))
)
;; 情况3:标注为原始测量值(未被修改)
(t
(vla-put-TextOverride obj "%%C<>")
)
)
(setq i (1+ i))
)
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) ; 结束撤销标记
(princ (strcat "\n已处理 " (itoa i) " 个标注。"))
)
(princ "\n未选中任何标注。")
)
(princ)
)
好几年前,我也写过,也分享下
;;说明:标注批量添加直径符号
(defun C:DDAD(/ dxfstr edata ent i n obj ss)
(vl-load-com)
(command "UNDO" "be")
(if (setq ss (ssget '((0 . "DIMENSION"))))
(progn
(setq n -1 i 0)
(while (setq ent (ssname ss (setq n (1+ n))))
(setq obj (vlax-ename->vla-object ent) edata (entget ent) dxfstr (assoc 1 edata))
(if (not (or (vl-string-search "%%C" (strcase (cdr dxfstr))) (and (equal (vl-string-trim "(< >)" (cdr dxfstr)) "") (equal (strcase (vl-string-trim " " (vla-get-TextPrefix obj))) "%%C"))))
(progn
;;(vla-put-TextPrefix obj "%%C")
(entmod (subst (cons 1 (strcat "%%c" (if (= "" (cdr dxfstr)) "<>" (cdr dxfstr)))) dxfstr edata))
(setq i (1+ i))
)
)
)
(princ (strcat "\n选择了" (itoa (sslength ss)) "个图元;处理了" (itoa i) "个图元!" ))
)
)
(command "UNDO" "e")
(prin1)
)
;;说明:标注批量删除直径符号
(defun C:DDCD(/ dxfstr edata ent i idx n obj ss)
(vl-load-com)
(command "UNDO" "be")
(if (setq ss (ssget '((0 . "DIMENSION"))))
(progn
(setq n -1 i 0)
(while (setq ent (ssname ss (setq n (1+ n))))
(setq obj (vlax-ename->vla-object ent) edata (entget ent) dxfstr (assoc 1 edata))
(if (= (setq idx (vl-string-search "%%C" (strcase (cdr dxfstr)))) 0)
(progn
(entmod (subst (cons 1 (substr (cdr dxfstr) 4)) dxfstr edata))
(setq i (1+ i))
)
(if (equal (strcase (vl-string-trim " " (vla-get-TextPrefix obj))) "%%C")
(vla-put-TextPrefix obj "")
)
)
)
(princ (strcat "\n选择了" (itoa (sslength ss)) "个图元;处理了" (itoa i) "个图元!" ))
)
)
(command "UNDO" "e")
(prin1)
)
感谢两位大神的分享 太棒了,感谢两位大神的分享
页:
[1]