`
schi
  • 浏览: 205925 次
  • 性别: 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科学计数法...

    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 包 ...

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

    有些时候我们发现一些模块没有提供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 get-platformio.py

    web.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打包的程序

    pyinstxtractor.py 反编译pyinstaller打包的程序 使用方法 python pyinstxtractor.py 示例:python pyinstxtractor.py main.exe

    python2.7中所用的get-pip.py文件+安装方法

    `get-pip.py`是一个Python脚本,它的主要作用是为没有预装`pip`的Python环境安装`pip`。在Python 2.7中,由于某些系统可能没有默认提供`pip`,或者`pip`版本过低,`get-pip.py`就显得非常有用。这个脚本可以下载并...

    web.py中文版用户手册

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

    python3.6 get-pip.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实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.py实数模拟器.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。然后在...

    二叉树模拟器.py二叉树模拟器.py

    二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.py二叉树模拟器.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转...

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

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

    pip-20.3.4-py2.py3-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循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列模拟器.py循环队列...

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

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

Global site tag (gtag.js) - Google Analytics