前面的helloWorldCmd.py和helixCmd.py展示了自定义命令及带参数命令的写法,我们接下来看看自定义节点的写法。
这个节点和表达式中的sin方法是同样的功能。
sin及表达式的使用
http://download.autodesk.com/us/maya/2010help/index.html?url=Useful_functions_sin.htm,topicNumber=d0e175415
sineNode.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# python:
# import maya
# maya.cmds.loadPlugin("sineNode.py")
# maya.cmds.createNode("spSineNode")
# maya.cmds.getAttr("spSineNode1.output")
#
# Mel:
# loadPlugin sineNode;
# createNode spSineNode;
# getAttr spSineNode1.output;
import math, sys
import maya.OpenMaya as om
import maya.OpenMayaMPx as ompx
# 定义节点名称以及ID
kPluginNodeTypeName = 'spSineNode'
sineNodeId = om.MTypeId( 0x8700 )
# node definition
# 定义节点
class sineNode( ompx.MPxNode ):
'''
sine node
'''
# class variables
input = om.MObject()
output = om.MObject()
def __init__( self ):
super( sineNode, self ).__init__()
# 节点的计算函数
# plug是MPlug的实例
# dataBlock是MDataBlock的实例
def compute( self, plug, dataBlock ):
# 需要更新的属性sineNode.output
if ( plug == sineNode.output ):
# 想要接收的属性sineNode.input
# 用它来创建数据区段,返回数据柄
dataHandle = dataBlock.inputValue( sineNode.input )
# 将数据柄的数据转为浮点数
# 需MDataHandle来处理
inputFloat = dataHandle.asFloat()
# 通过计算,得出我们需要的结果
result = math.sin( inputFloat ) * 10.0
# 用sineNode.output来创建数据区段,用来写入数据
outputHandle = dataBlock.outputValue( sineNode.output )
# 将result写入数据区段
outputHandle.setFloat( result )
# 更新节点
dataBlock.setClean( plug )
# creator
# 创建节点
def nodeCreator():
return ompx.asMPxPtr( sineNode() )
# initializer
# 初始化节点
def nodeInitializer():
# input
# 输入
nAttr = om.MFnNumericAttribute()
# 创建input属性
sineNode.input = nAttr.create( 'input', 'in',
om.MFnNumericData.kFloat, 0.0 )
nAttr.setStorable( 1 )
# output
# 输出
nAttr = om.MFnNumericAttribute()
# 创建output属性
sineNode.output = nAttr.create( 'output', 'out',
om.MFnNumericData.kFloat, 0.0 )
nAttr.setStorable( 1 )
nAttr.setWritable( 1 )
# add attributes
# 将创建的属性添加给节点
sineNode.addAttribute( sineNode.input )
sineNode.addAttribute( sineNode.output )
# input属性会影响output属性
sineNode.attributeAffects( sineNode.input, sineNode.output )
# initialize the script plug-in
def initializePlugin( mobject ):
mplugin = ompx.MFnPlugin( mobject )
try:
mplugin.registerNode( kPluginNodeTypeName,
sineNodeId,
nodeCreator,
nodeInitializer )
except :
sys.stderr.write( "Failed to register node: %s" %
kPluginNodeTypeName )
raise
# uninitialize the script plug-in
def uninitializePlugin( mobject ):
mplugin = ompx.MFnPlugin( mobject )
try:
mplugin.deregisterNode( sineNodeId )
except :
sys.stderr.write( 'Failed to register node: %s' %
kPluginNodeTypeName )
raise
你可以在maya安装目录下的devkit/plug-ins/scripted找到sineNode.py。
在线版
http://download.autodesk.com/us/maya/2010help/API/sine_node_8py-example.html
分享到:
相关推荐
科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法模拟器.py科学计数法...
google_auth-1.23.0-py2.py3-none-any.whl python 包 google_auth-1.23.0-py2.py3-none-any.whl python 包 google_auth-1.23.0-py2.py3-none-any.whl python 包google_auth-1.23.0-py2.py3-none-any.whl python 包 ...
有些时候我们发现一些模块没有提供pip install 命令和安装教程 , 只提供了一个setup.py文件 , 这个时候如何安装呢? 步骤 打开cmd 到达安装目录 python setup.py build python setup.py install 总结 以上所述是...
get-platformio.py get-platformio.py get-platformio.py get-platformio.py
web.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy ...
pyinstxtractor.py 反编译pyinstaller打包的程序 使用方法 python pyinstxtractor.py 示例:python pyinstxtractor.py main.exe
`get-pip.py`是一个Python脚本,它的主要作用是为没有预装`pip`的Python环境安装`pip`。在Python 2.7中,由于某些系统可能没有默认提供`pip`,或者`pip`版本过低,`get-pip.py`就显得非常有用。这个脚本可以下载并...
web.py 是一个轻量级Python web框架,它简单而且功能强大。web.py是一个开源项目。该框架由美国作家、Reddit联合创始人、RSS规格合作创造者、著名计算机黑客Aaron Swartz开发。web.py目前已被很多家大型网站所使用。
curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py python get-pip.py
有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py有理数模拟器.py...
实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数...
估计这个安装包还只兼容python 2(python2 和python3差别还是挺大的,虽然现在python 3出来很久了,但是不少三方库还没有更新),因此需要自己找一个兼容的包:python_docx-0.8.6-py2.py3-none-any.whl。然后在...
二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py...
py转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转...
资源来自pypi官网。 资源全名:yolov5-5.0.0-py36.py37.py38-none-any.whl
pip-20.3.4-py2.py3-none-any.whl
绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点计算器.py绩点...
随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机点名器.py随机...
循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列...
Web.py Cookbook 简体中文版手册 欢迎来到web.py 0.3的Cookbook。提醒您注意:某些特性在之前的版本中并不可用。当前开发版本是0.3。 web.py 是一个轻量级Python web框架,它简单而且功能强大。web.py是一个开源项目...