- 浏览: 205234 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
悲梦天下:
楼主,有些视频到一半就没声音了,怎么破!!!
python视频教程 更新22(完) -
schi:
啊,我太傻了,都想到使用uv了,可以有更简单的方法,只要把uv ...
Get Reversed Normal Faces(获取反法线面) [原理] -
schi:
相对Pillow和PySide而言,显示图片opengl就显得 ...
display an image with pyopengl and Pillow -
schi:
我也是今天才偶然想到的,我以后可能用不着了,所有分享给有需要的 ...
Get Reversed Normal Faces(获取反法线面) [原理] -
baiyanbin:
支持楼主原创,关注楼主博客有一阵子了,国内认真认真搞技术的太少 ...
python视频教程 更新22(完)
一个节点例子。该节点有一个time输入属性用来连接时间或设置关键帧动画,有一个outputMesh属性来根据time属性而得出的Cube(多边形方块),这个Cube的大小是由time来控制的。
animCubeNode.py
类方法createMesh展示了如何创建一个Cube
创建一个多边形需要使用MFnMesh类的create方法
numVertices 是这个多边形的顶点总数
numFaces(numPolygons) 是这个多边形的面的总数
points(vertexArray) 是顶点的一个数组。包括所有的顶点。例如一个默认的cube的vertexArray是{ (-1,-1,-1), (1,-1,-1), (1,-1,1), (-1,-1,1), (-1,1,-1), (-1,1,1), (1,1,1), (1,1,-1) }
faceCounts(polygonCounts) 是每个多边形的面的顶点总数的数组。例如一个默认的cube,有6个面,每个面有4个顶点,polygonCounts是{4,4,4,4,4,4}
faceConnects(polygonConnects) 是顶点与顶点的连接的数组。例如一个默认的cube的polygonConnects是{ 0, 1, 2, 3, 4, 5, 6, 7, 3, 2, 6, 5, 0, 3, 5, 4, 0, 4, 7, 1, 1, 7, 6, 2 }
outData(parentOrOwner) 会成为该多边形的父物体
可以观察下图来理解,我也是通过这张图才能明白的
你可以在maya安装目录下的devkit/plug-ins/scripted找到animCubeNode.py。
在线版
http://download.autodesk.com/us/maya/2010help/API/anim_cube_node_8py-example.html
animCubeNode.py
#!/usr/bin/env python # -*- coding: UTF-8 -*- # # import maya.cmds as cmds # cmds.createNode("transform", name="animCube1") # cmds.createNode("mesh", name="animCubeShape1", parent="animCube1") # cmds.sets("animCubeShape1", add="initialShadingGroup") # cmds.createNode("spAnimCube", name="animCubeNode1") # cmds.connectAttr("time1.outTime", "animCubeNode1.time") # cmds.connectAttr("animCubeNode1.outputMesh", "animCubeShape1.inMesh") import sys import maya.OpenMaya as om import maya.OpenMayaMPx as ompx kPluginNodeTypeName = "spAnimCube" animCubeId = om.MTypeId( 0x8700B ) # Node definition class animCube( ompx.MPxNode ): """ animCubeNode """ # class variables time = om.MObject() outputMesh = om.MObject() def __init__( self ): super( animCube, self ).__init__() def createMesh( self, tempTime, outData ): # 将时间单位转为24(Film) frame = int( tempTime.as( om.MTime.kFilm ) ) if frame is 0: frame = 1 # cube的大小,由时间控制 cubeSize = 0.5 * float( frame % 10 ) # cube的面、顶点数, # FaceConnects是6个面的点的总和 # 即6 * 4 = 24 numFaces = 6 numVertices = 8 numFaceConnects = 24 # 落实顶点 vtx_1 = om.MFloatPoint( -cubeSize, -cubeSize, -cubeSize ) vtx_2 = om.MFloatPoint( cubeSize, -cubeSize, -cubeSize ) vtx_3 = om.MFloatPoint( cubeSize, -cubeSize, cubeSize ) vtx_4 = om.MFloatPoint( -cubeSize, -cubeSize, cubeSize ) vtx_5 = om.MFloatPoint( -cubeSize, cubeSize, -cubeSize ) vtx_6 = om.MFloatPoint( -cubeSize, cubeSize, cubeSize ) vtx_7 = om.MFloatPoint( cubeSize, cubeSize, cubeSize ) vtx_8 = om.MFloatPoint( cubeSize, cubeSize, -cubeSize ) # vertexArray # 顶点数组,包括所有的顶点 points = om.MFloatPointArray() # 设置数组长度 points.setLength( 8 ) points.set( vtx_1, 0 ) points.set( vtx_2, 1 ) points.set( vtx_3, 2 ) points.set( vtx_4, 3 ) points.set( vtx_5, 4 ) points.set( vtx_6, 5 ) points.set( vtx_7, 6 ) points.set( vtx_8, 7 ) # 顶点数组 # 顶点与顶点的连接 faceConnects = om.MIntArray() faceConnects.setLength( numFaceConnects ) faceConnects.set( 0, 0 ) faceConnects.set( 1, 1 ) faceConnects.set( 2, 2 ) faceConnects.set( 3, 3 ) faceConnects.set( 4, 4 ) faceConnects.set( 5, 5 ) faceConnects.set( 6, 6 ) faceConnects.set( 7, 7 ) faceConnects.set( 3, 8 ) faceConnects.set( 2, 9 ) faceConnects.set( 6, 10 ) faceConnects.set( 5, 11 ) faceConnects.set( 0, 12 ) faceConnects.set( 3, 13 ) faceConnects.set( 5, 14 ) faceConnects.set( 4, 15 ) faceConnects.set( 0, 16 ) faceConnects.set( 4, 17 ) faceConnects.set( 7, 18 ) faceConnects.set( 1, 19 ) faceConnects.set( 1, 20 ) faceConnects.set( 7, 21 ) faceConnects.set( 6, 22 ) faceConnects.set( 2, 23 ) # 面数(6个),每个面由4个顶点组成 # 也是一个顶点数组 faceCounts = om.MIntArray() faceCounts.setLength( 6 ) faceCounts.set( 4, 0 ) faceCounts.set( 4, 1 ) faceCounts.set( 4, 2 ) faceCounts.set( 4, 3 ) faceCounts.set( 4, 4 ) faceCounts.set( 4, 5 ) # 创建cube meshFS = om.MFnMesh() newMesh = meshFS.create( numVertices, numFaces, points, faceCounts, faceConnects, outData ) return newMesh def compute( self, plug, data ): # 需要更新(重新计算)的属性 if plug == animCube.outputMesh: timeData = data.inputValue( animCube.time ) tempTime = timeData.asTime() outputHandle = data.outputValue( animCube.outputMesh ) # 创建MeshData dataCreator = om.MFnMeshData() newOutputData = dataCreator.create() self.createMesh( tempTime, newOutputData ) outputHandle.setMObject( newOutputData ) data.setClean( plug ) else: return om.kUnknownParameter # creator def nodeCreator(): return ompx.asMPxPtr( animCube() ) # initializer def nodeInitializer(): unitAttr = om.MFnUnitAttribute() typedAttr = om.MFnTypedAttribute() # time animCube.time = unitAttr.create( 'time', 'tm', om.MFnUnitAttribute.kTime, 0.0 ) # outputMesh animCube.outputMesh = typedAttr.create( 'outputMesh', 'out', om.MFnData.kMesh ) # add attributes animCube.addAttribute( animCube.time ) animCube.addAttribute( animCube.outputMesh ) animCube.attributeAffects( animCube.time, animCube.outputMesh ) # initialize the script plug-in def initializePlugin( mobject ): mplugin = ompx.MFnPlugin( mobject ) try: mplugin.registerNode( kPluginNodeTypeName, animCubeId, 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( animCubeId ) except: sys.stderr.write( "Failed to deregister node: %s" % kPluginNodeTypeName ) raise
类方法createMesh展示了如何创建一个Cube
创建一个多边形需要使用MFnMesh类的create方法
# 创建cube meshFS = om.MFnMesh() newMesh = meshFS.create( numVertices, numFaces, points, faceCounts, faceConnects, outData )
numVertices 是这个多边形的顶点总数
numFaces(numPolygons) 是这个多边形的面的总数
points(vertexArray) 是顶点的一个数组。包括所有的顶点。例如一个默认的cube的vertexArray是{ (-1,-1,-1), (1,-1,-1), (1,-1,1), (-1,-1,1), (-1,1,-1), (-1,1,1), (1,1,1), (1,1,-1) }
faceCounts(polygonCounts) 是每个多边形的面的顶点总数的数组。例如一个默认的cube,有6个面,每个面有4个顶点,polygonCounts是{4,4,4,4,4,4}
faceConnects(polygonConnects) 是顶点与顶点的连接的数组。例如一个默认的cube的polygonConnects是{ 0, 1, 2, 3, 4, 5, 6, 7, 3, 2, 6, 5, 0, 3, 5, 4, 0, 4, 7, 1, 1, 7, 6, 2 }
outData(parentOrOwner) 会成为该多边形的父物体
可以观察下图来理解,我也是通过这张图才能明白的
你可以在maya安装目录下的devkit/plug-ins/scripted找到animCubeNode.py。
在线版
http://download.autodesk.com/us/maya/2010help/API/anim_cube_node_8py-example.html
发表评论
-
uv重叠(uv overlap)
2014-06-28 22:28 5356两年多前我需要解决uv重叠的问题,当时觉得是一个挺有挑 ... -
GPU, Python and Maya
2013-06-27 17:32 3139Here an example how to use pyop ... -
sierpinski triangle 2d maya plug-in(with python API 2.0)
2012-11-07 16:55 2339因为python API 2.0可用的类很少,OpenMaya ... -
sierpinski triangle 2d in maya(with python API 2.0)
2012-10-22 20:41 2029在国庆前我刚好完成手上的工作,有两三天的空闲,于是就去 ... -
mel,cmds,python API哪个更快?
2012-09-13 14:37 3957昨天偶然的跟同事谈论 ... -
Maya Python API 2.0 - MGlobal
2012-08-31 18:07 2313MGlobal是一个静态类,提供通用的API涵数. 包括获取m ... -
Maya Python API 2.0 - MSelectionList
2012-07-09 14:03 2546从Maya2012开始我们迎来了新的Python API, ... -
createDynamicCache v0.1
2011-01-09 13:57 1704createDynamicCache是我的第二个maya ... -
geomShader
2010-09-29 14:26 1259geomShader.py是使用API编写maya材质的简单的 ... -
run time dynamic node
2010-09-14 23:51 1077大概一个月前我就写好了,但一直没时间整理,这个节点和我以前写的 ... -
scanDagCmd
2010-09-14 21:09 1619scanDag命令以depth first(深度优先)或bre ... -
Helix2Cmd
2010-08-28 16:39 1375不知道大家还记不记得之前的helixCmd,这个helix2C ... -
迭代所选的组件(component)
2010-04-26 21:36 1700我们已经知道如何对物体进行选择,但如果对象是compone ... -
API中的选择操作
2010-04-25 18:06 1691我们已经知道如何使用API获取当前所选物体,但单是获取当前 ... -
使用API获取当前所选物体
2010-03-03 20:28 1932获取当前所选物体,是在编写工具时经常用到的,我们来看看API和 ... -
circleNode.py
2009-11-23 21:12 1794自定义节点 使用方法 在脚本编辑器中的python面板执行c ... -
basicObjectSet.py
2009-11-18 20:14 1198这是一个自定义节点和命令都同时存在的一个例子。 basi ... -
zoomCameraCmd
2009-11-08 14:57 1079helixCmd是一个带命令参数的命令,但执行之后是无法撤销的 ... -
sineNode.py
2009-10-29 21:03 1250前面的helloWorldCmd.py和helixCmd.py ... -
helixCmd.py
2009-10-25 22:13 2044之前的helloWorldCmd.py只是 ...
相关推荐
科学计数法模拟器.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目前已被很多家大型网站所使用。
实数模拟器.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二叉树模拟器.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是一个开源项目...
zabbix微信报警脚本...路径/usr/lib/zabbix/alertscripts/wechat.py 提示:请执行 chown zabbix.zabbix /usr/lib/zabbix/alertscripts/wechat.py chmod +x /usr/lib/zabbix/alertscripts/wechat.py 一定要赋予权限