- 浏览: 201360 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
悲梦天下:
楼主,有些视频到一半就没声音了,怎么破!!!
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(完)
不知道大家还记不记得之前的helixCmd,这个helix2Cmd是从C++转成python的版本,与helixCmd不同的是它不是创建曲线,而是更改曲线,使给定的曲线变成helix曲线,并且支持返回和重做。
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ This example takes a curve and changes it into a helix. """ import sys import math import maya.OpenMaya as om import maya.OpenMayaMPx as ompx kPluginCmdName = 'spHelix2' kPitchFlag = "-p" kPitchLongFlag = "-pitch" kRadiusFlag = "-r" kRadiusLongFlag = "-radius" # command class Helix2(ompx.MPxCommand): def __init__(self): super(Helix2, self).__init__() self.__fDagPath = om.MDagPath() self.__fComponent = om.MObject() self.__fCVs = om.MPointArray() self.__radius = 4.0 self.__pitch = 0.5 def doIt(self, args): """ doIt用来完成所有的准备工作,最后才执行实际工作. """ argData = om.MArgDatabase(self.syntax(), args) if argData.isFlagSet(kPitchFlag): self.__pitch = argData.flagArgumentDouble(kPitchFlag, 0) if argData.isFlagSet(kRadiusFlag): self.__radius = argData.flagArgumentDouble(kRadiusFlag, 0) # Get the first selected curve from the selection list. # 获取所选的nurbsCurve曲线 slist = om.MSelectionList() om.MGlobal.getActiveSelectionList(slist) mitList = om.MItSelectionList(slist, om.MFn.kNurbsCurve) # 如果所选物体不是nurbsCurve曲线,引发错误 if mitList.isDone(): sys.stderr.write('doIt: no curve has been selected\n') raise mitList.getDagPath(self.__fDagPath, self.__fComponent) return self.redoIt() def redoIt(self): """ redoIt来完成实际的工作 """ curveFn = om.MFnNurbsCurve(self.__fDagPath) # 获取曲线的cv数 numCVs = curveFn.numCVs() # 获取所有cv点的坐标 curveFn.getCVs(self.__fCVs) # 定义新的cv点的坐标 points = om.MPointArray(self.__fCVs) for i in range(numCVs): # Maya python API不支持列表直接赋值,需要使用set() #points[i] = om.MPoint(self.__radius * math.cos(i), #self.__pitch * i, #self.__radius * math.sin(i)) points.set(om.MPoint(self.__radius * math.cos(i), self.__pitch * i, self.__radius * math.sin(i)), i) # 将新的cv点坐标,赋予曲线 curveFn.setCVs(points) # 更新曲线 curveFn.updateCurve() return om.MStatus.kSuccess def undoIt(self): """ undoIt用来还原nurbsCurve曲线 """ curveFn = om.MFnNurbsCurve(self.__fDagPath) curveFn.setCVs(self.__fCVs) curveFn.updateCurve() self.__fCVs.clear() return om.MStatus.kSuccess def isUndoable(self): return True def cmdCreator(): return ompx.asMPxPtr(Helix2()) def syntaxCreator(): syntax = om.MSyntax() syntax.addFlag(kPitchFlag, kPitchLongFlag, om.MSyntax.kDouble) syntax.addFlag(kRadiusFlag, kRadiusLongFlag, om.MSyntax.kDouble) return syntax def initializePlugin(mobject): mplugin = ompx.MFnPlugin(mobject, 'Mack Stone', '1.0', 'Any') try: mplugin.registerCommand(kPluginCmdName, cmdCreator, syntaxCreator) except: sys.stderr.write('Failed to register command: %s\n' % kPluginCmdName) raise def uninitializePlugin(mobject): mplugin = ompx.MFnPlugin(mobject) try: mplugin.deregisterCommand(kPluginCmdName) except: sys.stderr.write('Failed to unregister comman: %s\n' % kPluginCmdName) raise
使用方法:
在插件面板加载helix2cmd.py,创建或选择一条曲线,执行命令
import maya.cmds as cmds cmds.spHelix2() # 或 cmds.spHelix2(r=3.0, p=2.0)
或
spHelix2; // 或 spHelix2 -r 5.0 -p 2.0;
但需要注意的是如果你输入的参数不是浮点值,如输入3,而不是3.0,可能会导致该参数失效而使用上一次的参数,不知道为什么,可能是maya python API对数据的转换还不够健全,或是数据类型十分敏感。
你可以在maya安装目录下的devkit/plug-ins找到helix2Cmd.cpp
。
在线版
http://download.autodesk.com/us/maya/2011help/API/helix2_cmd_8cpp-example.html
最后是pymel的版本,再次感受到pymel的强大
#!/usr/bin/env python # -*- coding: UTF-8 -*- import math from pymel.core import * def helix2(r=4, p=0.5): # 获取所选物体 objs = ls(sl=1, long=1) if not objs: return False # 获取物体的shape shape = objs[0].getChildren()[0] # 如果所选物体不是nurbsCurve曲线,引发错误 if not isinstance(shape, nodetypes.NurbsCurve): raise Exception('No curve has been selected or must select nurbsCurve first.') # 获取曲线的cv数 numCVs = shape.numCVs() # 获取所有cv点的坐标 CVs = shape.getCVs() # 定义新的cv点的坐标 newCVs = CVs for i in range(numCVs): newCVs[i] = dt.Point(r * math.cos(i), p * i, r * math.sin(i)) # 将新的cv点坐标,赋予曲线 shape.setCVs(newCVs) # 更新曲线 shape.updateCurve() return "Curve %s is turn to helix" % objs[0]
希望对你们有帮助
发表评论
-
uv重叠(uv overlap)
2014-06-28 22:28 5221两年多前我需要解决uv重叠的问题,当时觉得是一个挺有挑 ... -
GPU, Python and Maya
2013-06-27 17:32 3044Here an example how to use pyop ... -
sierpinski triangle 2d maya plug-in(with python API 2.0)
2012-11-07 16:55 2294因为python API 2.0可用的类很少,OpenMaya ... -
sierpinski triangle 2d in maya(with python API 2.0)
2012-10-22 20:41 1976在国庆前我刚好完成手上的工作,有两三天的空闲,于是就去 ... -
mel,cmds,python API哪个更快?
2012-09-13 14:37 3895昨天偶然的跟同事谈论 ... -
Maya Python API 2.0 - MGlobal
2012-08-31 18:07 2286MGlobal是一个静态类,提供通用的API涵数. 包括获取m ... -
Maya Python API 2.0 - MSelectionList
2012-07-09 14:03 2503从Maya2012开始我们迎来了新的Python API, ... -
createDynamicCache v0.1
2011-01-09 13:57 1676createDynamicCache是我的第二个maya ... -
geomShader
2010-09-29 14:26 1217geomShader.py是使用API编写maya材质的简单的 ... -
run time dynamic node
2010-09-14 23:51 1048大概一个月前我就写好了,但一直没时间整理,这个节点和我以前写的 ... -
scanDagCmd
2010-09-14 21:09 1578scanDag命令以depth first(深度优先)或bre ... -
迭代所选的组件(component)
2010-04-26 21:36 1671我们已经知道如何对物体进行选择,但如果对象是compone ... -
API中的选择操作
2010-04-25 18:06 1657我们已经知道如何使用API获取当前所选物体,但单是获取当前 ... -
使用API获取当前所选物体
2010-03-03 20:28 1898获取当前所选物体,是在编写工具时经常用到的,我们来看看API和 ... -
circleNode.py
2009-11-23 21:12 1767自定义节点 使用方法 在脚本编辑器中的python面板执行c ... -
basicObjectSet.py
2009-11-18 20:14 1173这是一个自定义节点和命令都同时存在的一个例子。 basi ... -
animCubeNode.py
2009-11-13 22:54 1373一个节点例子。该节点有一个time输入属性用来连接时间或设置关 ... -
zoomCameraCmd
2009-11-08 14:57 1042helixCmd是一个带命令参数的命令,但执行之后是无法撤销的 ... -
sineNode.py
2009-10-29 21:03 1224前面的helloWorldCmd.py和helixCmd.py ... -
helixCmd.py
2009-10-25 22:13 2008之前的helloWorldCmd.py只是 ...
相关推荐
联想thinkpad helix2 平板电脑 bios编程器直接读取芯片备份固件
helixtoolkit wpf
WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀...
helix server 9 破解版 流媒体视频服务器
HelixToolkit开发文档,原版pdf,一个文档要那么多积分,花钱下载了一个分享出来
Helix Server
想简单的做直播吗,这里给大家提供一个简单的方案。该文章主要介绍怎样搭建Helix Server以及简单的配置,和怎样配合Helix producer做直播详细方法。
double_helix_2
将helix移植到microchip单片机
WPF利用HelixToolkit后台导入3D模型
STM32软解MP3的移植工程,艰难找到了两种解码库libmad 和 helix。资料里面也有具体的资料,请大家支持
这是一款静态代码分析工具Helix QAC ,加上配置教程和使用指南
helix-toolkit.rar
配合Helix先进的功能,Realnetworks推出了第10代的流媒体压缩软件Helix Producer。Realnetworks全新改写代码的图形化专业流媒体文件制作工具。利用它,你可以轻松地实现RealAudio8、RealAudio9文件格式到实时文件的...
Helix Server 安裝 配置
helix server 流媒体服务器 仅仅是个安装程序 ,没有key。
RealNetworks.Helix.Producer.Plus
Helix Toolkit是一个用于在WPF(Windows Presentation Foundation)应用程序中创建和显示3D图形的开源工具库。但官方提供文档过于简单,故整理一下文档供用户参考。该工具库提供了一系列用于处理3D图形的控件、工具...