スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Maya 2011 になってから Script Editor が改良されて
以前よりずっとテキストエディタらしくなりましたが
個人的にはむしろ余計に使い難くなったような気さえします。
未だに MS ノートパッドの方が使い易いって如何なことでしょう。。

しかしながら MEL とは違い、様々な用途で使用されている Python は
当然ながら様々なエディタに対応しているので
私も Python を記述する時は専用エディタを使用しようと思います。

正直エディタにお金をかけたくもないので
フリーウェアを色々と調べようとしたところ、
プラグインをダウンロードすれば『Eclipse』というフリーソフトでも
対応するようです。

このソフトは大学1年生の時に必修授業の中で
少しだけ触った記憶が薄っすらとあるような気がするので
これに決めました。

まずは
http://www.vector.co.jp/soft/winnt/prog/se477425.html
ここからインストーラをダウンロード。

このままだとインストールに失敗したので
http://java.sun.com/javase/ja/6/download.html
ここから Java の JDK をダウンロードし、
改めて Eclipse をインストール。

そしてEclipse 内の ヘルプ→新規ソフトウェアのインストール... の作業対象欄に
http://pydev.sf.net/updates
と入力して Python 用プラグイン『Pydev』をインストール。

その後にウィンドウ→設定→Pydev→Interpriter - Python→新規(W)... から
Python の実行ファイルのパスを入力するようなので
Maya のインストールフォルダ内にでもあるかと思い検索をかけたのですが
見つからず。

そこでMaya のオンラインヘルプの『外部インタプリタから Python を使用する』を見ると

Windows および Linux の場合、
Maya の bin ディレクトリから mayapy 実行可能ファイルを実行します。


とあったので

(%MAYA_LOACTION%)\bin\mayapy.exe を指定すると
無事に設定も終えることができました。

110314_01.gif

実行も確認。

110314_02.gif

これで効率よく開発が進められそうです。


どなたか MEL のプラグインも作っていただけないものでしょうか。。
スポンサーサイト
Python の特徴
さて。

先日、トップダウン方式でいきなり Python にトライしてみたわけなのですが。
一応基本的なことをベースとしてまとめておこうと思います。

まず前提として、Python は ミニマリスト主義の考えにのっとって作られているようです。
ミニマリスト主義とは、簡単にいうと
「誰がプログラムを書いても同じようなものになる」ようにするためのものらしいです。

Python の大きな特徴は、全てこの一言で説明がつきそうです。

例えば、Python はインデントによってブロックを分けます。

C や MEL のように brace によってブロックを分ける方式だと、


if($num < 5){
$num++;
print $num;
}


このような書き方もできるし

if($num < 5)
{
$num++;
print $num;
}


このような書き方、もしくは

if($num < 5){ $num++; print $num; }


こんな書き方だって出来るわけです。

しかし、ブロックをインデントによって分ければ


if num < 5:
num += 1;
print num;


大概このようになるはずです。

ちなみに num++ のような インクリメント演算子が存在しないのも
num++ と num += 1 という、異なる書き方ができてしまうことを防ぐためでしょう。


個人的に残念なのが、
switch 文と do while 文が無いということです。

これも理由は同じで、

switch 文は if else 文(Python では elif 文)でもできるし、
do while 文は while 文の条件式を常に真にすれば同様のことができるからでしょう。

使用頻度は高くないにしろこの2つは個人的に好きなので
少し残念です。

また、明確に変数の宣言をすることがなかったりなどということもあり
今から Python を書くにはかなり『慣れ』が必要な気がします。

しかし何より。
Python を書いてみて驚いたこと、それは

関数が返り値を複数持てるということです。

これは嬉しい。
プログラムにかなり柔軟性が持てそうです。

さらには

num1, num2, num3 = 3, 5, 104;


のように複数の変数に一括代入できる点や、

varList = [3.1416, "graberry"];


のように異なる型の値を1つのリスト(配列のようなもの?)に代入することができる点も
大きな特徴ですね。


プラグインを作ったりなど、
確かに MEL ではできなかったことや難しかったことも
色々とできるようになりそうなので
頑張って Python に慣れていこうと思います。
はじめての Python
お久しぶりです。
実は先日まで1週間ほどイタリアに行って参りました。

建造物を中心に芸術的なものばかりを目に入れることができて
クリエイターとしても色々と刺激になったのですが
細かい話はまた機会があれば。

ところで、4人で旅行をして全員がデジカメで写真をパシャパシャと撮っていて、
旅行が終わってから仲間が撮った写真も欲しかったのでデータをコピーして貰いました。

すると、撮影者別に見ることは当然できますが
全てをまとめて時間軸にソーティングしないと見難いんですよね。

当然、Windows のエクスプローラー
(余談ですがなぜかwin7からは『エクスプローラ』ではない)の
『詳細』表示モードで作成時間順にソートすれば済むのですが、
ファイル名が揃っていないと見栄えが悪いし毎回それをするのも少し面倒です。

秀丸エディタなど、更新日時順にファイル名をつけなおしてくれるソフトウェアは
おそらく沢山あるんだと思いますが
この際だから勉強のためにも自分で作ってみました。

最初は Perl で書こうとも思ったのですが、
折角なので後学のためにもついに Python を使って書いてみることにしました。

できたものがこちらです。

import os;
import datetime;

def renameFilesToDate(dirPath, baseName, hourOffset):
fileList = os.listdir(dirPath);
i = 0;
for fileName in fileList:
filePath = dirPath + fileName;
withoutExt,ext = os.path.splitext(filePath);
cr8time = time.localtime(os.path.getmtime(filePath));
year,month,day,hour=offsetHour(cr8time[0],cr8time[1],cr8time[2],cr8time[3],hourOffset);
year = str(year);
month = paddingTo2(month);
day = paddingTo2(day);
hour = paddingTo2(hour);
min = paddingTo2(cr8time[4]);
while True:
stri = paddingTo2(i);
newFilePath=(dirPath+baseName+year+month+day+hour+min+"_"+stri+ext);
if os.path.isfile(newFilePath) == 1:
i += 1;
else:
break;
i = 0;
os.rename(filePath, newFilePath);
print "renamed " + filePath + " to " + newFilePath;

def paddingTo2(num):
if len(str(num)) == 1:
num = "0" + str(num);
else:
num = str(num);
return num;

def offsetHour(year, month, day, hour, offset):
fulldate = datetime.datetime(year, month, day, hour) + datetime.timedelta(hours=offset);
year = fulldate.year;
month = fulldate.month;
day = fulldate.day;
hour = fulldate.hour;
return year, month, day, hour;

renameFilesToDate("D:/My Documents/My Picture/Italy/", "img", 0);

タイトルのとおり、初めての Python です。

こんなに短いコードですが、数時間ずっと集中しっぱなしで
やっとそれなりに実行できるものが出来上がりました。
デバッグ周りなど細かいところは一切手をつけていませんが。

ちなみに、友人の1人がカメラの設定を現地時間に設定して撮っていたので
ちゃんとその分の引数を作って時差の分だけずらすことをできるようにしています。

0218.png

このような感じで、ベースの名前の後に年月日時分までを入れ、その後は秒ではなく
重複しないよう0から数字を入れています。
携帯電話で撮る写真はデフォルトでこんな設定になっていることが多いのではないでしょうか。

正直言って、とても大変でした。。
私は基本的に普段 MEL しか書かなく、今までも C や Java などをほんの少しかじったことしかないので
Python はあまりに取っ付き難かったです。
普通に if 文や for 文を書こうとしても私の知っている言語達とは記述方法が全く違うし
そもそも型宣言が無いせいで数値の連結とかいろいろ分かり難いし
オブジェクト指向スクリプト言語なので目当てのクラスや関数を探し出すのに
かなり時間がかかり、その使い方を知るにも試行錯誤の連続でした。

様々な言語を操ってる人って混乱しないんでしょうか。。
素直に尊敬するしかないです。

でも慣れていけば確かにかなり幅が広がりそうなので
徐々に Maya 上で MEL ではなく Python でもどんどんツールなど作っていこうかなと思っています。
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code