mattdalgety 发表于 2022-7-5 15:39:55

列出替代nam的例程

你好
 
不知是否有人能帮我做这件事。我通过类似的线索看了一眼,但似乎找不到我想要的东西。
 
我需要一个lisp,它基本上完成了块替换所做的事情,但没有选择块所需的用户输入。
 
假设我有一个名为“Circle 102”的块,我总是想用另一个名称替换这个Circle 102块。e、 g“块1”
然后可以用另一个“块2”来“圈103”
 
等等等等。
 
如果有人能帮我解决这个问题,我会绞尽脑汁。
 
干杯

rlx 发表于 2022-7-5 15:48:05

嗨,Mattdalgety,欢迎收看CadTutor
 
 
我有一条自己的(但它有点像一条龙):http://www.cadtutor.net/forum/showthread.php?100670-RlxBlk Replace重定义块可见性状态预览和链接属性&高亮显示=RlxBlk
 
 
我相信塔瓦特有一个更友好的使用,但不能这么快找到它,所以希望他阅读这篇文章并回复。
仅找到此网站:https://autolispprograms.wordpress.com/hvac/hvac-application/
 
 
啊,找到了:https://apps.autodesk.com/ACD/en/Detail/Index?id=4002734712009543256&appLang=en&os=Win32_64
 
 
最后但并非最不重要的一点,我相信李大师在他辉煌的网站上有一些东西:http://www.lee-mac.com/index.html
 
 
gr.Rlx

mattdalgety 发表于 2022-7-5 15:53:40

谢谢你,朋友,看看你的日常生活,它看起来比我想要的要复杂一点。
 
本质上,我只需要一个“哑”lisp例程,我可以设置一次,然后离开它。
 
ie运行命令,并用其他指定块替换所有指定块。
 
例如,块1替换块a
块2替换块b
块3替换块c等。
 
我使用它的目的是转换导出的喷水器符号(或者我应该说是直线和圆)从revit到我自己的区块。
 
当revit to cad将其导出为圆弧和圆时,我使用命令根据半径将其转换为块,然后使用“块替换”(block replace)将blockname:radius200替换为blockname:springrupright。
 
现在,我需要手动选择每个区块。
 
我期待着简化这一点,使它点击一次,并取代所有预定义的块名。
 
 

Tharwat 发表于 2022-7-5 15:54:13

感谢Rlx的推荐。
 
我想这就是OP想要的。用另一个块替换块

mattdalgety 发表于 2022-7-5 15:59:49

谢谢各位,
 
看起来仍然不是我想要的。
 
这些例程对于用户输入来说有点太复杂了
 
我真正想要的是一个简化版的blockreplace,它不是用户选择要替换的块然后替换它,而是我能够键入块名并将其保存到例程中,这样命令就不必每次都暂停用户输入。
 
例如,运行例程
 
lisp查找所有块标题“blocka.dwg”
 
更换所有blocka。带块b.dwg的图纸。
 
然后搜索下一个。
 
查找所有块标题“blockc.dwg”
 
更换所有blockc。带有块d.dwg的dwg。
 
等等
 
 

rlx 发表于 2022-7-5 16:03:22

 
 
不幸的是,我还没有为我的应用程序实现多个块和脚本模式,有人刚刚给了我大量的工作,尽管如果块不是动态的,没有需要迁移的属性,这可能会相对简单。
 
 
但为了给出提示,您可以使用insert命令中的=选项:-insert“BlockA=c:/temp/BlockB”将用“BlockB”的定义重新定义所有名为“BlockA”的块(但名称仍为BlockA),或者,只在文件中命名BlockB也为BlockA。请注意专家变量的设置。在0,0上插入一次,例如,entdel entlast,et voila。。。
 
 
gr.Rlx

Tharwat 发表于 2022-7-5 16:10:24

你好
一种快速代码,只适用于常规块(非动态块或属性块)。

(defun c:repblocks (/ blk1 blk2 msg1 msg2 doc)
;; Tharwat - Date: 12.Jan.2018        ;;
(setq blk1 "BlockA"
       blk2 "BlockB"
       msg1 "Block name <"
       msg2 "> could not be found in this drawing <!>"
       doc(vla-get-activedocument (vlax-get-acad-object))
)
(if
   (and (or (setq sel (ssget "_X" (list '(0 . "INSERT") (cons 2 blk1))))
            (alert (strcat msg1 blk1 msg2))
      )
      (or (tblsearch "BLOCK" blk2)
            (alert (strcat msg1 blk2 msg2))
      )
   )
    (vlax-for spc (vla-get-blocks doc)
      (if (= (vla-get-islayout spc) :vlax-true)
      (vlax-for blk spc
          (and (= "AcDbBlockReference" (vla-get-objectname blk))
               (= (vla-get-name blk) blk1)
               (vla-insertblock
               spc
               (vla-get-insertionpoint blk)
               blk2
               (vla-get-xscalefactor blk)
               (vla-get-yscalefactor blk)
               (vla-get-zscalefactor blk)
               (vla-get-rotation blk)
               )
               (vla-delete blk)
          )
      )
      )
    )
)
(princ)
) (vl-load-com)

rlx 发表于 2022-7-5 16:15:46

Tharwat简洁而美丽

Tharwat 发表于 2022-7-5 16:19:21

 
非常感谢。

mattdalgety 发表于 2022-7-5 16:24:21

工作起来很有魅力。
 
干杯,伙计们,绝对的传奇。
 
 
页: [1] 2
查看完整版本: 列出替代nam的例程