openmayaapi(python):从MObjects打印更多有用的信息?E、 g.MFloatVector(x,y,z)

2024-10-01 13:36:39 发布

您现在位置:Python中文网/ 问答频道 /正文

对于常规的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提供更多有用的打印细节,那就是我接受的答案。在


Tags: of对象方法ltgt版本编辑示例
3条回答

Maya Python API的版本2对Python更友好。在

要访问版本2,请将import语句从

import maya.OpenMaya as OpenMaya

^{pr2}$

这将需要对脚本进行更改,因为许多方法都经过了调整,使之更适合python。在

完成后,“print vec”和“str(vec)”和“len(vec)”都将成为有用的操作:

vec = OpenMaya.MFloatVector(1, 2, 3)
print vec
print str(vec)
print len(vec)

=>

(1, 2, 3)
(1, 2, 3)
3

“代表自己的代码”。对大多数对象返回“repr(self)”的全局函数。但对于返回以“<;”开头的表示形式的对象,其结果是(1)不是内部的成员值(不要以“优”开头),(2)不是方法。在

例如OpenMaya MFloatVector实例“OpenMaya.MFloatVector(1,2,3)“给出结果:

#MFloatVector( x: 1.0, y: 2.0, z: 3.0)

代码:

^{pr2}$

当然,可以用自己的函数包装repr函数;大致如下:

import maya.OpenMaya as om

def repr_MfloatVector(self):
    n = self.__class__.__name__
    return "%s(%r, %r, %r)"%(n, self[0], self[1], self[2])

om.MFloatVector.__repr__ = repr_MfloatVector

vec = om.MFloatVector(1,2,3)
print vec

这将影响所有未来(但不是过去)的mfloatvector。但你为什么要经历这样的麻烦是另一回事。一般来说,对于MObjects来说,这个级别的工作太多了。但是你可以试着问目标长度()来确定它是否是可编辑的等等,这样你就可以得到一个相当好的分布仍然太多的工作,但没有太多的收益。在

相关问题 更多 >