在maya外面,通过命令行向maya发送信息
来源:互联网 发布:java volatile 使用 编辑:程序博客网 时间:2024/05/16 14:04
写maya插件时,在maya的脚本编辑器里太难写了,一般都是用一些专门的IDE,比如sublime或pycharm,如果这时可以给这些专门的IDE写个插件,可以将在IDE里写的代码直接发送到maya里,岂不是很好,不用来回拷贝代码了,下面就说下这种插件实现的一个思路方法。
主要用到一个命令是commandPort,相当于在maya里创建一个服务器端口,一般在我们本地用的话,随便给个大于1024的数值就行,至于为什么要大于1024,是因为小于1024需要有管理员权限才能绑定,相当于给maya设置了一个端口,maya这是就相当于是一个服务器了,现在我们就再完成一个客户端就行了。
if not cmds.commandPort( ':7001', q = 1): cmds.commandPort(n = ':7001')
客户端主要用到的是socket模块,具体用如下代码就可以实现:
import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(('127.0.0.1', 7001))s.send('print "hello world"')s.send('polyCube()')s.send('python("import maya.cmds as cmds; cmds.sphere()")')
这里相当于将mel和python都执行了下,如果需要的话,可以将mel设置一个端口,再将python设置成另一个端口,再用commandPort的sourceType来设置source类型,那么这时IDE就可以分别向maya发送mel和python脚本了,这是可以将我们在maya里设置端口的代码再改进下:
if not cmds.commandPort( ':7001', q = 1): cmds.commandPort(n = ':7001', stp = 'mel')if not cmds.commandPort(':7002', q = 1): cmds.commandPort(n = ':7002', stp = 'python')
当然了,如果你又不想将IDE里的代码发送到maya里了,可以将maya里的这个端口都关掉就可以了:
cmds.commandPort(n = ':7002', cl = 1)cmds.commandPort(n = ':7001', cl = 1)
最后我们可以把代码,完善成如下的模式:
if not cmds.commandPort( ':7001', q = True ): cmds.commandPort(n = ':7001', stp = 'mel') cmds.warning('Mel port is open...')else: cmds.commandPort(n = ':7001', cl = 1) cmds.warning('Mel port is close...')if not cmds.commandPort(':7002', q = True): cmds.commandPort(n = ':7002', stp = 'python') cmds.warning('Python port is open...')else: cmds.commandPort(n = ':7002', cl = 1) cmds.warning('Python port is close...')
最后说一句,一个端口只能分配给一个服务器,在这里也就是只能将一个端口分配给一个maya,如果分配给两个的话,第二个会报错。
执行的结果如图:
关于一些TCP的一些知识可以看这里的详细讲解:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832511628f1fe2c65534a46aa86b8e654b6d3567c000
- 在maya外面,通过命令行向maya发送信息
- maya
- maya
- 在maya中生成迷宫
- Maya shatter
- Maya [1]
- maya资源
- maya快捷键
- Maya Calendar
- Maya开发
- maya python
- Maya Templates
- Maya Calendar
- Maya: 节点
- Maya Programming
- Maya Calendar
- Maya Calendar
- MAYA 快捷键
- handler机制的原理
- android5.0新特性之RecyclerView
- 初学者之CSS学习(三)CSS继承性和叠加性
- String中intern的方法 String.intern();
- 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- 在maya外面,通过命令行向maya发送信息
- [BZOJ3670][Noi2014]动物园(KMP)
- LeetCode #110 - Balanced Binary Tree - Easy
- 自建网页项目-蚁族财富网-记录8
- 字典树基础篇一(hdu 1251)
- MySQL存储过程和函数
- SQLServer2008R2复制发布订阅(含局域网跨网段)调试总结
- ArtifactTransferException: Failure to transfer --报错
- Java常见的垃圾收集器GC算法整理