ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

MAYA ぷろぐらみんぐコミュのMEL 質問箱

  • mixiチェック
  • このエントリーをはてなブックマークに追加
かってに立てさせて頂きました。
MELに関しての質問はこちらへどうぞ。

コメント(772)

>その日暮らしさん

御説明とMELありがとうございます。

現状はまだまだ勉強不足で、行き当たりばったり的に
作ってる事が多くてプログラマさんならもっと綺麗で
シンプルな感じに作るんだろうなと思いつつ
汚いMELをこさえています。
日々精進という事ですね、ありがとうございました。
いつもお世話になっております。
以下の様な、

ファイルを開いて
あるオブジェクトのキーをループで調べて行って何かする
様なMEL作ったのですが上手くいきません

ファイルを開く部分までを実行してから
その後を実行させれば上手くいくのですが

一辺に動作させると無限ループになります
スクリプトエディタ上を見ると
本来キーのカウントされる「$crntTimeC」 
が「0」とプリントされます
何かファイルを開き切る前に「select -r XXX_null」
の処理を通り越して先に行ってしまったが為に
何も選択されて無いまま処理されてる様な、
とおもって「print `ls -sl`;」を追加したら
オブジェクトは選択されてる様でした
原因がわかりません....

以前も違うMELを書いた時に
やはり同じような現象があったので確かめたくなりました。
よろしくお願い致します。

//▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
$Checkfn = "F:/tmp/test.mb";

file -f -options "v=0" -typ "mayaBinary" -o $Checkfn ;
select -r XXX_null;

int $FIRSTkey = `findKeyframe -which first`;
int $LASTkey = `findKeyframe -which last`;

currentTime $FIRSTkey ;
int $crntTimeC = $FIRSTkey ;
//-----------------------------------------------
while($crntTimeC < $LASTkey)
{
print `ls -sl`;
print $FIRSTkey ;
print $LASTkey ;
print $crntTimeC;
print "\r\n";

NextKey;
$crntTimeC = `currentTime -q `;
}
//▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
ちなみに先程の質問で
テストで一回テストファイルを開いた状態で「XXX_null」を
選択しておくといっぺんに動作させても正常に動作します。
非選択や新規ファイル状態からだと上手くいかないのです
なので選択がおっついてないかとおもったのですが...
rtさん>
はじめまして。

\を\\にしてもダメでしょうか?

setProject "C:\\Autodesk\\Maya2011_64-bit\\projects\\test";

外していたら申し訳ありません。
> rtさん

> // エラー: substitute "\" "C:\Autodesk\Maya2011_64-bit\projects\test" "/"; //
> // エラー: Syntax error //
> となるので、何が悪いのか尚更わかりません・・・。

『\』(バックスラッシュ)は俗に言うエスケープ文字と呼ばれるもので,その次の文字と合わせて特別な意味を持っています.
Mayaのマニュアルにも載っていますが,例えば『\t』はタブ文字と認識されますので『projects\test』は『projects<TAB>est』と解釈されてしまいますし,『\"』は『"』と解釈されてしまいますので『"\" "』の部分は『" 』となり『C:〜』の部分が文字列ではなくて別の意味に解釈されてSyntax errorとなるのかと思います.

『\』を表すのが『\\』という記述になりますので,ゆぅな@林檎送れCさんが書かれているように『\』の部分を『\\』にすると良いかもしれません.

お使いのMayaのバージョンが判らないので何とも言えないですが,Maya 2010のマニュアルでしたら,

ユーザ ガイド > 一般 > MEL とエクスプレッション > 値と変数 > 文字列

辺りに書いてありますので,一度参照されると良いかもしれないですね.




> rtさん

補足です.(^_^;
解決になってないかもしれないですが,ダイアログを経由すると『\』がエスケープされないので,単に他の場所に記述されているpathをコピーしたいだけでしたらその方法もあります.

string $result = `promptDialog -message "directory:" -button "OK" -button "Cancel"`;
if( $result == "OK" ){
string $path = `promptDialog -query -text`;
print $path;
}

何かの御参考になれば幸いです.

パスの変換ならtoNativePathやfromNativePathというコマンドもありますよ。
>rtさん
直裁に求めるだけであればこんな感じでしょうか。
treeView -query -selectItem ("RenderLayerTabRenderLayerEditor");
MEL初心者です。(使用OSはMac、Maya2011を使用)

あるMELをWindowsで入力したところうまくいったのですが、
自宅のMacで同じ手順でやったところ、Syntax Errorが出ます。
これはなにが原因でしょうか。
MacでそのMELを開いた際に文字化けでもしているのかな?と思ったのですが、
どこがどう文字化けしているのか、わからず。。
お心当たりのある方がおりましたら教えてください。
原因と解決方法が知りたいです。よろしくお願いします。
> ハンプティさん
改行コードの違いに気をつけるとかですかね。
if文で{}が省略してある部分でエラーを起こしているケース等。

エラーメッセージとソースが無いとなんとも。
いつもお世話になっております。
他者が作ったMELをもう少し整理して効率化をはかろうと
しているのですが、

ドラッグ&ドロップで他のMELを動作させるMELの
中身に
source "〜パス〜.mel"
と書かれていたので、それを普通に起動させるMELの中に
組み込もうと、パス部分は変数にて
source ($sss)
とかにしたのですが、シンタックスエラーがでます
適当に囲い方や""も文字列に含んでみたのですが変わらずです
リファレンスをみるとsource はMELコマンドではない?的な
記述。
もう少し試したり調べたりしたらわかりそうな気もしますが
ちょっと急場対応したい状況でしたので質問させて
頂きました。

記述の仕方等教えて頂けますと助かります。
> 756 ナブさん

sourceディレクティブはスクリプト起動時に対象ファイルを一度コンパイルするという動作をするみたいです.
従って引数に変数を使うとスクリプト起動時にはまだ変数が未定義なためにエラーを起こすものと思われます.
余談ですが,sourceディレクティブは多重呼び出しが出来ないため,sourceを含んだmelスクリプトを更にsourceで読み込もうとしてもエラーを起こすとのことです.
引数に変数を使いたいのでしたらevalコマンドの利用を検討されてみては如何でしょうか?

以上何かの御参考になれば幸いです.
度々お世話になっております。
レンダー設定ウィンドウとは別に
レンダリング可能なカメラを設定できるウィンドウを作ろうと思っています。(レンダラーはVrayで)
機能的にはデフォルト?のレンダー設定ウィンドウの
Renderable Cameras項目と同等の機能を持たせたいです。

レンダーレイヤー毎に違うカメラを設定できるようにしたいのですが
setAttr "cameraShape.renderable" 1; のようなコマンドにすると
全てのレンダーレイヤーに適用されてしまって困っています。

レンダリング可能なカメラの追加 的なコマンドはあるのでしょうか???

スクリプトエディタを参照するとvrayChangeCamera("camera", 1, "レイアウト?")みたいな
コマンドが動いているようですが、レイアウトの部分を変えてもうまくいかないようです。

どなたか最適な方法をご存知の方がいらっしゃいましたら
ご教授ください。
vrayでなくとも、何かヒントになるようなことがあれば助かります。

環境はwin Vista, maya2011 64bit です。
よろしくお願いいたします。
int $i;
string $objgrp[] = `ls -sl`;

for($i = 1; $i < size($objgrp); $i++) ///2番目から1個ずつ増やして、選択した分ループ
{
float $objzho[] = `objectCenter $objgrp[$i]`; ///2番目からのオブジェクトの中心の座標を取得(1番初めに選択したのはベースなので省く)
select -r $objgrp[0]; ///最初のベースモデルを選択
instance;             ///ベースモデルのインスタンス  
move -r $objzho[0] $objzho[1] $objzho[2]; ///移動させてコピーオブジェクトと同じ位置にする。

select -r $objgrp[$i]; ///同じ場所のコピーオブジェクトを選択。
delete;
};


質問があるのですが、背景のオブジェクトで一つユニットを作成して残りはリピートさせるという感じで作っているのですが、そのときリピートの部分のコピーしてできたオブジェクトを最終的にインスタンスに変換(差し替え)したいと思いまして、melを作成しているのですが、うまくいかないのでどなたか教えていただけないでしょうか。

流れとしては
1、ベースのオブジェクトとリピートオブジェクトすべて選択
2、一番目にコピーしたオブジェクトの座標取得
3、ベースのオブジェクトをインスタンス作成
4、そのインスタンスのオブジェクトに先ほど取得した座標を入れる。
5、元のコピーのオブジェクトをデリート
2〜5をループ。

です、まだmelに関しては詳しくないので、他に簡単な方法などがあれば教えていただけたく思います。
よろしくおねがいします。
>760
インスタンス化はうまくいっているようですが、何がどのように思った通りにいかないのですか?

改善したほうが良い点は、移動だけでなく、回転、スケール、階層化されていた場合の扱い、ネーミングのルールなど、実用化するにはその辺も考慮した方がいいと思います。
>761タナカマコトさん
お返事ありがとうございます。

根本的にまだmelのことを理解していないので、うまくプログラムが書けないというのが思った通りに行かないという話なのですが!汗
アドバイスいただけますでしょうか。


for($i = 1; $i < size($objgrp); $i++)
今ここで Error: //が出てしまっているのですが、初期値1で選択した分ループさせるようにしたいのですが、初歩的なところですが記述の間違いを教えていただけますでしょうか?
>762
このコードだと選択しているノード数が2つ以上ないとエラーになりますね。
ループする前に、ノード数のチェックと、ノードのタイプをチェックする文を入れるといいと思います
>763
回答ありがとうございます。やってみます。
またわからないことがでてきたら質問させてください!!!
> #766 pocariさん
layoutの定義次第ではないでしょうか?
スクリプトの関連する部分見ないとわからないですね。
ls -type renderLayerで帰ってくる値をソートさせない方法ってありますか?
melのworkspaceControlを使って作ったwindowに、
textFieldやintFieldを使って数値を入力させたのですが、
その数値や文字列をmaya自体を再起動しても保持されるようにするにはどうすればいいのでしょうか

ログインすると、残り751件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

MAYA ぷろぐらみんぐ 更新情報

MAYA ぷろぐらみんぐのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング