• 使用Python开发Maya导出插件的一些辅助


    Maya导出插件的开发一定程度上说比Max的导出要方便,自己可以少做很多事。

    这里说的是Python写的插件,基本可以适用于C++的。

    先了解一下maya的环境变量设置

    在我的文档下面的maya\玛雅版本\Maya.env;例如 C:\Users\SITT\Documents\maya\2011-x64\Maya.env

    这个文件可以用记事本打开,增加一行

    MAYA_PLUG_IN_PATH = 你自己的插件路径。

    例如:

    MAYA_PLUG_IN_PATH = d:\mayaPlugin\

    这样Maya就会将该路径加入到插件的目录当中。可以从该目录载入插件。

    然后很爽的一点是Maya的mel有卸载和载入插件的函数,max有第三方插件实现类似功能,不过,终究不如软件自带,Max的以后有时间再开贴。

    Mel卸载和载入插件的代码是:

    unloadPlugin "ModelTranslator.py";
    loadPlugin
    "ModelTranslator.py";

      

    既然是导出,自然还需要导出一个文件来看看工作是否正常,Mel代码:

    file -op ""-typ "ModelTranslator"-pr  -ea "C://testmodel.xxx";

      

    此处"ModelTranslator"是自己写的导出插件类,Maya中导出插件需要继承MPxFileTranslator。具体怎么写导出,也要另开贴了。

    也可以到 oak3d.com下载MAYA的导出插件做参考,代码是公开的。:)这个导出也是我写的。

    可以将以上三句一起执行,结果就是卸载,重新载入插件,导出文件。是不是很方便?

    还可以更进一步。Maya可以监听一个端口,将发送过来的字符串当作脚本执行。这里是开启端口用的mel,python的话参考一下Maya的文档里的同名函数即可。

    if(! `commandPort -q ":7457"`) commandPort -rnc -n ":7457"

      

    这是查询本地的7457端口是否已经注册,如未注册,则开启。

    这个可以在Maya启动时自动运行,方法是,写在 My Documents\maya\<Version>\scripts\userSetup.mel里面

    例如 C:\Users\SITT\Documents\maya\2011-x64\scripts\userSetup.mel

    默认没有这个文件,新建个文本文件改名即可。

    然后可以自己写一个接受命令行参数的程序去发送字符串。像我这种懒人就用C#了,安逸啊

    C# Socket
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;

    namespace SockCMD
    {
    staticclass Program
    {
    [STAThread]
    staticvoid Main(string[] args)
    {
    if (args.Length <3) return;
    string ipText = args[0];
    string protText = args[1];
    string message = args[2];
    TcpClient theTcpClient
    =new TcpClient();
    try
    {
    IPAddress theIP
    = IPAddress.Parse(ipText);
    int prot = Int32.Parse(protText);
    theTcpClient.Connect(theIP, prot);
    NetworkStream theNetStream
    = theTcpClient.GetStream();
    if (theNetStream.CanWrite)
    {
    byte[] theMessageBuffer = Encoding.ASCII.GetBytes(message);
    theNetStream.Write(theMessageBuffer,
    0, theMessageBuffer.Length);
    }
    }
    catch
    { }
    theTcpClient.Close();
    }
    }
    }

      

    如果是美术或技术美术,也可以下载我写的这个 https://files.cnblogs.com/sitt/SockCMD.zip ,需要安装.net frameWork,当然一般都已经安装了。

    这个的用法是 “SockCMD ip地址 端口 字符”。

    例如 : SockCMD 127.0.0.1 7457 polyCube

    如果前面注册了 7457 端口,这个参数执行SockCMD的结果是在Maya中建立一个立方体

    怎么样?是不是知道该怎么做了?

    只要在自己用的编辑器里设定一个和按键绑定的命令行去发送重新载入插件并导出文件的mel脚本即可。

    可以自己配置一个很方便的开发环境。

  • 相关阅读:
    Leetcode 238. Product of Array Except Self
    来博客园的第一天
    [LeetCode] 1020. Number of Enclaves
    [LeetCode] 921. Minimum Add to Make Parentheses Valid
    [LeetCode] 1541. Minimum Insertions to Balance a Parentheses String
    [LeetCode] 738. Monotone Increasing Digits
    [LeetCode] 1669. Merge In Between Linked Lists
    [LeetCode] 865. Smallest Subtree with all the Deepest Nodes
    [LeetCode] 376. Wiggle Subsequence
    [LeetCode] 1170. Compare Strings by Frequency of the Smallest Character
  • 原文地址:https://www.cnblogs.com/sitt/p/2143933.html
Copyright © 2020-2023  润新知