fixo 发表于 2013-3-7 18:08:56

Autocad MEP-VBScript-获取对象的法线

我正在Autocad MEP中工作,我正在尝试通过使用属性集和vbscript来获取对象的法线。 我不确定这是否可能。 我在欧特克网站上找到了这篇文章。
http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=6057466&linkID=9240657 描述如何添加不是对象的自动属性的属性,并显示了此 vbscript 代码。
RESULT="--"
On Error Resume Next
Set AcadApp = GetObject(, "AutoCAD.Application")
Set Obj = AcadApp.Activedocument.Objectidtoobject("xxxxx")
RESULT= Obj.area
我将 Obj.area 修改为 obj.normal,但属性集仅显示--. 我知道代码有效,因为我将obj.normal更改为obj.rotation,并且它给出了拟合的旋转。
有没有人知道如何在Autocad MEP或Autocad Architecture中设置的属性中获取对象的正常? 我需要它,这样我才能看到管道配件是否围绕其中心线旋转。 旋转参数仅返回 XY 平面中的旋转。 我需要在 XZ 平面或 ZY 平面中旋转,这可以通过管接头的法线确定。
我确实使用VBA检查了AecbDuctFitting的属性,Normal是其中一个可用的。
感谢您的任何帮助。
**** Hidden Message *****

fixo 发表于 2013-3-7 19:20:06

我真的认为这样的东西应该有效,但它只是返回RESULT的默认字符串,这意味着obj.normal在某个地方抛出错误。
RESULT="Fitting Orientation Correct"
On Error Resume Next
Set AcadApp = GetObject(, "AutoCAD.Application")
Set Obj = AcadApp.Activedocument.Objectidtoobject("")
Normal = obj.normal
If Normal(2) = -1 Then
   RESULT = "UpsideDown Fitting"
End If

fixo 发表于 2013-3-9 03:29:25

看看这个话题,也许它会有所帮助
http://forums.autodesk.com/t5/AutoCAD-Architecture/Can-this-be-done-with-VBScript/td-p/3058092

fixo 发表于 2013-3-9 10:58:32

非常感谢菲索!我能够从帖子中提供的例子中得到我想要的东西。下面是工作代码,允许我获取属性集中对象的法线
出现错误,请继续下一步
设置acadApp=GetObject(,即“AutoCAD.Application”)
<div>的音频值:</div>
'ACA 2010=“18.0s(LMS技术)”
'ACA 2011=“18.1s(LMS技术)”
'ACA 2012=“18.2s(LMS技术)”
'ACA 2013=“19.0s(LMS技术)”
'ACA 2014=“19.1s(LMS技术)”
acadVerString=acadApp.ActiveDocument.GetVariable(“ACADVER”)
根据运行的版本设置ACA应用程序字符串:
选择案例acadVerString
案例“18.0s(LMS技术)”'ACA-2010
aecBaseVer=“AecX.AecBaseApplication.6.0”
案例“18.1s(LMS技术)”'ACA-2011
aecBaseVer=“AecX.AecBaseApplication.6.5”
案例“18.2s(LMS技术)”'ACA-2012
aecBaseVer=“AecX.AecBaseApplication.6.7”
案例“19.0年代(LMS技术)”'ACA-2013
aecBaseVer=“AecX.AecBaseApplication.7.0”
案例“19.1s(LMS技术)”'ACA-2014
aecBaseVer=“AecX.AecBaseApplication.7.5”
在其他情况下
aecBaseVer=“未知”
结束选择
如果aecBaseVer=“未知”,则
RESULT=“未知版本”
其他
<div>‘获取实用程序对象以将Vector3D转换为数组。</div>
设置aecBase=acadApp.GetInterfaceObject(aecBaseVer)
aecBase。初始化acadApp
设置DuctFittingObject=acadApp.ActiveDocument.ObjectdToObject()
设置UtilityObject=aecBase.ActiveDocument.Utility
“获取对象的法线并分解为单独的X、Y和Z部分。
DuctFittingObjectNormal=UtilityObject.ConvertToVariantArray(ductfittengobject.Normal)
NormalX=管道配件对象normal(0)
NormalY=管道安装对象normal(1)
NormalZ=管道安装对象normal(2)
返回结果
RESULT=CStr(NormalX&“:”&NormalY&“:”和NormalZ)
如果
通过在属性集中获取此信息,我可以开发一个显示主题,该主题将通过Autocad Architecture和Autocad MEP提供的用户界面突出显示所有倒置的配件。再次感谢

fixo 发表于 2013-3-10 01:45:33

很高兴你成功了。
干杯
页: [1]
查看完整版本: Autocad MEP-VBScript-获取对象的法线