合并Dimstyle和文字样式af
你好,我使用这个lisp从dimstyle name和textstyle name中删除绑定前缀。删除前缀后,一些样式名称与现有名称匹配,从而取消重命名过程。如果删除前缀后的名称通常与现有样式的其他名称匹配,我需要有人修改此lisp(我不知道开发人员名称)以合并样式。请帮忙!我在谷歌上搜索了数百次这个问题,但我没有找到!
(defun c:RBP(/ ActDoc Name NewName)
(vl-load-com)
(defun RemoveBindPrefix (String / Pos LastPos)
(if (setq Pos (vl-string-search "$" String))
(progn
(setq LastPos Pos)
(while (setq Pos (vl-string-search "$" String (1+ Pos)))
(setq LastPos Pos)
)
(substr String (+ 2 LastPos))
)
String
)
)
(vlax-for Obj (vla-get-TextStyles ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
(prompt (strcat "\n Text style: " Name " was not renamed."))
)
)
)
(vlax-for Obj (vla-get-DimStyles ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
(prompt (strcat "\n Dimension style: " Name " was not renamed."))
)
)
)
(princ)
) 请帮助-_- 向上的 我们做个交易吧。首先单击此链接-->lmgtfy
如果你找到的解决方案对你来说真的没有帮助,那么我们来看看 所有这些来自谷歌的链接都为我提供了包含在我帖子中的lisp。它可以很好地删除前缀,但删除前缀后无法合并相似的名称!
你介意发布一个示例图,在那里我们可以测试上面的代码并进行必要的调整吗 感谢pBe的快速回复
这是这个链接中的图纸。。我修改了lisp并添加了一条线来执行层合并,效果很好。但是直到现在我还不能合并文本样式和dimstyle!
(defun c:RBP(/ ActDoc Name NewName)
; RemoveBindPrefixes
; Renames layers, blocks, dimension styles, text styles, user coordinate systems, and views
; Merging layers with same name
; Ex: 422-G100-DF$0$Layer1 -> Layer1
(vl-load-com)
(defun RemoveBindPrefix (String / Pos LastPos)
(if (setq Pos (vl-string-search "$" String))
(progn
(setq LastPos Pos)
(while (setq Pos (vl-string-search "$" String (1+ Pos)))
(setq LastPos Pos)
)
(substr String (+ 2 LastPos))
)
String
)
)
;---------------------------------------------------------
(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vlax-for Obj (vla-get-Layers ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
;-----------------
;Merging layers with same name after removing Prefix
(command "-LAYMRG" "_Name" name "" "_Name" NewName "_Yes")
;-------------------
(prompt (strcat "\n Layer: " Name " was merged in Layer " NewName))
)
)
)
(vlax-for Obj (vla-get-Blocks ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
(prompt (strcat "\n Block: " Name " was not renamed."))
)
)
)
(vlax-for Obj (vla-get-TextStyles ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
(prompt (strcat "\n Text style: " Name " was not renamed."))
)
)
)
(vlax-for Obj (vla-get-Views ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
(prompt (strcat "\n View: " Name " was not renamed."))
)
)
)
(vlax-for Obj (vla-get-UserCoordinateSystems ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
(prompt (strcat "\n UCS: " Name " was not renamed."))
)
)
)
(vlax-for Obj (vla-get-DimStyles ActDoc)
(setq Name (vla-get-Name Obj))
(if (/= (setq NewName (RemoveBindPrefix Name)) Name)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
;MERGEDIM
(prompt (strcat "\n Dimension style: " Name " was not renamed."))
)
)
)
(princ)
) 对不起nababeer,我不知道。
问题:当面临两个相同的样式名称(或已经存在的样式)但设置不同时,您更喜欢做什么?dimstyles也是如此。 图纸11.dwg
这是附件中的示例图。您将发现2层(第1层和1000$0$1层)。。还有dimstyle(标准&1000$0$Standard),文字样式也是如此。我需要运行上面的lisp来删除最后一个$的前缀,如果剩余的字符串将与现有名称重复,则应将其合并。非常感谢您的回复
例如,假设没有与截断的xrefbind名称相同的现有样式,并且碰巧有两个样式。哪种环境适用?
1000$0$标准:
2000美元0美元标准;
两者都是标准的。。。。将保留哪种字体?
这是一个一般性的查询,不是您发布的样本图纸上的特定查询。在这里编写免费代码,我们试图使其不仅适用于OP,而且适用于任何寻求类似例程的人。
页:
[1]
2