`
schi
  • 浏览: 201351 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

helixCmd.py

阅读更多
之前的helloWorldCmd.py只是一个单独的命令,没有任何命令参数。而helixCmd.py则是一个带参数的命令。
可能有不少人都会用到helix的曲线,但maya里的创建曲线菜单里是没有helix的。其实maya一直都有提供这个插件来创建helix的曲线,至于为什么不把它加入到创建菜单里我就不清楚了。
helix的数学算法
http://en.wikipedia.org/wiki/Helix#cite_note-4




需要注意的是,maya的默认轴向和上面的是不同的,maya是Y向上的,而上面的是Z向上,所以要将Y和Z调换。

helixCmd.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

'''
Created on Oct 25, 2009

@author: schi
'''

# 描述:
#     创建一个螺旋状的NURBS曲线
#
# 参数:
#     p=    #螺旋曲线的间距,默认是0.5
#     r=    #螺旋曲线的半径,默认是4.0
#
# 使用例子:
#     python:
#         import maya.cmds as cmds
#         cmds.spHelix(p=0.3,r=7)
#
#     Mel:
#         spHelix -p 0.3 -r 7;

import maya.OpenMaya as om
import maya.OpenMayaMPx as ompx
import sys, math

# 定义命令的名称
kPluginCmdName = 'spHelix'
# 定义参数的名称
kPitchFlag = '-p'
kPitchLongFlag = '-pitch'
kRadiusFlag = '-r'
kRadiusLongFlag = '-radius'

class SpHelixCmd( ompx.MPxCommand ):

    def __init__( self ):
        super( SpHelixCmd, self ).__init__()

    def doIt( self, args ):
        # 定义所需要的数值,如:cv点的数量,曲线的间距,半径等
        deg = 3
        ncvs = 20
        spans = ncvs - deg
        nknots = spans + 2 * deg - 1
        radius = 4.0
        pitch = 0.5
        
        # 剖析参数
        argData = om.MArgDatabase( self.syntax(), args )
        # 查看在使用命令时是否设置-p和-r参数
        # isFlagSet()是MArgParser的方法
        # MArgDatabase继承MArgParser
        # flagArgumentDouble()也一样
        if argData.isFlagSet( kPitchFlag ):
            pitch = argData.flagArgumentDouble( kPitchFlag, 0 )
        if argData.isFlagSet( kRadiusFlag ):
            radius = argData.flagArgumentDouble( kRadiusFlag, 0 )
            
        controlVertices = om.MPointArray()
        knotSequences = om.MDoubleArray()
        
        # 给helix建立cv点
        for i in range( 0, ncvs ):
            controlVertices.append( om.MPoint( radius * math.cos( i ),
                                             pitch * i,
                                             radius * math.sin( i ) ) )
            
        for i in range( 0, nknots ):
            knotSequences.append( i )
            
        # 创建曲线
        curveFn = om.MFnNurbsCurve()
        nullObj = om.MObject()
        
        try:
            # 这个插件是通过剖析cv点来创建曲线的。
            # 通过ep点来创建曲线的方法也已经添加,
            # 只要设置为False就行
            if True:
                curveFn.create( controlVertices,
                               knotSequences,
                               deg,
                               om.MFnNurbsCurve.kOpen,
                               0, 0,
                               nullObj )
            else:
                curveFn.create( controlVertices,
                               3,
                               om.MFnNurbsCurve.kOpen,
                               False, False, False )
        except:
            sys.stderr.write( '创建曲线时发生错误\n' )
            raise 
        
# Creator
def cmdCreator():
    # Create the command
    return ompx.asMPxPtr( SpHelixCmd() )

# Syntax creator
# 命令样式创建
def syntaxCreator():
    syntax = OpenMaya.MSyntax()
    syntax.addFlag( kPitchFlag, kPitchLongFlag, om.MSyntax.kDouble )
    syntax.addFlag( kRadiusFlag, kRadiusLongFlag, om.MSyntax.kDouble )
    return syntax

# 注册插件
def initializePlugin( mobject ):
    mplugin = ompx.MFnPlugin( mobject )
    try:
        mplugin.registerCommand( kPluginCmdName, cmdCreator )
    except:
        sys.stderr.write( '插件 %s 注册失败\n' % kPluginCmdName )
        raise

# 注销插件
def uninitializePlugin( mobject ):
    mplugin = ompx.MFnPlugin( mobject )
    try:
        mplugin.deregisterCommand( kPluginCmdName )
    except:
        sys.stderr.write( '插件 %s 注销失败\n' % kPluginCmdName )
        raise

之前忘了说明initializePlugin和uninitializePlugin这两个方法的作用,maya在加载插件时会调用initializePlugin方法,如果不存在将无法加载,如果加载出错会输出错误信息;同样当你不需要这个插件时可以卸载它,这时就会调用uninitializePlugin方法,否则无法卸载。

你可以在maya安装目录下的devkit/plug-ins/scripted找到helixCmd.py。
在线版
http://download.autodesk.com/us/maya/2010help/API/helix_cmd_8py-example.html
分享到:
评论

相关推荐

    实数模拟器.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有理数模拟器.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...

    TK-crawler.pyTK-crawler.pyTK-crawler.py

    TK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_crawler.pyTK_...

    绩点计算器.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循环队列模拟器.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 包google_auth-1.23.0-py2.py3-none-any.whl python 包 ...

    get-platformio.py

    get-platformio.py get-platformio.py get-platformio.py get-platformio.py

    draw.py,parsing.py,samples.py

    bootchart执行出错,替换ubuntu下面的/usr/share/pyshared/pybootchartgui三个脚本就可以了。

    web.py 中文手册

    web.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy coobookweb.py 中文手册 webpy ...

    web.py中文版用户手册

    web.py 是一个轻量级Python web框架,它简单而且功能强大。web.py是一个开源项目。该框架由美国作家、Reddit联合创始人、RSS规格合作创造者、著名计算机黑客Aaron Swartz开发。web.py目前已被很多家大型网站所使用。

    get-pip.py

    $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本 $ sudo python get-pip.py # 运行安装脚本

    Python3 py转exe.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转...

    python_docx-0.8.10-py2.py3-none-any.whl

    估计这个安装包还只兼容python 2(python2 和python3差别还是挺大的,虽然现在python 3出来很久了,但是不少三方库还没有更新),因此需要自己找一个兼容的包:python_docx-0.8.6-py2.py3-none-any.whl。然后在...

    PyPI 官网下载 | yolov5-5.0.0-py36.py37.py38-none-any.whl

    资源来自pypi官网。 资源全名:yolov5-5.0.0-py36.py37.py38-none-any.whl

    testme.py testbe.py.rar testme.py testbe.py.rar testme.py testbe.py.rar

    testme.py testbe.py.rar testme.py testbe.py.rar

    web.py中文教程_脚本之家.docx

    Web.py Cookbook 简体中文版手册 欢迎来到web.py 0.3的Cookbook。提醒您注意:某些特性在之前的版本中并不可用。当前开发版本是0.3。 web.py 是一个轻量级Python web框架,它简单而且功能强大。web.py是一个开源项目...

    python安装模块如何通过setup.py安装(超简单)

    有些时候我们发现一些模块没有提供pip install 命令和安装教程 , 只提供了一个setup.py文件 , 这个时候如何安装呢? 步骤 打开cmd 到达安装目录 python setup.py build python setup.py install 总结 以上所述是...

Global site tag (gtag.js) - Google Analytics