nababeer 发表于 2022-7-5 20:05:01

合并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)

)

nababeer 发表于 2022-7-5 20:09:28

请帮助-_-

nababeer 发表于 2022-7-5 20:13:11

向上的

pBe 发表于 2022-7-5 20:16:12

我们做个交易吧。首先单击此链接-->lmgtfy
 
如果你找到的解决方案对你来说真的没有帮助,那么我们来看看

nababeer 发表于 2022-7-5 20:20:12

所有这些来自谷歌的链接都为我提供了包含在我帖子中的lisp。它可以很好地删除前缀,但删除前缀后无法合并相似的名称!

pBe 发表于 2022-7-5 20:23:27

 
你介意发布一个示例图,在那里我们可以测试上面的代码并进行必要的调整吗

nababeer 发表于 2022-7-5 20:24:34

感谢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)

)

pBe 发表于 2022-7-5 20:28:35

对不起nababeer,我不知道。
 
问题:当面临两个相同的样式名称(或已经存在的样式)但设置不同时,您更喜欢做什么?dimstyles也是如此。

nababeer 发表于 2022-7-5 20:32:34

图纸11.dwg
 
这是附件中的示例图。您将发现2层(第1层和1000$0$1层)。。还有dimstyle(标准&1000$0$Standard),文字样式也是如此。我需要运行上面的lisp来删除最后一个$的前缀,如果剩余的字符串将与现有名称重复,则应将其合并。非常感谢您的回复

pBe 发表于 2022-7-5 20:35:37

 
 
例如,假设没有与截断的xrefbind名称相同的现有样式,并且碰巧有两个样式。哪种环境适用?
 
1000$0$标准:
2000美元0美元标准;
 
两者都是标准的。。。。将保留哪种字体?
 
这是一个一般性的查询,不是您发布的样本图纸上的特定查询。在这里编写免费代码,我们试图使其不仅适用于OP,而且适用于任何寻求类似例程的人。
页: [1] 2
查看完整版本: 合并Dimstyle和文字样式af