访问块中的实体
你好只是想知道我该怎么做?
例如,应用程序可以隔离块内的所有层。
我已经在entget中搜索并丢弃了block对象,但我真的不知道如何获得实体列表。
我在扩展数据和字典方面非常有限,所以我猜信息存储在那里。
如果我不够清楚,请告诉我。
任何帮助都会很好
谢谢
马丁
((-1 . <Entity name: 7ef06410>) (0 . INSERT) (5 . 253A) (102 .
{ACAD_XDICTIONARY) (360 . <Entity name: 7ef06538>) (102 . }) (330 . <Entity
name: 7ef01cb8>) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 0) (100 .
AcDbBlockReference) (2 . ms-block) (10 0.0 0.0 0.0) (41 . 1.0) (42 . 1.0) (43 .
1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
; Application (RO) = #<VLA-OBJECT IAcadApplication 00cbef78>
; Document (RO) = #<VLA-OBJECT IAcadDocument 016f6d08>
; EffectiveName (RO) = "ms-block"
; Handle (RO) = "253A"
; HasAttributes (RO) = 0
; HasExtensionDictionary (RO) = -1
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0a6b7604>
; InsertionPoint = (0.0 0.0 0.0)
; InsUnits (RO) = "Unitless"
; InsUnitsFactor (RO) = 1.0
; IsDynamicBlock (RO) = 0
; Layer = "0"
; Linetype = "BYLAYER"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Name = "ms-block"
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 2129683472
; ObjectName (RO) = "AcDbBlockReference"
; OwnerID (RO) = 2129665208
; PlotStyleName = "ByLayer"
; Rotation = 0.0
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 2126b740>
; Visible = -1
; XEffectiveScaleFactor = 1.0
; XScaleFactor = 1.0
; YEffectiveScaleFactor = 1.0
; YScaleFactor = 1.0
; ZEffectiveScaleFactor = 1.0
; ZScaleFactor = 1.0
; Methods supported:
; ArrayPolar (3)
; ArrayRectangular (6)
; ConvertToAnonymousBlock ()
; ConvertToStaticBlock (1)
; Copy ()
; Delete ()
; Explode ()
; GetAttributes ()
; GetBoundingBox (2)
; GetConstantAttributes ()
; GetDynamicBlockProperties ()
; GetExtensionDictionary ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; Mirror (2)
; Mirror3D (3)
; Move (2)
; ResetBlock ()
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetXData (2)
; TransformBy (1)
; Update () http://www.cadtutor.net/forum/showthread.php?t=36100
刚刚找到这个。
还没查出来 这个链接应该对你有帮助是的。
只是想知道,如果这个应用程序是用于层隔离的,您还可以研究“nentsel”:
(defun c:bLayIso (/ sEnt)
(vl-load-com)
(if (setq sEnt (car (nentsel "\nSelect Sub-Entity: ")))
(vlax-for lay
(vla-get-layers
(vla-get-ActiveDocument
(vlax-get-acad-object)))
(or(eq (vla-get-Name lay) (cdr (assoc 8 (entget sEnt))))
(vla-put-layeron lay :vlax-false))))
(princ))
谢谢李。
在那个链接的帮助下,我最终完成了一些事情(我想你的一个也一样)。不过,只需使用entsel和auto-lisp,基本上使用tblobjname和entnext函数。下一步可能是像ssget一样,合并一个临时层状态,然后用一个姐妹unisolate返回(我想类似于layiso和layuniso或其他类型)
没有使用entsel,所以不知道与entsel有什么不同。明天上班时结帐。
是的,虽然我不确信我完全理解你发布的vlisp是如何工作的(或有点让我困惑-我不认为我用过这种方式-有点像cond?),看起来它只是将选定的实体名称逐个与整个图层列表进行比较。如果层(层)名称等于选定实体层名称,则它不执行任何操作,但如果不等于,则将其关闭以保持“或”不变。
再次感谢
干杯
马丁
nentsel提供了对实体中子实体的直接访问-它返回一个类似于entsel的列表,但带有子实体的名称。
在配偶身上-
我使用“or”而不是(if(not…)仅仅是因为我喜欢它的简洁性。
vlax for只循环遍历层集合中的所有层,然后,对于每个层,“or”语句比较层名称,因此,如果层名称不等于所选名称,则将其关闭。
希望这能有所帮助,
李
页:
[1]