[MAYA][jsx]PhotoshopスクリプトからMAYAのポリゴン球を生成する


Photoshopのスクリプトで他のファイルを実行させることが出来ます。

そこで別記事で書いたPythonで外部からMAYAにコマンド送れる事を利用して

PhotoshopスクリプトからMAYAにポリゴンの球を生成させたいと思います。


.execute()

 
例えば以下のコードの様にgoogle Chromeのパスを指定してオブジェクトに対応させます。
 
appliPath = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
applicationfile = new File(appliPath);
applicationfile.execute();
オブジェクト.execute();
とすることで、対象のファイルを実行できます。
 

GUIボタンを配置

 
GUIのボタンのクリックで実行したいので、
先にPhotoshopのオリジナルのGUIウィンドウを作っておきます。
 
var gUIWindow = new Window('dialog','テストウィンドウ');

gUIWindow.bounds = [200,100,410,280];

gUIWindow.okBtn = gUIWindow.add("button",[5,110,100,170], "実行",{name:'ok'});
gUIWindow.cancelBtn = gUIWindow.add("button",[105,110,200,170], "キャンセル", {name:'cancel'});

gUIWindow.show();
使用しているPhotoshopはバージョンは、[Photoshop2020]です。
 
このGUIのボタンに先ほどのファイル実行のコードを対応させます。
 

Chromeを起動

 

var gUIWindow = new Window('dialog','テストウィンドウ');

gUIWindow.bounds = [200,100,410,280];

gUIWindow.okBtn = gUIWindow.add("button",[5,110,100,170], "実行",{name:'ok'});
gUIWindow.cancelBtn = gUIWindow.add("button",[105,110,200,170], "キャンセル", {name:'cancel'});

gUIWindow.show();


gUIWindow.okBtn.onClick= function()
{
    appliPath = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
    applicationfile = new File(appliPath);
    applicationfile.execute();

    UIWindow.close();
}

gUIWindow.cancelBtn.onClick= function()
{
    UIWindow.close();
}

 

このjsxファイルを保存して、実行します。

Photoshopでウィンドウが開いたら早速[実行ボタン]を押します。

 
chromeが立ち上がったら成功です。

実行できない方はchromeが64bitだとパスが違うので、パスを見直してみてください。

このようにPhotoshopのスクリプトから他のファイルを起動できるのは確認できたので、今度はMAYAにコマンドを送るPythonファイルを作ります。

 

Pythonファイル

 
ps_to_maya.pyと名前を付けてPythonファイルを保存します。
 


#!/usr/bin/python
# -*- coding: utf-8 -*-


import sys
import socket


commandString = sys.argv

mayaSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:
    mayaSocket.connect(('127.0.0.1', 6000))
except socket.error:
    print ' ERROR: Maya commandPort is not open.  '
    sys.exit()


cmd_mel = '''polySphere -r 15 -sx 12 -sy 12;'''
mayaSocket.send( cmd_mel)

mayaSocket.close()

 

このファイルをPhotoshopから実行できるようにしようと思います。

Pythonファイルをexeファイルに変換

 
ただPythonファイルのままだと実行できないので、exeファイルに変換します。
 
Pythonファイルをexeファイルに変換する方法は多数あるみたいですが

今回は pyinstaller を使います。

pyinstallerパッケージをインストールします。

pip install pyinstaller

でインストールできるはずなのですが

python -m pip install pyinstaller

筆者の場合は上手くいかなかったので、このようにしてインストールしました。

exeファイルに変換します。

Macの場合:

pyinstaller ps_to_maya.py –onefile

Windowsの場合:

pyinstaller ps_to_maya.py –onefile –windowed

WindowsOSの場合は[–windowed]のオプションを付けるみたいです。

筆者はWindowsを使っているのでオプションを付けて実行しました。
[–onefile]関連ファイルを一つにまとめるオプション
[–windowed]Windoseのバイナリを作るオプション

 
 
ズラズラーーっと長いログが続き終了
 

C:\Python27\dist に ps_to_maya.exe ファイルが出来ました。

このps_to_maya.exeをダブルクリックで実行してみます。
その前にMAYAのポートを開けるコマンドをMAYAのスクリプトエディタで実行しておいてください。
 
Python:
import maya.cmds
maya.cmds.commandPort(name='localhost:6000')
MEL:
commandPort -nr -n "localhost:6000";
 
ps_to_maya.exeをダブルクリックで実行してみます。
 

 

きちんとポリゴンの球が生成されました。

 

Photoshopのスクリプトの変更

 
それではPhotoshopのスクリプトを変更します。
 

gUIWindow.okBtn.onClick= function()
{
    appliPath = "C:/Python27/dist/ps_to_maya.exe" //変更
    applicationfile = new File(appliPath);
    applicationfile.execute();

    UIWindow.close();
}

 
ファイルのパスを変更しました。
 
PhotoshopのGUIの[実行ボタン]をクリックします。
 
 
先ほどと同じ球体が生成されました。
 
exeファイルを実行してMAYAにコマンドを送れることが分かったので
工夫次第でもっと連携させたりと便利なスクリプトが作れそうです。

Windows限定のテクニックですが、exeファイルを作らないで、
PhotoshopのメニューからPythonを実行させる内容の記事です。

まとめ

 
オブジェクト.execute(); を使うことで他のファイルを実行できます。

Pythonファイルをexeファイルに変換することで、

PhotoshopのスクリプトからMAYAに球体を生成させる事ができました。

そして.EXEファイルなのでPython環境が無い人にも配る事が可能です。

これを応用することで、PhotoshopとMAYAの連携させるスクリプトが
作れるようになるのではないでしょうか。