chavlji 发表于 2022-7-6 14:55:20

RefEdit-选择是否有效

你好
如果我们使用Ref编辑器(在位编辑器),该块内的对象将变得可编辑,而图形中的所有其他对象将被锁定并变暗,但仍然可以选择。。。现在:
 
如何确定某些选定实体在工作集中?为了告诉某些选定的例如行属于当前编辑的块,它没有变暗。。。
 
 
我已经检查了从entget返回的sel对象列表,但并没有诸如“EntityParent”之类的条目。。。

LINHOREKA 发表于 2022-7-6 15:17:20

您可以使用VBA来确定它。在VBA中,对象具有所有者ID。然后是函数:Thisdrawing。ObjectedToObject(object.OwnerID)将返回对象的所有者对象。将其与正在在位编辑的块定义对象进行比较:使用系统变量“Refeditname”检索该块定义的名称

chavlji 发表于 2022-7-6 15:30:49

为什么以下代码不起作用?
它总是返回“*Model_space”
(defun C:GetBlkParent ()
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq SS (ssget "_:S" '((0 . "INSERT") ))
       EntName (cadr (car (ssnamex SS)))
       OwnerID (vla-get-OwnerId (vlax-ename->vla-object EntName))
       OwnerObj(vla-ObjectIdToObject doc OwnerID)
       Owner (vla-get-name OwnerObj))
(princ Owner)
(princ)
)
我在定义中嵌套了Block2的Block1上启动RefEdit。在编辑器中,我选择Block2并调用GetBlkParent。我得到了“Model_space”,而它应该返回“Block1”!

chavlji 发表于 2022-7-6 15:46:57

RefEdit的工作方式似乎是实际分解块。所以,当用户在RefEdit中时,块定义中的所有对象实际上都归Model_空间所有。。。
 
所以这行不通。还有别的吗?求你了,随便!

chavlji 发表于 2022-7-6 16:03:30

我成功了!!!:
(defun IsEditable( EntName )
(setq PrevPt (jGetBasePoint EntName))
(command "move" ss "" "d" (list 100 0 0) )
(setq NewPt (jGetBasePoint EntName) )
(command "move" ss "" "d" (list -100 0 0) )
(not (equal PrevPt NewPt))
)
 
:眨眼:
页: [1]
查看完整版本: RefEdit-选择是否有效