sketch11 发表于 2022-7-6 23:14:17

从下拉菜单插入块

在AutoCAD中,可以使用下拉菜单将另一图形中的对象作为块插入。
在这个项目中,我有许多对应于钢型材的文件,每节1个文件。
MNU和脚本文件位于同一文件夹中(请参阅附件)。
 
 
问题:如果在图形中插入,块的名称似乎与文件的名称相同。我想将其更改为一个随机名称,例如“a$C7ABC15J1”。
 
原因是,如果我在两个单独的图形中插入相同的部分,并以不同的方式编辑块,然后在彼此之间复制/粘贴,则外观不会继续。原因是他们有相同的名字。这可能会让人困惑,所以如果没有意义,请不要担心。我只需要一个随机的名字。爆炸和重新粘贴为一个块是一个讨厌的,有时我确实忘记了这样做。
 

BIGAL 发表于 2022-7-6 23:19:43

我不会把模糊的名称作为菜单的一部分,我会将你的插入更改为lisp,这样它可以检查块是否存在,如果存在,请查找-x ie add-1到块名,这样插入3次块名为UB125-3,你会将第一个块重命名为-1,然后插入UB125并重命名。需要考虑一下。
 
-重命名块blockname newname注意,dwg中具有此名称的所有块都将重命名。
 
[->UB]
^C^C(blkins“610UB125”)
 
^C^C(如果(非blkins)(加载“blkins”)(blkins“610UB125”)

sketch11 发表于 2022-7-6 23:22:03

好的,谢谢。这有点让人困惑,我必须通读LISP。
但是,使用上述算法,您可以在两个单独的图形中使用相同的块名,当复制/粘贴时,这是一个问题。

BIGAL 发表于 2022-7-6 23:25:01

您仍然需要以最简单的方式插入和重命名,您可以将文件复制到新名称,然后插入。如果你高兴,那么610UB125-37是你第37次插入。610UB125-123456。
 
获取文件名并添加1,然后重命名。这样,您在任何时候只有2个文件。原件和重新编号的副本。口齿不清可以检查其他人是否成功。
 
如果你想使用重命名,你需要在某处存储一个最后编号的文件。这可以是本地setenv,但若网络需要在服务器上。

sketch11 发表于 2022-7-6 23:28:28

谢谢你的解释,但我还是很困惑。
我得把书读一遍,然后试着理解你在说什么。

BIGAL 发表于 2022-7-6 23:32:58

 
 
第1版,你需要说一个文本文件被读取,比如说其中的每个UB都是一行一行的,最后是-0。当您插入块时,它会读取此文件并查找末尾的数字。然后用添加的新数字重写文件。
 
版本2只是有一个文件,其中有一个数字,并添加1到它成为新的块名。比版本1简单得多,但您可能会在第345次插入任何UB块时得到610UB125-345。
 
您没有回答一个问题:它是供多个用户使用还是仅供您使用,对于仅限您(setenv“UB”23),然后您可以(getenv“UB”),对于多个用户,它将需要服务器上的一个文件。
 
这是很容易解决的,但你需要说你想走哪条路,这里有很多人可以编写一些代码来做到这一点,正如我之前所说的,我不会在30多年的计算机辅助设计中随机生成块名。
 
能够找到块“UB*”具有显著优势。
 

sketch11 发表于 2022-7-6 23:35:59

回答这个问题:它只供我使用,只供本地计算机使用。
我想这就是我需要帮助的代码。
我不会担心名称,我过去从未搜索过块名称,如果这使事情更简单,我会很乐意使用随机名称,否则会使用您上面提到的名称。

tombu 发表于 2022-7-6 23:38:52

这些块是否具有与其相关联的属性? 
您在每个图形中插入了多少个这些独特的块? 
思考动态块、外部参照或组可能更适合您尝试的操作。

sketch11 发表于 2022-7-6 23:40:19

没有属性。只有简单的直线和圆弧。
插入次数:超过1次,最多可以猜测为数不多。
动态块、外部参照或组?我宁愿保持尽可能简单,只是一个简单的块。
 
我是否可以在代码行中添加一些东西来进行区分,例如时间戳?
 
下面的行类似于“UniversalBeams_610UB125+2019.12.14.1025”
^C^C-插入UniversalBeams_610UB125;规模1.
 

BIGAL 发表于 2022-7-6 23:43:37

应工作未测试,但每次运行将使x+1
 
要测试,请将其复制到命令行
(setenv“ub”0);仅需要设置种子X,就可以随时重置每个dwg?
 
(setq x(atoi(getenv“UB”))(setenv“UB”(rtos(+x 1)2 0))-插入UniversalBeams_610UB125;规模1.(getreal)(命令“-重命名”“block”“UniversalBeams\u 610UB125”(strcat“UniversalBeams\u 610UB125”“-(rtos x 2 0))
 
最简单的方法是defun传递块名^c^c(区块“UniversalBeams_610UB125”)
页: [1] 2
查看完整版本: 从下拉菜单插入块