乐筑天下

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

[编程交流] LISP重命名块以匹配

[复制链接]

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 07:33:57 | 显示全部楼层 |阅读模式
谁能帮我制定一个lisp,将重命名块名以匹配其层名?
我需要的是在多个层上选择多个块,每个块名称应该采用其层名称。我这里有一千多块,用来装订15层的图纸
 
例子:
层名称:E-Ligh-BR
区块名称:X-??-$0$-E-Ligh-BR
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 08:16:53 | 显示全部楼层
我认为这实际上行不通。每个块名称都必须是唯一的。如果重命名其中一个,则也会重命名其所有引用。如果在同一层上有两种不同的块类型,会发生什么情况?或者,这种情况永远不会发生,也就是说,你也有1000层?
 
你提到Bined。这些块最初来自外部参照,也应该有一个来自外部参照的层,名称如下:XrefName$LayerName。如果不希望这样做,则应只重新绑定DWG,并使用“插入”选项而不是“绑定”选项。
 
顺便说一句,那$0$... 名称中的部分实际上告诉我您有嵌套的外部参照,内部有重复的块。或者在某些时候,有人使用了RefEdit,但它没有正确关闭(这在RefEdit中很常见)。如果是这种情况,那么你要做的就是合并“重复”块定义,并更改对合并版本的所有引用,然后清除旧的重复项。这可能有点复杂,这取决于您希望测试关于块定义相等性的“准确性”。如果测试只是检查两个块的名称中是否有相同的结束部分(即在最后一个$之后),那么可能就不那么复杂了。
 
如果后者:而不是为你写,我会给你一些提示:
 
[列表]
  • 使用tblnext逐步遍历图形中的每个块定义。
  • 使用assoc和块定义名称的相关DXF代码获取当前块的名称。在这种情况下2。
  • 对于每个名称,检查名称中是否有$。为此使用wcmatch。
  • 如果是这样的名称,请去掉前面的部分。各种各样的方法。但这里有一个非常简单的例子:
    [/列表]
    1. ;; Say the name is stored in a variable name
    2. (while (wcmatch name "*$*") (setq name (substr name 2)))

    [列表]
  • 现在将该名称与原始名称一起存储在一个列表中,供以后使用,使用cons。但您应该使用assoc检查该名称是否已经在该列表中。例如:
    [/列表]
    1. (if (setq found (assoc name SavedList))
    2. (setq SavedList (subst (cons name (cons OriginalName (cdr found))) found SavedList))
    3. (setq SavedList (cons (list name OriginalName) SavedList)))

    [列表]
  • 遍历所有块后,您会得到一个列表,其中包含不同名称的重复块的子列表。
  • 由此,您应该能够将每个子列表中的第一个重命名为“正确”的名称。您可能需要检查是否已经定义了这样的名称-使用tblsearch。
  • 对于其余的原始名称,您需要搜索它们的引用(如果没有嵌套块,请使用ssget),否则,请使用entnext再次遍历块定义并在其定义内。使用entget获取dxf数据列表。
    [列表]
  • 对于每个插入对象,对照其中一个原始对象检查其名称。
  • 如果找到,使用entmod将其名称更改为新的已清理名称。
    [/列表]
     
  • 最后清除图形。
    [/列表]
    可能会将所有这些合并到一个循环中,并/或使其更高效。但无论你做什么,原则都是一样的。
  • 回复

    使用道具 举报

    17

    主题

    193

    帖子

    179

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    84
    发表于 2022-7-6 08:45:53 | 显示全部楼层
     
     
    我想你是对的。我最终会做一个块,删除所有其他块
    并将该块重新插入到各自的位置。。。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-10 05:01 , Processed in 0.531809 second(s), 58 queries .

    © 2020-2025 乐筑天下

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