VLA对象
VLA对象是什么?它的作用是什么?提前感谢 将VLA对象视为信息块,用作Acad(V)isual(L)isp(A)ctivX对象的实体-用于VLISP编程语言。。。
Acad的每个实体-无论其类似模型空间的可见或不可见实体可以转换为VLA对象,以便在其上获得更多操作信息。。。请记住,在使用这些函数之前,首先必须通过键入或放置行(vl load com)来初始化VLISP函数(vla-*、vlax-*和vlr-*)。。。
至于转换Acad ENAME对象,即Vanilla Lisp中的实体,您可以使用此函数(vlax ENAME->vla object ent),其中ent是表示使用(ssname ss index)函数检索的ENAME对象的变量,其中ss是Acad实体的选择集,index是sel中每个实体的引用数。设置ss。。。您还可以使用其他函数获取实体,如(tblobjname“LAYER”“0”)-这将返回层“0”的ENAME,该层是不可见的实体。。。
相反,如果你想把VLA对象转换回ENAME,你有函数和(vlax VLA对象->ENAME obj),其中obj是VLA对象。。。
但使用代表VLA对象的obj变量,您可以访问更多信息,正如我用(vlax转储对象obj T)函数解释的那样,其中T是可选参数,您将被提示查看甚至可以适用于特定VLA对象的VLA方法。。。该信息包含每个VLA对象,没有方法,您可以通过Acad的VLIDE VLISP接口轻松查看。。。只需选择代表VLA对象的obj变量,在VLIDE界面中用鼠标右键单击该变量,然后选择“检查”选项;带有所有信息的对话框将出现,有了它,您可以进一步跳转到其他VLA对象,即原始VLA对象的父对象或子对象,并检查其数据。。。几乎对于此对话框中列出的每个属性,以及引用到原始VLA对象的属性,您可以使用(VLA get-*)等函数进行访问,并使用(VLA put-*)对其进行修改,其中*是您正在检查的特定属性。。。
请记住,首先不要忘记使用在任何Acad接口或控制台(VLIDE)中执行的(vl load com)语句初始化VLA函数。。。
M、 R。 非常感谢Marko,我认为这是任何人都能获得的最清晰的信息。我在互联网上找到的每一条信息都是关于你可以用VLA对象做什么,但根本不是一个定义。顺便说一句你知道AutoCAD的状态吗?我是说。它有多少寿命?它会很快被REVIT取代吗?还是会持续很长时间?
再次感谢。
塞尔吉奥 如果你下载了Dumpit的副本。lsp并选择一个对象,它将显示有关“实体”的许多信息,然后使用下面的简单代码,您可以看到如何检索信息。我发现它比使用DXF代码的旧ASSOC方法更容易。
这里是一个简单的文本转储
Here is a simple text dump
Select object: ; IAcadText: AutoCAD Text Interface
; Property values:
; Alignment = 0
; Application (RO) = #<VLA-OBJECT IAcadApplication 000000013fc43318>
; Backward = 0
; Document (RO) = #<VLA-OBJECT IAcadDocument 000000003025d5c8>
; EntityTransparency = "ByLayer"
; Handle (RO) = "11AEE"
; HasExtensionDictionary (RO) = -1
; Height = 2.5
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000002caacab8>
; InsertionPoint = (312.301 280.565 0.0)
; Layer = "DEFAULT"
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 51
; ObjectID32 (RO) = 51
; ObjectName (RO) = "AcDbText"
; ObliqueAngle = 0.0
; OwnerID (RO) = 50
; OwnerID32 (RO) = 50
; PlotStyleName = "ByLayer"
; Rotation = 0.0
; ScaleFactor = 1.0
; StyleName = "Standard 2.5"
; TextAlignmentPoint = (0.0 0.0 0.0)
; TextGenerationFlag = 0
; TextString = "aaaa"
现在看一下获取值方法,注意逆是Put,Vlax Put属性
(setq obj (entsel "\nPick an object"))
(setq Textvals (vlax-get-property (vlax-ename->vla-object (car obj)) 'Textstring)) ; this is the actual text type see is it text next
(setq layeris (vlax-get-property (vlax-ename->vla-object (car obj)) 'Layer)) ; this is the layer
(setq whatisit (vlax-get-property (vlax-ename->vla-object (car obj)) 'ObjectName)) ; what is it text line pline etc
页:
[1]