我是Python的初学者,我正试图用CATIA(Dassault Systemes CAD pacakge)进行一些自动化,但是我遇到了一个问题,即使我搜索过,我也无法解决广泛的解决方案。
我试图模仿在CATIAs本机编辑器界面中编写的此VBA宏的行为:
Sub CATMain()
Dim drawingDocument1 As DrawingDocument
Set drawingDocument1 = CATIA.ActiveDocument
Dim selection1 As Selection
Set selection1 = drawingDocument1.Selection
selection1.Search "CATDrwSearch.DrwDimension,all"
For i = 1 To selection1.Count
Dim Dimension1 As DrawingDimension
Set Dimension1 = selection1.Item(i).Value
Dim DimDimValue As DrawingDimValue
Set DimDimValue = Dimension1.GetValue
DimDimValue.SetFormatPrecision 1, 0.001
Next
selection1.Clear
End Sub
为此,我编写了这个Python脚本:
import win32com.client
CATIA = win32com.client.Dispatch('CATIA.Application')
ad = CATIA.ActiveDocument
sel = ad.Selection
sel.Search("CATDrwSearch.DrwDimension,all")
for i in range(1, sel.Count2+1):
aDim = sel.Item2(i).Value
aDimValue = aDim.GetValue
aDimValue.SetFormatPrecision(1,0.001)
sel.Clear
除了返回错误的for循环中的最后一个操作外,一切都有效:
Traceback (most recent call last):
<bound method DrawingDimension.GetValue of <win32com.gen_py.CATIA V5
DraftingInterfaces Object Library.DrawingDimension instance at 0x67582896>>
File "C:/...", line 15, in <module>
aDimValue.SetFormatPrecision(1,0.001)
AttributeError: 'function' object has no attribute 'SetFormatPrecision'
请注意,我使用 makepy 来提前绑定COM对象,否则Python无法识别它(返回COMObject [unknown]),但据我所知,不应该影响脚本行为。
我无法成功解决错误,因为我能找到的所有内容都表明对象应该具有属性 SetFormatPrecision 。我已经尝试过它应该拥有的一堆其他属性,但它们都不起作用。因为我试图操作COM对象,所以我不知道如何获得合法属性的综合列表,或者获取有关我存储的对象类型的任何信息的方法。强> aDimValue
我检查了 makepy 输出文件,它确实包含了 SetFormatPrecision 的函数定义,所以我的猜测是我有语法问题,但是我在失去了它是什么。
我知道这是一个狭隘的问题,但我希望有人了解CATIA对象库的人会看到这个问题。虽然我不期望它,如果有人想要加倍努力,那里有关于CATIAs对象库的文档:
http://catiadoc.free.fr/online/CAAScdBase/CAAScdAutomationHome.htm
起草&gt;起草参考&gt; DrawingDimValue
获取我认为我在 aDimValue
中工作的特定对象感谢任何帮助。感谢。
答案 0 :(得分:0)
aDim.GetValue
返回函数对象,而不是调用函数。使用aDim.GetValue()
。与最后一行的sel.Clear()
相同。