2014-10-03 83 views
1

我正在为Maya编写一个网格导出器插件。Maya polySoftEdge

我很努力地为特定的kMesh节点获取默认的polySoftEdge输入值。 Maya的默认值为30.0,但我怀疑这可以改变,所以我把它当作未知数。

所以问题是polySoftEdge输入节点不会显示为网格上的输入值,直到您在查看器中选择网格,然后在顶部菜单栏中单击“法线 - >设置法线角度”,最后应用一个新的角度值和polySoftEdge1节点应该出现在所选网格的输入中。

在这一点上我可以用MEL从我的插件获得的价值:

浮$ VAL = polySoftEdge -query -angle polySoftEdge1;

看这个链接:

http://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/Maya-Tech-Docs/Nodes/polySoftEdge-html.html#attrangle

的属性可直接向API(而不是去通过MEL),但我不知道如何访问呢?

谢谢。

+0

只能查询polySoftEdge如果这样的节点存在。否则maya不存储平滑,因为Maya将平滑定义为边缘属性(即多边形软边缘确实设置了边缘值,但这些值可能会在计算链中稍后改变)。所以maya可能会或可能不会使用平滑角度。 – joojaa 2014-10-04 18:57:42

+0

使用OpenMaya调用API函数。 ['像OpenMaya一样导入maya.OpenMaya'](http://docs.autodesk.com/MAYAUL/2013/ENU/Maya-API-Documentation/index.html?url=files/GUID-856DDB26-93E7-493D-A1D4 -60C4CBA38B9C.htm,topicNumber = d30e4461) – 2014-10-06 15:52:03

回答

2

如果要使用API​​查询polySoftEdge节点,可以使用以形状节点为根的MItDependencyGraph迭代器对象,并将过滤器设置为kPolySoftEdge。

这是写在API的Python的味道打印选定的对象(S)的polySoftEdge片段:

import maya.OpenMaya as OpenMaya 

selectionList = OpenMaya.MSelectionList() 
OpenMaya.MGlobal.getActiveSelectionList(selectionList) 
selectionIter = OpenMaya.MItSelectionList(selectionList) 

dnNodeFn = OpenMaya.MFnDependencyNode() 
dagNodeFn = OpenMaya.MFnDependencyNode() 
dnGraphNodeFn = OpenMaya.MFnDependencyNode() 

while not selectionIter.isDone(): 
    dnObject = OpenMaya.MObject() 
    selectionIter.getDependNode(dnObject) 
    dnNodeFn.setObject(dnObject) 

    dagIter = OpenMaya.MItDag() 
    dagIter.reset(dnObject) 

    while not dagIter.isDone(): 
     dagObject = OpenMaya.MObject() 
     dagObject = dagIter.currentItem() 

     if dagObject: 
      dagNodeFn.setObject(dagObject)    

      if dagObject.apiType() == OpenMaya.MFn.kMesh: 
       dnGraphIter = OpenMaya.MItDependencyGraph(dagObject, 
                  OpenMaya.MFn.kPolySoftEdge, 
                  OpenMaya.MItDependencyGraph.kDownstream) 

       while not dnGraphIter.isDone(): 
        dnGraphNodeFn.setObject(dnGraphIter.currentItem()) 
        print "shape: %s" % (dagNodeFn.name()) 
        print "polySoftEdge-node-name: %s" % (dnGraphNodeFn.name()) 
        print "value: %f" % (dnGraphNodeFn.findPlug("angle").asMAngle().asDegrees()) 
        dnGraphIter.next() 

     dagIter.next() 

    selectionIter.next() 

输出示例:

shape: pSphereShape1 
polySoftEdge-node-name: polySoftEdge1 
value: 180.000000 
+0

我能够使用kPolySoftEdge在Maya Api中执行此操作。这似乎是通过对象依赖图查询的全局设置,这就是我为什么会感到困惑的原因。谢谢。 – Hinchy 2014-10-21 12:58:00

+0

你的意思是指哪个全局设置? pokySoftEdge是需要添加到网格的节点。正如joojaa所建议的那样,它不是全球性的,也不是网格的组成部分。 – kartikg3 2014-10-21 13:32:47

+0

在Maya应用程序中,我从主选项卡中选择了法线 - >“设置常规角度”。在我改变它的脚本编辑器中回显值时,我可以找到存储正常角度值的Maya变量。希望澄清我如何解决这个问题。 – Hinchy 2014-10-27 09:32:15