对于常规的python对象,很容易看到它们的细节。 E、 g
vec = (1, 2, 3)
print vec
=>
^{pr2}$使用等效OpenMaya(OM)对象时,所有print或str()显示的都是对象类型:
vec = OpenMaya.MFloatVector(1,2,3)
print vec
=>
<maya.OpenMaya.MFloatVector; proxy of <Swig Object of type 'MFloatVector *' at 0x000000002A346060> >
有没有一种方法可以让一个群体提供更多的细节? 我想要这样的结果:
MFloatVector(1, 2, 3)
---编辑----
<>从C++文档中,我看到了我想要的信息可以在C++中通过oStase& lt;lt;E、 g.对于MFloatVector<;<;它表示:The format used is [x, y, z]
所以,另一种问我问题的方法是:在python中,我如何在内存中创建一个ostream,将对象发送给它,然后得到字符串形式的结果?在
----编辑#2----
我的重要声明是:
import maya.OpenMaya as OpenMaya
这意味着我使用的是Maya Python API的版本1。(因为有些版本2的内容是存根,比如MGlobal。我正在查看的示例使用了这些版本1的功能,因此我使用了版本1。)
我已经发布了我自己的答案,即使用版本2,以获得所需的行为。TBD版本2是否具有所需的一切,以及将版本1示例转换为版本2所需的内容。现在,我坚持使用版本1。如果有人有办法让版本1提供更多有用的打印细节,那就是我接受的答案。在
Maya Python API的版本2对Python更友好。在
要访问版本2,请将import语句从
到
^{pr2}$这将需要对脚本进行更改,因为许多方法都经过了调整,使之更适合python。在
完成后,“print vec”和“str(vec)”和“len(vec)”都将成为有用的操作:
=>
“代表自己的代码”。对大多数对象返回“repr(self)”的全局函数。但对于返回以“<;”开头的表示形式的对象,其结果是(1)不是内部的成员值(不要以“优”开头),(2)不是方法。在
例如OpenMaya MFloatVector实例“OpenMaya.MFloatVector(1,2,3)“给出结果:
代码:
^{pr2}$当然,可以用自己的函数包装repr函数;大致如下:
这将影响所有未来(但不是过去)的mfloatvector。但你为什么要经历这样的麻烦是另一回事。一般来说,对于MObjects来说,这个级别的工作太多了。但是你可以试着问目标长度()来确定它是否是可编辑的等等,这样你就可以得到一个相当好的分布仍然太多的工作,但没有太多的收益。在
相关问题 更多 >
编程相关推荐