maya python api 建立节点.doc

上传人:s9****2 文档编号:559053825 上传时间:2023-12-22 格式:DOC 页数:9 大小:95KB
返回 下载 相关 举报
maya python api 建立节点.doc_第1页
第1页 / 共9页
maya python api 建立节点.doc_第2页
第2页 / 共9页
maya python api 建立节点.doc_第3页
第3页 / 共9页
maya python api 建立节点.doc_第4页
第4页 / 共9页
maya python api 建立节点.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《maya python api 建立节点.doc》由会员分享,可在线阅读,更多相关《maya python api 建立节点.doc(9页珍藏版)》请在金锄头文库上搜索。

1、mayapythonapi建立节点昨天基本上了解如果要建立自己的plug-in,最简单的就是包含一个command命令,可以使用mel或python来调用。现在来看看更高级的,建立一个自己的node节点-import math, sysimport maya.OpenMaya as OpenMayaimport maya.OpenMayaMPx as OpenMayaMPxkPluginNodeTypeName = spSineNodesineNodeId = OpenMaya.MTypeId(0x8700)# Node definitionclass sineNode(OpenMayaMPx

2、.MPxNode): # class variables input = OpenMaya.MObject() output = OpenMaya.MObject() def _init_(self): OpenMayaMPx.MPxNode._init_(self) def compute(self,plug,dataBlock): if ( plug = sineNode.output ): dataHandle = dataBlock.inputValue( sineNode.input ) inputFloat = dataHandle.asFloat() result = math.

3、sin( inputFloat ) * 10.0 outputHandle = dataBlock.outputValue( sineNode.output ) outputHandle.setFloat( result ) dataBlock.setClean( plug )# creatordef nodeCreator(): return OpenMayaMPx.asMPxPtr( sineNode() ) # initializerdef nodeInitializer(): # input nAttr = OpenMaya.MFnNumericAttribute(); sineNod

4、e.input = nAttr.create( input, in, OpenMaya.MFnNumericData.kFloat, 0.0 ) nAttr.setStorable(1) # output nAttr = OpenMaya.MFnNumericAttribute(); sineNode.output = nAttr.create( output, out, OpenMaya.MFnNumericData.kFloat, 0.0 ) nAttr.setStorable(1) nAttr.setWritable(1) # add attributes sineNode.addAtt

5、ribute( sineNode.input ) sineNode.addAttribute( sineNode.output ) sineNode.attributeAffects( sineNode.input, sineNode.output ) # initialize the script plug-indef initializePlugin(mobject): mplugin = OpenMayaMPx.MFnPlugin(mobject) try: mplugin.registerNode( kPluginNodeTypeName, sineNodeId, nodeCreato

6、r, nodeInitializer ) except: sys.stderr.write( Failed to register node: %s % kPluginNodeTypeName ) raise # uninitialize the script plug-indef uninitializePlugin(mobject): mplugin = OpenMayaMPx.MFnPlugin(mobject) try: mplugin.deregisterNode( sineNodeId ) except: sys.stderr.write( Failed to register n

7、ode: %s % kPluginNodeTypeName ) raise-kPluginNodeTypeName = spSineNode这段定义自己的节点的名称,当脚本写好后在maya中使用mel命令行中输入createNode spSineNode;就可以创建这个节点。sineNodeId = OpenMaya.MTypeId(0x8700)给这个节点指定一个ID,括号内的数字,这个数字应该是需要在maya中唯一的。先说说def nodeInitializer():这个方法吧这个方法用于初始化自己定义的节点,比分说里面有包含哪些属性,这些属性的初始值是多少。nAttr = OpenMay

8、a.MFnNumericAttribute();sineNode.input = nAttr.create( input, in, OpenMaya.MFnNumericData.kFloat, 0.0 )nAttr.setStorable(1)首先先给变量nATTR 一个 OpenMaya.MFnNumericAttribute(),这样就定义了nAttr为一个数字类型的属性然后给nAtrr新建立一个属性,长名称为“input”,短名称为“in”,类型OpenMaya.MFnNumericData.kFloat,默认值为0.0 ,并赋予给我们自己定义的sineNode.input属性nAtt

9、r.setStorable(1)可以让maya把这个属性保存到maya的场景中。nAttr.setWritable(1)可以让这个属性可写。sineNode.addAttribute( sineNode.input )sineNode.addAttribute( sineNode.output )sineNode.attributeAffects( sineNode.input, sineNode.output ).addAttribute 就是把 我们初始化好的sineNode.input 添加到 sineNode中.attributeAffects 就是告诉maya当我改变input的时候

10、,output会根据计算在面板中一块改变。在看看defcompute这个方法这个方法就定义了节点里面的属性如何处理数据。if ( plug = sineNode.output):当属性为 sineNode.output的时候,进行下面的计算dataHandle=dataBlock.inputValue(sineNode.input)首先提取sineNode.input的数值放到DataHandle中inputFloat = dataHandle.asFloat()在把提取出来的数据转换为Float 浮点 放入inputFloat中 result =math.sin( inputFloat )

11、* 10.0然后进行计算这里是以sin函数的方式进行变化,并且放大10倍,把结果方到 result中 outputHandle = dataBlock.outputValue( sineNode.output) 提取sineNode.output 的数值放到 outputHandle中 outputHandle.setFloat( result )设置outputHandle的数值为刚才计算好的result dataBlock.setClean( plug )可能是清楚所有的数据。-基本上比较主要的就是nodeInitializer 和compute这两个方法。复制粘贴上面的代码很简单,主要是

12、理解他们的意思,后面想了下扩展,这里是给了节点2个属性,输出属性是以sin()*10的方式变换,现在我想把10着个变成一个变量,也就是第3个属性,自己设定这个数值来控制output的范围,怎么操作呢?继续看帮助。-有关于初始化节点熟悉的内容主要是靠MFnNumericAttribute这个,于是在帮助上看了下系统的解释http:/ shortName, type, defaultValue=0)新建一个数字属性create(longName, shortName, child1, child2, child3=MObject.kNullObj)新建立一个复合数字属性 估计是类似于 移动的x,y

13、,z 这种多重属性createAddr(longName, shortName, defaultValue=0)新建立一个地址属性createColor(longName, shortName)新建立一个颜色属性createPoint(longName, shortName)新建立一个 3d point 属性getMax()取得这个属性设置的最大值,如果该属性是一个复合属性,将返回一个元组分别放入他们的最大值,如果没有设定最大值将会返回RuntimeError错误getMin()取得这个属性设置的最小值,如果该属性是一个复合属性,将返回一个元组分别放入他们的最小值,如果没有设定最小值将会返回RuntimeError错误getSoftMax()取得这个属性设置的SoftMax如果没有设定SoftMax将会返回RuntimeError错误getSoftMin()取得这个属性设置的SoftMin如果没有设定SoftMin将会返回RuntimeError 错误hasMax()返回一个布尔值,如果有设定最大值便返回1。没有就返回0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号