如果样式不是宋体,而是其他样式呢?这正是我在纳巴贝尔的目的,有一些条件需要首先解决。
彻底描述预期结果,而不是步骤。
你请求帮助,至少做你该做的。 好的,pBe
我不知道条件,因为我不熟悉lisp。但实际情况是,我已经将所有文本样式的字体转换为Arial。ttf然后我使用我之前上传的lisp。在实际情况下,样式名称在$0$之后相似,而不是在我发送的图形之前。因此,带前缀的样式名称应合并为不带前缀的样式名称。然后我必须清除所有,以删除带有前缀的样式名称!
谢谢你的时间pBe
我所说的条件是指期望的结果,与编写代码无关。正如我所说,我们在这里试图使代码尽可能通用。
深吸一口气,想想最终的结果,这是一个简单的假设/然后/否则。。。不涉及编码,我试图在这里帮助您获得一个合适的解决方案nababeer。要有耐心。 这就是我认为的程序:
试试下面的nababeer,我希望它能有所帮助:
(defun c:mergedimtxt ( / cmd doc pos str )
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(foreach col '(textstyles dimstyles)
(mergedimtxt:processcollection (vlax-get-property doc col))
)
(vlax-for blk (vla-get-blocks doc)
(if (= :vlax-false (vla-get-isxref blk))
(vlax-for obj blk
(if
(and
(wcmatch (vla-get-objectname obj) "AcDb*Text,AcDb*Dimension")
(setq str (vla-get-stylename obj)
pos (vl-string-position 36 str nil t)
)
(vlax-write-enabled-p obj)
)
(vla-put-stylename obj (substr str (+ 2 pos)))
)
)
)
)
(setq cmd (getvar 'cmdecho))
(setvar 'cmdecho 0)
(setvar 'textstyle "Standard")
(command "_.-dimstyle" "_r" "Standard" "_.-purge" "_r" "*" "_n" "_.-purge" "_a" "*" "_n")
(setvar 'cmdecho cmd)
(vla-regen doc acallviewports)
(princ)
)
(defun mergedimtxt:processcollection ( col / pos str )
(vlax-for obj col
(if
(and
(setq str (vla-get-name obj)
pos (vl-string-position 36 str nil t)
)
(vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list col (substr str (+ 2 pos)))))
)
(vla-put-name obj (substr str (+ 2 pos)))
)
)
)
(vl-load-com) (princ)
非常感谢李
我应该从另一个lisp RBP运行它吗?还是单独运行?因为我运行了它,它给出了一个错误消息,指的是Active X!
不客气。
您应该能够独立运行它-您收到了什么错误消息?
ActiveX服务器返回错误:类型不匹配!
这很奇怪——我似乎无法复制这个错误。
使用该程序测试的每个图形上是否都会出现错误?
页:
1
[2]