我在Autodesk Inventor上运行了makepy,以便能够编写某些任务的脚本。我很难理解使用存储在类字典中的属性/方法的适当协议。我读了很多关于这个的文章,包括另一个stackoverflow问题,关于u prop_umap_get_,但是由于某些原因,我不明白。下面是一个例子:
这两个类摘自makepy:
class AssemblyComponentDefinition**(DispatchBaseClass):
"""Assembly Component Definition Object"""
CLSID = IID('{AA044AA1-D685-11D3-B7A0-0060B0F159EF}')
coclass_clsid = None
_prop_map_get_ = {
# Method 'WorkAxes' returns object of type 'WorkAxes'
"WorkAxes": (100663817, 2, (9, 0), (), "WorkAxes", '{28DD48B5-8D70-11D4-8DDE-0010B541CAA8}'),
# Method 'WorkPlanes' returns object of type 'WorkPlanes'
"WorkPlanes": (100663816, 2, (9, 0), (), "WorkPlanes", '{46785C3B-7F4A-11D4-8DDB-0010B541CAA8}'),
# Method 'WorkPoints' returns object of type 'WorkPoints'
"WorkPoints": (100663818, 2, (9, 0), (), "WorkPoints", '{28DD48C7-8D70-11D4-8DDE-0010B541CAA8}'),
}
class WorkPoints(DispatchBaseClass):
"""WorkPoints Collection Object"""
CLSID = IID('{28DD48C7-8D70-11D4-8DDE-0010B541CAA8}')
coclass_clsid = None
# Result is of type WorkPoint
def AddFixed**(self, Point=defaultNamedNotOptArg, Construction=False):
"""Creates a new work point at the position specified by the input point"""
ret = self._oleobj_.InvokeTypes(83893254, LCID, 1, (9, 0), ((9, 1), (11, 49)),Point
, Construction)
if ret is not None:
ret = Dispatch(ret, 'AddFixed', '{28DD48C9-8D70-11D4-8DDE-0010B541CAA8}')
return ret
# Result is of type WorkPoint
# The method Item is actually a property, but must be used as a method to correctly pass the arguments
def Item(self, Index=defaultNamedNotOptArg):
"""Allows integer-indexed access to items in the collection"""
ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((12, 1),),Index
)
if ret is not None:
ret = Dispatch(ret, 'Item', '{28DD48C9-8D70-11D4-8DDE-0010B541CAA8}')
return ret
_prop_map_get_ = {
"Application": (2130706433, 2, (9, 0), (), "Application", None),
"Count": (2130706438, 2, (3, 0), (), "Count", None),
# Method 'Parent' returns object of type 'ComponentDefinition'
"Parent": (2130706434, 2, (9, 0), (), "Parent", '{5DF8601E-6B16-11D3-B794-0060B0F159EF}'),
"Type": (2130706435, 2, (3, 0), (), "Type", None),
}
_prop_map_put_ = {
}
# Default method for this class is 'Item'
def __call__(self, Index=defaultNamedNotOptArg):
"""Allows integer-indexed access to items in the collection"""
ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((12, 1),),Index
)
if ret is not None:
ret = Dispatch(ret, '__call__', '{28DD48C9-8D70-11D4-8DDE-0010B541CAA8}')
return ret
def __str__(self, *args):
return str(self.__call__(*args))
def __int__(self, *args):
return int(self.__call__(*args))
def __iter__(self):
"Return a Python iterator for this object"
ob = self._oleobj_.InvokeTypes(-4,LCID,2,(13, 10),())
return win32com.client.util.Iterator(ob, '{28DD48C9-8D70-11D4-8DDE-0010B541CAA8}')
def _NewEnum(self):
"Create an enumerator from this object"
return win32com.client.util.WrapEnum(self._oleobj_.InvokeTypes(-4,LCID,2,(13, 10),()),'{28DD48C9-8D70-11D4-8DDE-0010B541CAA8}')
def __getitem__(self, index):
"Allow this class to be accessed as a collection"
if '_enum_' not in self.__dict__:
self.__dict__['_enum_'] = self._NewEnum()
return self._enum_.__getitem__(index)
#This class has Count() property - allow len(ob) to provide this
def __len__(self):
return self._ApplyTypes_(*(2130706438, 2, (3, 0), (), "Count", None))
#This class has a __len__ - this is needed so 'if object:' always returns TRUE.
def __nonzero__(self):
return True
这是我试图通过AssemblyComponentDefinition类返回WorkPoints类型的对象的一些代码。在
^{pr2}$这将返回z作为AssemblyComponentDefinition的类对象。我真正想做的是说(我知道这是天真的想法):
newpoint = mod.AssemblyComponentDefinition.WorkPoints.AddFixed(oPoint)
我得到一个错误,AssemblyComponentDefinition没有属性'工作点'。同样,我需要帮助了解如何使用_prop_map_get_u部分,以便能够在我的文件中创建一个工作点,然后运行工作点方法AddFixed。在
以下是一些有效的方法:
这是在早期将应用程序对象绑定到}到{之后起作用的。在
mod.Application
和{相关问题 更多 >
编程相关推荐