乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 合并Dimstyle和文字样式af

[复制链接]

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:05:01 | 显示全部楼层 |阅读模式
你好,
 
我使用这个lisp从dimstyle name和textstyle name中删除绑定前缀。删除前缀后,一些样式名称与现有名称匹配,从而取消重命名过程。如果删除前缀后的名称通常与现有样式的其他名称匹配,我需要有人修改此lisp(我不知道开发人员名称)以合并样式。请帮忙!我在谷歌上搜索了数百次这个问题,但我没有找到!
 
  1. (defun c:RBP(/ ActDoc Name NewName)
  2. (vl-load-com)
  3. (defun RemoveBindPrefix (String / Pos LastPos)
  4. (if (setq Pos (vl-string-search "$" String))
  5. (progn
  6. (setq LastPos Pos)
  7. (while (setq Pos (vl-string-search "$" String (1+ Pos)))
  8. (setq LastPos Pos)
  9. )
  10. (substr String (+ 2 LastPos))
  11. )
  12. String
  13. )
  14. )
  15. (vlax-for Obj (vla-get-TextStyles ActDoc)
  16. (setq Name (vla-get-Name Obj))
  17. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  18. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  19. (prompt (strcat "\n Text style: " Name " was not renamed."))
  20. )
  21. )
  22. )
  23. (vlax-for Obj (vla-get-DimStyles ActDoc)
  24. (setq Name (vla-get-Name Obj))
  25. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  26. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  27. (prompt (strcat "\n Dimension style: " Name " was not renamed."))
  28. )
  29. )
  30. )
  31. (princ)
  32. )
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:09:28 | 显示全部楼层
请帮助-_-
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:13:11 | 显示全部楼层
向上的
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:16:12 | 显示全部楼层
我们做个交易吧。首先单击此链接-->lmgtfy
 
如果你找到的解决方案对你来说真的没有帮助,那么我们来看看
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:20:12 | 显示全部楼层
所有这些来自谷歌的链接都为我提供了包含在我帖子中的lisp。它可以很好地删除前缀,但删除前缀后无法合并相似的名称!
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:23:27 | 显示全部楼层
 
你介意发布一个示例图,在那里我们可以测试上面的代码并进行必要的调整吗
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:24:34 | 显示全部楼层
感谢pBe的快速回复
 
这是这个链接中的图纸。。我修改了lisp并添加了一条线来执行层合并,效果很好。但是直到现在我还不能合并文本样式和dimstyle!
 
  1. (defun c:RBP(/ ActDoc Name NewName)
  2. ; RemoveBindPrefixes
  3. ; Renames layers, blocks, dimension styles, text styles, user coordinate systems, and views
  4. ; Merging layers with same name
  5. ; Ex: 422-G100-DF$0$Layer1 -> Layer1
  6. (vl-load-com)
  7. (defun RemoveBindPrefix (String / Pos LastPos)
  8. (if (setq Pos (vl-string-search "$" String))
  9. (progn
  10. (setq LastPos Pos)
  11. (while (setq Pos (vl-string-search "$" String (1+ Pos)))
  12. (setq LastPos Pos)
  13. )
  14. (substr String (+ 2 LastPos))
  15. )
  16. String
  17. )
  18. )
  19. ;---------------------------------------------------------
  20. (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  21. (vlax-for Obj (vla-get-Layers ActDoc)
  22. (setq Name (vla-get-Name Obj))
  23. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  24. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  25. ;-----------------
  26. ;Merging layers with same name after removing Prefix
  27. (command "-LAYMRG" "_Name" name "" "_Name" NewName "_Yes")
  28. ;-------------------
  29. (prompt (strcat "\n Layer: " Name " was merged in Layer " NewName))
  30. )
  31. )
  32. )
  33. (vlax-for Obj (vla-get-Blocks ActDoc)
  34. (setq Name (vla-get-Name Obj))
  35. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  36. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  37. (prompt (strcat "\n Block: " Name " was not renamed."))
  38. )
  39. )
  40. )
  41. (vlax-for Obj (vla-get-TextStyles ActDoc)
  42. (setq Name (vla-get-Name Obj))
  43. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  44. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  45. (prompt (strcat "\n Text style: " Name " was not renamed."))
  46. )
  47. )
  48. )
  49. (vlax-for Obj (vla-get-Views ActDoc)
  50. (setq Name (vla-get-Name Obj))
  51. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  52. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  53. (prompt (strcat "\n View: " Name " was not renamed."))
  54. )
  55. )
  56. )
  57. (vlax-for Obj (vla-get-UserCoordinateSystems ActDoc)
  58. (setq Name (vla-get-Name Obj))
  59. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  60. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  61. (prompt (strcat "\n UCS: " Name " was not renamed."))
  62. )
  63. )
  64. )
  65. (vlax-for Obj (vla-get-DimStyles ActDoc)
  66. (setq Name (vla-get-Name Obj))
  67. (if (/= (setq NewName (RemoveBindPrefix Name)) Name)
  68. (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Name (list Obj NewName)))
  69. ;MERGEDIM
  70. (prompt (strcat "\n Dimension style: " Name " was not renamed."))
  71. )
  72. )
  73. )
  74. (princ)
  75. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:28:35 | 显示全部楼层
对不起nababeer,我不知道。
 
问题:当面临两个相同的样式名称(或已经存在的样式)但设置不同时,您更喜欢做什么?dimstyles也是如此。
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

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

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:35:37 | 显示全部楼层
 
 
例如,假设没有与截断的xrefbind名称相同的现有样式,并且碰巧有两个样式。哪种环境适用?
 
1000$0$标准:
2000美元0美元标准;
 
两者都是标准的。。。。将保留哪种字体?
 
这是一个一般性的查询,不是您发布的样本图纸上的特定查询。在这里编写免费代码,我们试图使其不仅适用于OP,而且适用于任何寻求类似例程的人。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 08:55 , Processed in 1.068958 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表