AK_mrts 发表于 2022-7-5 15:44:55

获取vla对象的层名称

你好
我将下面的代码片段作为lisp代码的一部分
 
(setq obj1 (vlax-ename->vla-object (car (entsel "\nPick object 1"))))
 
您能帮我获取obj1的层名称吗。
我试过了
(setq VLA_OBJ_LAYER (vla-get-layer obj1))

   (setq VLA_ACT_DOC (vla-get-ActiveDocument (vlax-get-Acad-Object)))

   (setq LAYERNAME (vla-Item (vla-get-Layers VLA_ACT_DOC) VLA_OBJ_LAYER))
 
但它会出错。
谢谢

marko_ribar 发表于 2022-7-5 16:01:59


(setq LAYERNAME (vla-get-layer obj1))

AK_mrts 发表于 2022-7-5 16:09:35

完美的非常感谢您的帮助Marko Ribar。

Grrr 发表于 2022-7-5 16:23:55

FWIW您的尝试应写成:
 
(setq LAYERNAME (vla-get-layer obj1))

(setq VLA_ACT_DOC (vla-get-ActiveDocument (vlax-get-Acad-Object)))

(setq VLA_OBJ_LAYER (vla-Item (vla-get-Layers VLA_ACT_DOC) LAYERNAME))
 
因此,您只需反转“VLA\u OBJ\u LAYER”和“LAYERNAME”的符号名,以引用其(正确)值。

BIGAL 发表于 2022-7-5 16:25:12

你会发现这非常方便,它会显示属性,其中很多属性你可以用VLA-get-xxxxxxx obj获得。你也可以做相反的事情,使用VLA-PUT-xxxxxx obj来更改值。
 

;;;===================================================================;
;;; DumpIt                                                            ;
;;;-------------------------------------------------------------------;
;;; Dump all methods and properties for selected objects            ;
;;;===================================================================;
(defun C:DumpIt ( / ent)
(while (setq ent (entsel))
   (vlax-Dump-Object
   (vlax-Ename->Vla-Object (car ent))
T )
)
(princ)
)

 

;   EndPoint = (513.775 345.565 0.0)
;   Layer = "DEFAULT"
;   Length (RO) = 250.296
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 42
;   ObjectName (RO) = "AcDbLine"
;   OwnerID (RO) = 43
;   PlotStyleName = "ByLayer"
;   StartPoint = (263.479 345.565 0.0)
;   Thickness = 0.0

ronjonp 发表于 2022-7-5 16:44:12

要获得这些方法,您需要包括vlax dump对象的“T”,如下所示:
(vlax-dump-object (vlax-ename->vla-object (car ent)) t)

BIGAL 发表于 2022-7-5 16:48:49

谢谢修复
页: [1]
查看完整版本: 获取vla对象的层名称