Maya教程之如何理解和学习MAYA API
白羽 2018-08-09 来源 :网络 阅读 2145 评论 0

摘要:本文将带你了解Maya教程之如何理解和学习MAYA API,希望本文对大家学Maya有所帮助

        本文将带你了解Maya教程之如何理解和学习MAYA API,希望本文对大家学Maya有所帮助


此文转载中国影视特效界水神梁潮坡先生的博客。//blog.sina.com.cn/s/blog_60b3e1ab0100hf9m.html点击打开链接
有兴趣的朋友可以看看,觉得没什么需要的就跳过吧。我尽量以下用专业的名词术语来解释python的API架构理解和操作。
  肯定有人提出过这样的问题:哪里有MAYA API的教程?基本上来说想学API跟MAYA没多大关系,重要是你对OO,OOP的理解,接下来我会说这个重点问题,只要真正理解OO,你马上可以看maya help来进行调用编写程序。
  开始之前来说说mel跟API的区别,mel是alias公司为用户定制好的模板函数,方便一般用户来操作MAYA,MEL的工作方式说白了就相当于你对MAYA界面的命令激活操作,然后结合控制流,如循环,判断来进行大规模的操作,特别代替人脑的各种思维模式来对MAYA进行流的操作,MEL非常强大,普通用界面命令的话,因为软件考虑到负荷,不可能把所有的命令都调用出来,那么脚本师就可以进行这些特殊的函数调用操作了。
  但是MEL严格来说不算编程,它是一个树上的果实,是开发师为用户定制好的果实,我们用方法去摘它下来就可以品尝了,非常安全的操作体系,不会发生错误。而API就是一颗树,相信学过程序的人都看过OOP方面的书,API class就是一棵树的比喻,这个类比在python中尤其突出,它直接就是一棵树!API允许我们在开发师的基础上定制自己的软件,这里说MAYA吧。说的更白:有树才有果实,我们写API就是为了写MAYA的底层数据架构。
  OO:面向对象
  OOP:面向对象编程
在python的世界里,一切都是对象,modules,function,class,instance都是对象,举个例子:
myName = 'SlayeR'
myName是对象,=是对象,‘SlayeR’是对象,我们进行OOP就是进行数据与架构的组合。
如何来写对象,对象究竟写OOP里面算什么?对象其实就是Class的实例。
class与def定制函数有点相似,但是复杂一点点,它是一张蓝图,举例子:我们作好建筑规划图,但是没有选好地方建筑,有可能是A城市,有可能是B城市,我们还没有实现。所以OO里面,instance就是class的实体。instance是调用class来实现的。
myName = 'SlayeR'中:myName是一个instance,'SlayeR'是字符串对象,在python里面,对象=类,类=对象,当声明了一个class的时候,就声明了一个新的类型!
接下来我们来看看modules,可能在MAYA里面写PY脚本的人会用过import modules,modules就是PY文件,里面封装好各种数据:可以是modules,functions,class,混合也可以。在MAYA里面用的就是导入MAYA包里面的cmds modules,from maya.cmds import*(import maya.cmds)然后就可以直接调用里面的函数了:
cmds.delete("SlayeR")
在MAYA里面,软件开发师为我们开放了底层的架构,便于我们去(继承)使用,然定制新的数据架构。
API modules里面都存放了这些底层的class:
OpenMaya - API module for common classesOpenMayaAnim - API module for animationOpenMayaFX - API module for effectsOpenMayaRender - API module for renderingOpenMayaUI - API module for user interfaceFunctionSet classesProxy classesMacros
  我们要学的重点就是Class。class是一颗树,之前人家写好了各式更样的class,我们在python里面可以通过多肽的编程方式来继承这些类来定制新的class,从而达到创建出新的instance来供用户使用,多肽的OOP也是PYTHON的特点,它可以让资源更加合理管理,另外也便于instances的属性访问和调用。
  写class其实就是在写nameSpace的过程,写脚本的人应该有个基本概念:global nameSpace,local nameSpace,这是OO编程的重点,因为我们要不断的访问调用数据,nameSpace就显得严谨了,module,instances,functions,class都有自己的nameSpace。
 我们来写一个容易明白一下的class:
class mayaClass:
    def setdate(self,value):
        self.ver=value
mayaInstance = mayaClass()
  声明了mayaClass后,setdate function就是mayaClass的属性,然后mayaInstance 调用mayaClass来创建新的Instance,ver是mayaClass的属性,我们日后可以通过mayaClass.ver的方式来访问,访问mayaClass.ver相当于调用class的function: mayaClass.setdate(mayaClass,value)
 
 当然你有时候会经常看见有__init__()的构造器,用来初始化调用class生成的Instance:
class mayaClass:
    def __init__(self,value):
        self.ver=value
    def __mul__(self,other):
        self.ver=self.ver*other
那么我们就可以直接在instance里面访问调用:
InsMAYA = mayaClass("2010")
InsMAYA * 2
这也是运算符的继承原理。
  假设上面是MAYA公司为我提供的openMaya modules class,如果我们要定制自己的special class是不是要改这个底层机构呢,不需要,但我们可以继承,这里跟MEL完全不一样,MEL是functions的大量调用结合,所以运算速度慢。class完全两个概念,虽然他们都有各自的nameSpace,但是他对于数据的访问是超级快的,官方说是快10倍以上,我来解释一下为什么API为什么那么快!
  下面我来定制一个私人的class:
 class maxClass(mayaClass):
    def __init__(self,value):
        mayaClass.__init__(self,value):
        self.vet=value
我们可以看到maxClass inherit mayaClass,那么当我们创建instance:
InsMAX = maxClass("2010")
vet = InsMAX.vet
ver = InsMAX.ver
  当寻找InsMAX 的属性vet时候它顺着program tree往上找,先找baseClass,然后superClass,所以在调动数据的时候API显得非常快,他们完全是一棵各个class树枝组合成的树,直到找到相应的nameSpace位置。说的更白,我们写API是放置数据的过程,合理的放置就正确的去调用数据,所以nameSpace是个关键点。
  所以写API的OOP,相当于是软件工程师了,他们在创建架构,在原有的class包基础上不断定制自己新的class数据来封装成新的modules供用户使用,在这种继承的OOP过程,我们叫framework.
  当然会写API class是不够的,我们还需要各项专业知识,MAYA的用户更注重图形学了,让我们一起努力学习进步吧。


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标常用软件之Maya频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程