龙渲经验pythonInMaya调用外部脚本文件文档格式.docx

上传人:b****4 文档编号:18090121 上传时间:2022-12-13 格式:DOCX 页数:13 大小:876.48KB
下载 相关 举报
龙渲经验pythonInMaya调用外部脚本文件文档格式.docx_第1页
第1页 / 共13页
龙渲经验pythonInMaya调用外部脚本文件文档格式.docx_第2页
第2页 / 共13页
龙渲经验pythonInMaya调用外部脚本文件文档格式.docx_第3页
第3页 / 共13页
龙渲经验pythonInMaya调用外部脚本文件文档格式.docx_第4页
第4页 / 共13页
龙渲经验pythonInMaya调用外部脚本文件文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

龙渲经验pythonInMaya调用外部脚本文件文档格式.docx

《龙渲经验pythonInMaya调用外部脚本文件文档格式.docx》由会员分享,可在线阅读,更多相关《龙渲经验pythonInMaya调用外部脚本文件文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

龙渲经验pythonInMaya调用外部脚本文件文档格式.docx

test'

ex=True):

  py.deleteUI('

wnd=True)

  py.window('

t='

PythonScript'

  py.showWindow()

  File->

SaveScript,将脚本内容保存为一个*.py文档。

为了方便,我保存在用户文件夹下:

C:

\Users\myPY.py。

  *脚本保存的名称要和脚本内的窗体变量名不同(如本例中的test),否则可能无法执行。

  

  要在脚本编辑器中调用外部python脚本,首先需要获取文件的路径--导入os模块。

  importsys

  importos

  defpySource(filePath):

  #去掉文件目录路径,返回文件名,含文件后缀

  myFile=os.path.basename(filePath)

  #去掉文件名,返回目录路径

  dir=os.path.dirname(filePath)

  #将文件名和扩展后缀名分离后取文件名

  fileName=os.path.splitext(myFile)[0]

  #上面步骤中,编辑器仅根据提供的路径和文件名进行分类,并没有检测实际是否存在

  #检查路径是否存在,如果存在则进入下一步

  if(os.path.exists(dir)):

  #sys.path是maya启动后加载python相关模块的地址集合

  paths=sys.path

  pathfound=0

  #遍历paths这个地址集合中的名称,如果有和提供的文件路径相同的地址,除了变量pathfound的值更改为1,不执行其他操作

  forpathinpaths:

  if(dir==path):

  pathfound=1

  #如果路径不是地址集合中的地址,则将其加入(这是考虑多次启动脚本的情况)

  ifnotpathfound:

  sys.path.append(dir)

  #以上的语句,将外部的python文件作为一个模块加载到了当前的进程中,可进行实时调用

  #注意:

这是个动态的加载,用户的外部文件会在下一次python重启动时从进程中消失

  #exec方法用于执行存储在字符串或者文件中的python语句,类似MEL中的eval函数

  #不过这里需要添加inglobals(),因为我们要在整个全局变量中执行我们的外部脚本

  exec('

import'

+fileName)inglobals()

  #因为是后导入的模块,因此需要重载文件来确保数据的更新

  exec('

reload('

+fileName+'

)'

)inglobals()

  #返回输入文件的命名空间

  returnfileName

  #输入一个文件需要提供完整路径--勿用中文路径

  #注意python中路径是用斜杠【/】,而不是windows中文件夹路径的反斜杠【\】

  #如果是MacOS系统,由于不存在windows的分区概念,路径通常为:

/Users/...

  pySource('

c:

/Users/myPY.py'

  现在,运行这个脚本,可以直接执行外部的python脚本文件。

  不过存在一个问题,那就是字符的支持。

  输入语句:

  printsys.getdefaultencoding()

  可以看到maya中python的默认语言编码:

ascii。

  假如脚本中包含有ascii文字编码无法处理的文字编码时(例如中文,日文),脚本编辑器会在执行代码时候报错。

  当然,如果你不介意乱码显示,只需要脚本的执行,那么可以用以下方法解决ascii编码报错的问题:

  用【记事本】打开*.py文件,然后另存为UTF-8格式的文件替换。

  尽管有很多方法可以改变python的语言编码,不过很不幸maya的python目前还不支持。

我经过测试,无论是UTF-8还是GB2312,外部导入的文本中的简体中文和特殊字符只会显示乱码。

  从外部调用脚本后:

  =====================================================

  如果你对改变python默认编码有点兴趣,可以按我下面的方法进行。

  将以下语句保存名为sitecustomize.py(.py是后缀)的python脚本文件:

  sys.setdefaultencoding('

utf-8'

  然后将它复制到maya安装目录的名为Python的文件下,例如C:

\ProgramFiles\Autodesk\Maya2015\Python。

  这个特殊命名的文件可以让python在启动的时候优先导入。

当再次启动maya,python默认的语言编码将更改为UTF-8。

  如果不打算重启maya,可以动态的修改当前的编码格式。

  reload(sys)

  这段语句只要执行一次即可,作用会在maya关闭后消失。

不过因为reload()方法的使用,会造成python编辑器无法执行打印输出(此时使用print语句来打印输出结果是无效的),因此建议采用脚本提前加载的方法。

  *python3.x的默认语言编码为unicode。

  【窗体调用外部python文件】

  当完成了上述的步骤,UI定制就显得容易了,我们要做的工作也就是给每个按钮指定一个路径而已。

这里以我前面文章制作的python脚本为例--原先的按钮中文名称更改为英文。

因为窗体不是外部导入,所以脚本内可以使用中文字符。

toolBox'

工具集'

  py.columnLayout(adj=True)

  py.button(l='

线框变色'

c="

pySource('

/Users/scriptSet/colorLine.py'

)"

物体合并'

c="

/Users/scriptSet/allone.py'

  本例的完整代码如下(外部脚本文件的路径可自定义):

c="

  最后,将代码拖拽到maya工具架上形成一个按钮,即可弹出一个包含外部脚本文件调用功能的窗口。

  【打印语句的提示栏显示】

  这里顺便提到一个有关打印输出的技术点。

  使用MEL的时候,print结果时,脚本编辑器和maya界面右下方的信息提示栏都会打印出相应的单行信息;

  而python执行语句时却不会在信息提示栏中看到反馈:

  这是因为python在执行print这个语句时,会自动在结果后面换行,于是信息提示栏中看不到任何输出。

要实现打印输出,有两个方法:

  1.在print语句最后加入英文状态输入的逗号,取消打印换行。

  例如:

  print'

hello'

  *python3.X后print是作为方法而不是语句,因此print不换行输出需要加入参数来实现:

print('

end='

'

  2.使用sys模块下的输出方法。

  sys.stdout.write('

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1