利用 tcp client connection 或 socket connection 來跟 Maya 溝通
先給 python 程式...
import socket
host = YOUR_HOST_ADDRESS # 'localhost' or '127.0.0.1' for local machine, IP_ADDRESS for remote machine
port = YOUR_PORT_NUMBER_OF_MAYAmaya = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
maya.connect( (host, port) )message = 'sphere()'
maya.send(message)
maya.close()
C# 用 socket connection
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(YOUR_HOST_ADDRESS, YOUR_PORT_NUMBER_OF_MAYA);string strCmd = "sphere()";
byte[] buf = System.Text.Encoding.Default.GetBytes(strCmd);NetworkStream ns = new NetworkStream(s);
ns.Write(buf, 0, buf.Length);
ns.Flush();
ns.Close();s.Close();
C# 用 Tcp client connection 的話也差不多
TcpClient tc = new TcpClient();
tc.Connect(YOUR_HOST_ADDRESS, YOUR_PORT_NUMBER_OF_MAYA);string strCmd = "sphere()";
byte[] buf = System.Text.Encoding.Default.GetBytes(strCmd);NetworkStream ns = tc.GetStream();
ns.Write(buf, 0, buf.Length);
ns.Flush();
ns.Close();tc.Close();
比較需要注意的大概是 commandPort 命令的用法。
如果是使用
commandPort -echoOutput -n ":6000";
則會會開 port 6000 並 bind 在 127.0.0.1 上,這時候如果是要從 remote 機器上來控制就會 connection refused。
如果是使用
commandPort -echoOutput -n "YOUR_IP_ADDRESS:6000";
則會會開 port 6000 並 bind 在 YOUR_IP_ADDRESS 上,這時候如果從本機用 localhost 來控制會 connection refused,但是用 YOUR_IP_ADDRESS 則不會有問題。
最簡單的解決方式是
commandPort -echoOutput -n "0.0.0.0:6000";
這樣不論是本機或者 remote 機器來控制 Maya 做事情都可以很順利。