两者的区别是什么
我看到有时在SSGET中使用INSERT,有时使用BLOCK来捕获块。这两者与它需要使用的任何特定应用程序有什么区别?请导游。 块是块的定义,而插入是实例(即它在图形中的插入)实体。 米尔恰,
我不确定我是否理解你解释的内容。我的英语不好应该受到责备
(tblsearch "BLOCK" "SW_TABLEANNOTATION_0")
(setq swbom (ssget "_x" '((0 . "INSERT")(2 . "SW_TABLEANNOTATION_0"))))
你能解释一下吗?Tblsearch使用BLOCK,SSGET使用INSERT?这个可以切换并且仍然是一样的吗? 不是Msasu,但我想我可以为你回答这个问题。
每个块都有一个定义和一个参考。
块定义是图形文件块名中的定义。DWG,假设块名插入到空白图形中,则如果要在每次新插入块名时反映出所做的更改,您将修改它。
如果将此新块定义“BLOCKNAME”插入到已具有块“BLOCKNAME”的图形中,但在修改之前,由于图形中当前存在的定义,新插入的“BLOCKNAME”将显示为旧的“BLOCKNAME”。该定义是在您对块进行更改之前将其放置在那里存储的,换句话说:第一次插入该块时,除非另有说明,否则图形认为所有这些块的外观都是这样的。以下是您的做法:
您要做的只是确保所有相应的块参照都已从dwg中删除,通常通过清除方法完成。一旦不再引用BLOCKNAME,您可以插入新的“BLOCKNAME”定义,块现在将以图形方式显示为“BLOCKNAME”图形文件中的定义,因为图形中仍然没有对旧块名的引用来阻止其拾取新更改。
通过编程方式,在命令行中,您可以清除前面提到的所有内容以解决此问题,但也可以使用lisp的形式:
BlockNEW是BlockOLD修改的,好吗?
你有一个现有的block,你刚刚做了一些更改,所以现在你有BlockOLD和BlockNEW。
在空白图形中插入BlockNEW时,效果良好。
将BlockNEW插入到已放入BlockOLD的图形中(并且可见或不可见地驻留在dwg数据库中,这就是为什么使用清除)时,BlockNEW将显示为BlockOLD,因为该图形中的引用尚未更新。
为此,可以使用以下lisp命令:
(command "insert" "BlockOLD=BlockNEW")
键入的内容与此完全相同,其中BlockOLD位于图形中,而BlockNEW位于autocad搜索路径中的标准目录中。
显然,BlockOLD和BlockNEW是我用的变量名,如果需要这一点信息,那么lisping可能不是阅读本文的人往下读的正确途径,但我添加这句话只是为了确保任何阅读本文的人在我说“完全像那样”时都不会接受我的专业知识。我的意思当然是用括号、引号和等号。
如果您有任务,例如,在25个新图形中插入BlockNEW。。。。。在你将BlockNEW插入第一个空白图形,然后意识到你在线型、图层或其他方面搞砸了。。。
您可以对块定义进行更改,保存它们,然后返回到第一个空白图形,这就是您更新BlockNEW以反映刚刚修复的更改的方式。
方法一是清除。。。。擦除块,然后清除它。再次插入BlockNEW后,它看起来应该是这样的(只需更改线型、图层等)
或者,可以使用lisp更新块参照,方法是使用类似的代码行。
(command "insert" "BlockNEW=")
就这样。它将通过重新定义其引用将旧块更新为新块。
HTH和足够清晰和正确,值得一试。 在我的回复中,我没有触及TBLSEARCH,因为我认为Msasu会来为我们澄清它,以及它如何与定义和引用相关。
一、 e.我认为,因为TBLSEARCH通过字典进行搜索,字典包含在每个单独的图形中,所以TBLSEARCH将定位引用,而不是定义。
但我认为,Msasu会最好地解释,或者另一位大师。只是想帮助一些人。 当您想要访问定义而不是图形中的插入引用时,可以使用tblsearch(或者tblnext或tblobjname)。
“BLOCK”只是表的名称。还有其他几个表格用于线型、图层、文字样式等。
这可能有助于。。。http://www.afralisp.net/autolisp/tutorials/into-the-database.php或请参阅Autodesk的《DXF参考指南》。这些将帮助您了解表的结构和访问方式。
相反,正如Brandon和Mircea所解释的那样,插入是指图纸中块的参考。 Mircea、Brandon和Clint,
非常感谢你的帮助。
我还有一个关于AND和NOT的问题。在代码#1中,仅使用一次,而不是每行使用一次。为什么我不能按照代码#2来做,其中不包括所有3行。我问这个问题是因为我为我的一个任务编写了代码#2,但它不起作用,但仍然不确定为什么它不起作用。
代码#1
(if (and
(tblsearch "LAYER" "AM_0")
(tblsearch "LAYER" "AM_3")
(tblsearch "LAYER" "AM_7")
(not (tblsearch "LAYER" "FORMAT"))
(not (tblsearch "LAYER" "OBJECT_LINE"))
(not (tblsearch "LAYER" "PHANTOM"))
)
(progn...
代码#2
(if (and
(tblsearch "LAYER" "AM_0")
(tblsearch "LAYER" "AM_3")
(tblsearch "LAYER" "AM_7")
(not (tblsearch "LAYER" "FORMAT")
(tblsearch "LAYER" "OBJECT_LINE")
(tblsearch "LAYER" "PHANTOM")
)
)
(progn...
“not”函数只接受一个参数,而不是三个。在发布的代码中,它正在检查三个层中的每一个都不存在。因此它寻找第一个,如果它不在那里,它将返回nil,'not函数将其计算为T,然后处理转到下一行。如果存在,它将返回一个列表,'not函数将其计算为nil。如果发生这种情况,则'和函数的评估结束。
如果三条线合并在一条线上,这有关系吗?这样地。。。
(not (tblsearch "LAYER" "FORMAT") (tblsearch "LAYER" "OBJECT_LINE") (....) )
还有什么替代方法可以一次验证,而不是三行验证? 您应该使用允许多个参数的函数,因为NOT只接受一个参数:
(not (and (tblsearch "LAYER" "FORMAT")
(tblsearch "LAYER" "OBJECT_LINE")
(tblsearch "LAYER" "PHANTOM")))
页:
[1]
2