Costinbos77 发表于 2022-7-6 07:44:44

谢谢李,简洁明了。

Costinbos77 发表于 2022-7-6 07:47:34

我找到了两种解决方案:
 
1、一次性使用(块插入):
在所需图形中插入动态块后,将得到一个常规块。它会爆炸,从而获得所需的动态块。
 
2、对于多次插入:
块插入到某个位置,然后删除,而不清除(清理)。因此,动态块定义仍保留在AutoCAD数据库中。然后,您可以在需要时正常插入动态块。

Lee Mac 发表于 2022-7-6 07:52:10

 
仅当作为块插入的图形文件包含动态块参照而不是动态块定义时,才会发生这种情况;如果将动态块定义导出到单独的图形文件(使用WBLOCK),则可以插入动态块,而无需分解生成的参照。

dbroada 发表于 2022-7-6 07:55:03

李,我搞不懂为什么警察要炸掉这个街区,因为我从来没有必要这么做。你的解释使事情更清楚了。

RBPrice 发表于 2022-7-6 07:57:55

你好,李-什么是我学习如何创建三维动态块的最佳方式,这样我就可以创建一个由直径、长度和头部样式定义的三维紧固件库?
 
非常感谢。
 
 
你不知道你不知道的。

Costinbos77 发表于 2022-7-6 08:01:56

谢谢李,你完全正确,如果用WBLOCK定义动态块,它会创建一个块定义文件。
插入到另一个图形中是任何块的正常操作。
 
 

(command "insert" "PunctT" (list x y z) sclx scly angle)

 

 

(vla-InsertBlock MSpace (vlax-3D-point '(0. 0. 0.)) (findfile numblc)sclx scly sclz angle)

 
 
关键是如何创建块,而不是插入模式。

irneb 发表于 2022-7-6 08:05:09

呵呵!您的意思是要通过insert命令以外的其他命令进行块参照?那么你的第二行代码怎么了?还是需要使用entmake? 
如果您的意思是希望从Lisp中创建DB定义,那么如果不在BEdit环境中使用命令,这是不可能的。您首先需要创建一个普通的块定义,然后编辑它并使用命令调用放置参数和动作,然后BSave&BClose。
 
现在,如果您只想从另一个文件加载块定义,那么可以通过ObjectDBX。请参阅李的偷窃套路,以获取这方面的优秀示例。至于从外部文件更新现有定义而不使用insert。。。我还没有在lisp/activex中找到任何解决方案。

Lee Mac 发表于 2022-7-6 08:08:16

 
从我所能收集到的信息,以及OP对我上述解释的回应(以下引用),我相信OP认为动态块源文件(即要插入的图形)应该包含动态块的引用,而不是动态块定义本身(打开图形文件时必须在块编辑器中打开)。
 
 
我很高兴你现在明白了
 
 
遗憾的是,据我所知,您目前无法在AutoCAD中创建三维动态块(使用可见性状态除外)-动态块参数仅适用于二维变换。只有可见性状态可用于三维对象,因为这些状态只是改变构成块定义的实体的可见性标志,而不是几何操作对象。

Costinbos77 发表于 2022-7-6 08:11:09

至irneb:
 
 
 
仔细阅读最初的帖子,贴上#4,然后我们再聊。

irneb 发表于 2022-7-6 08:13:52

我仍然不明白“问题”是什么。好吧,所以你不想“爆炸”。数据库包含在另一个DWG中。然后执行Lee的Steal例程所做的操作-通过使用ObjectDBX将DB的设备复制到当前DWG-->然后您可以正常插入它,而无需随后分解它(但请注意,它仍然是DB的默认值)。 
如果您尝试DB的未命名块,我想这并不总是正确的。我看到很多DB变成了普通块,因为它们试图直接操作/插入未命名的块,就像你在文章#12的第2点中建议的那样。因此,我不建议这样做。
 
您希望插入DB并设置其值。我认为这已经被报道了很多次了。我甚至为您提供了一种先设置值的方法(post#6)-通过将DB“插入”到临时注释性块定义中(有效地动态创建嵌套想法,然后分解临时容器块)(通过entmake生成块的示例:http://forums.augi.com/showthread.php?5285-使用entmake使用attrib进行块)。我认为这两个想法中的任何一个都没有问题。两者都不是不可能的,也都不是绝对需要命令行。
页: 1 [2]
查看完整版本: 如何插入动态blo