samifox 发表于 2022-7-6 06:10:36

从Autocad获取帮助

你好
 
在Autolisp中,当我需要有关函数的信息时,我只需要高亮显示它,然后按ctrl+F1键并获取帮助;在visual lisp中,当做相同的事情时,我会得到不同的帮助系统:Autocad ActiveX和VBA引用,这对我来说是无用的,我不理解,也无法与Autolisp帮助进行任何类似。
 
有人能把它比作autollisp帮助吗?
例如,vla put layer?
 
在activeX帮助中:
 
 
请帮忙!
谢伊

Lee Mac 发表于 2022-7-6 06:16:43

在ActiveX中,当操作对象或集合时,有两种类型的函数:属性和方法。要列出VLA对象的可用属性和方法,可以使用vlax转储对象函数,如该函数所示。
 
ActiveX属性
 
对于与VLA对象关联的每个ActiveX特性,类型库为AutoCAD对象模型生成了两个函数,用于检索和修改特性值。
检索属性值

(vla-get-<Property-Of-Object> <VLA-Object>)将返回给定属性的当前值,例如:

(vla-get-layer <VLA-Object>)将返回提供的VLA对象的图层特性值,即指定给该对象的图层名称。如果对象没有ActiveX层属性,则函数将出现“未知名称”错误。
 
修改特性值
此函数将VLA对象的指定ActiveX属性设置为提供的值。
 
但是,如上所述,这些函数是由AutoCAD类型库生成的“方便”函数。
 
通常,我们可以使用以下功能检索和修改(除非是只读的)任何VLA对象的ActiveX属性(无论是在AutoCAD对象模型内(AutoCAD应用程序对象的子对象),还是从另一个对象模型(如Excel应用程序)导出):

(vlax-get-property <VLA-Object> <Property-Of-Object>)和
有关AutoCAD对象模型以及这些函数之间的差异的更多信息,请参阅我在此之前的文章。
 
这些特性的ActiveX帮助文档(位于acadauto.chm本地帮助文件中,或在此处联机)将采用以下格式(图层特性用作以下示例):
 
 
在这里,object是ActiveX属性适用的VLA对象,即具有此特定ActiveX属性的对象。
 
.Layer是相关ActiveX属性的名称;由于AutoLISP不区分大小写,因此此属性名也不区分大小写,但是,在其他编程语言中,此类属性通常区分大小写。
 
因此,在上面的示例中,我们看到图层特性适用于所有图形对象,包括属性引用和组。
 
我们还看到,Layer属性的值具有字符串数据类型,并且该属性的值指示分配给对象的层的名称。
 
因此,在实践中,我们可以通过以下方式检索该属性的值:

_$ (setq obj (vlax-ename->vla-object (car (entsel))))
#<VLA-OBJECT IAcadLine 21c326bc>
_$ (vla-get-layer obj)
"0"
_$ (vlax-get-property obj 'layer)
"0"
_$ (vlax-get-property obj "layer")
"0"
_$ (vlax-get obj "layer")
"0"我们可以用类似的方式修改该属性:
ActiveX方法
 
ActiveX方法也可用于操作VLA对象。虽然对象具有固有属性,每个属性都包含一个值,但ActiveX方法可能需要多个参数来对VLA对象执行操作。
 
与ActiveX属性类似,与AutoCAD对象模型中的方法相关的每个ActiveX方法也具有由AutoCAD类型库自动生成的“方便”功能,该功能采用以下格式:
同样,我们可以使用广义函数调用任何VLA对象(从任何对象模型导出)的方法:
如我在前面的链接中所述,还有未记录的函数vlax get/vlax put/vlax invoke,它将使用本机AutoLISP数据类型,而不是Visual LISP使用的Safearray和Variant数据类型;不过,为了避免离题,可以在此处找到有关这些函数的更多信息。
 
以移动方法为例,ActiveX方法的文档使用以下格式:
 
同样,object是ActiveX方法可以操作的VLA对象;在这种情况下,我们可以对所有图形对象(包括属性引用)调用move方法。
 
然后,点1和点2是该方法所需的输入参数(某些方法的参数可能是可选的-这将在参考中的参数旁边注明)。
 
从参考资料中可以看出,这些参数是移动向量的第一点和第二点,或者换句话说,是移动操作的基点和位移。
 
我们还可以看到,这些参数属于变量数据类型(有关安全阵列和变量的更多信息,请参阅开发人员文档);变量包含相对于世界坐标系(WCS)表示的三维点。
 
对于三维点变体,根据这些方法的要求,Visual LISP以vlax-3D-point函数的形式提供了另一个“方便”函数。该函数将接受两个或三个数值参数作为X、Y和Z坐标,或者坐标列表,并将返回一个变量,该变量包含包含三个坐标值的双精度一维安全数组。
 
因此,我们可以按以下方式调用move方法:
或者,使用vlax invoke method函数:
我希望这能澄清ActiveX和VBA参考的格式。

asos2000 发表于 2022-7-6 06:19:08

像往常一样谢谢李

Lee Mac 发表于 2022-7-6 06:22:39

 
谢谢你,阿索斯,我很高兴这有帮助。

samifox 发表于 2022-7-6 06:23:55

谢谢李。我打赌你真的是量子力学

Lee Mac 发表于 2022-7-6 06:27:43

 
不客气,谢,我希望我的解释清楚。

samifox 发表于 2022-7-6 06:31:09

请删除管理员

samifox 发表于 2022-7-6 06:33:11

所有这些都只是一种语法选择?
11

Lee Mac 发表于 2022-7-6 06:35:59

 
您正在比较方法和属性。
 
关于以下两者之间的差异:
(vla put-)是一种在编译时解析的绑定,除非已为属性引用的ActiveX对象模型导入了相关类型库,否则该绑定是未定义的(请注意,AutoCAD对象模型的类型库是自动导入和注册的);然而(vlax put属性)是在运行时解析的绑定,因此计算速度会稍微慢一些。
 
第二种形式在与AutoCAD对象模型以外的ActiveX对象模型(例如Excel应用程序对象模型,或者可能是AutoCAD垂直对象模型)交互时特别有用,并且您要么无法访问相关类型库,要么不想导入它。为了提供一个导入针对另一个对象模型的类型库的快速示例,请参阅本文,我在其中为FSO导入了类型库。

samifox 发表于 2022-7-6 06:40:56

好的,让我知道我是否理解正确。
 
Visual Lisp以称为“对象模型”的分层方式映射AutoCAD的所有方面。ActiveX是绑定到对象模型树中那些对象的属性和方法库,每当通过对象模型访问对象时,它都可以使用ActiveX方法获取和设置值。
 
访问Autocad对象模型
访问对象模型中的对象是通过调用驻留在所需对象路径上的所有对象来实现的,该路径从作为根对象的应用程序对象开始。
例如,获取指向活动文档对象的指针
13
 
如何检索集合并添加或删除项目?例如,我想将文本样式添加到活动文档中,如何实现?
页: [1] 2
查看完整版本: 从Autocad获取帮助