pymel getArea()不返回真实世界单位

2024-09-29 19:32:19 发布

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

如果我错了,请纠正我,但是当你从网格面节点调用getArea()时,它不会返回相对于当前场景单位的区域,而是相对于其自身的比例。在

例如:

如果我在场景单位设置为米的情况下创建一个长方体,则该长方体将以1,1,1的比例创建。在

我用这个盒子叫:

#Assuming you selected only faces from the scene.
import pymel.core as pm

selected = pm.ls(selection = True, flatten = True)
totalFaceArea = 0

for face in selected:
    totalFaceArea = totalFaceArea + face.getArea(space = "world")

print selected
print totalFaceArea

但是,如果我将场景单位更改为厘米,那么比例不会改变(这是有意义的)。问题是,面积似乎来自于比例,而不是它在场景中所占的空间量,因此当更改场景单位时,该区域不会发生变化。在

你们知道一种补偿场景单位变化的方法吗?或者有一种方法可以在场景单位中得到人脸的面积吗?在

谢谢!在


Tags: 方法true网格区域场景单位比例face
1条回答
网友
1楼 · 发布于 2024-09-29 19:32:19

Maya在内部使用cm,而且在应用单位设置方面不一致是可耻的。大多数系统和命令在您的工作单元中工作,但不是全部。在我的头脑中,有几个不支持的是摄影机设置、polySelectConstraints和(如您的例子)所有基于API的几何计算。在

对于这种情况,通常有一个修正函数,将值转换为我期望的单位。这个函数很简单:

def scene_unit_linear(val):
     _IN_CM = {'m':100, 'in':2.54, 'cm':1, 'ft':30.48}
     _scale = _IN_CM[cmds.currentUnit(q=True, l=True)]
     return _scale * val

不幸的是,最困难的是知道何时使用它:(而且(这很重要!)如果你得到一个二维或三维的值,你需要使用适当的能量。在你的例子中,你需要平方,因为你得到了一个面积值:1平方米等于10000平方厘米,而不是100!在

^{pr2}$

相关问题 更多 >

    热门问题