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

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

MOTION BUILDERコミュのMotionBuilder Python Scriptで幸せになる為に

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして坊主と言います。

色々MotionBuilderのPythonの事を調べていたのですが
中々日本語では(英文でも)見つからない為トピックス作っちゃいました。
管理人様すいません。
幸せになる為の情報共有しましょう。

こんな感じでトピックスが利用されればと思います。
・こんな機能ないの?的な要望
・周りに相談できないスクリプターの不安解消
・情報の共有

Builderを使う人達が幸せになれると自分も幸せです。
方針は特にありませんが、ツールの性質上所属する場所
によっては保守義務などあると思います。
その辺りは大人として隠すなりごまかして、突っ込み、
詮索無しでやって行きたいと思います。

【本音】
最初の一歩を踏み出した感じで不安でドキドキしてます。
でも、待ってるだけじゃダメみたいなので…

コメント(60)

>個別のキー削除版とクリア後に値を復元する版

そっかー。そうすればいいんだ。なぜ思いつかなかったんだw
カレントのトランスレーションを記憶させて、クリアして
それをぶち込めば、スタティッククリアが出来るのですね。
おー、今度暇なときに作ってみるッス!
この前、エフェクターのアニメは全部消すってやつ作った
んですけど、スケール0になっちゃって、豆粒キャラが
出来てしまいました…。それはそれで、ウケたんですけど。

苦手というより、コレは制作者の問題ですよ。
基本は用意するけど、個々の会社で使い易いようにモジュール
作ってね。っていうスタンスなのかしらん。と思ったりしマス。
こんにちは、MotionBuilder の Python の日本語情報はここしか見つかりませんでした。
質問させてください。

Python にて Constraint を作成して、Constrained Object や Source にオブジェクトを追加することは出来ました。
しかし、Constraint の Properties の各パラメーターにアクセスする方法がわかりません。
Autodesk のフォーラムも探してみたのですが、見つかりませんでした。

具体的には、Constraint Axes の Wight の値の変更や
Aim Constraint の World Up Type を Object Up に変更して、World Up Object をシーン内のオブジェクトから指定 です。

スクリプトの知識がほとんどないため、Python のコマンドのヘルプの参照の仕方がわかりません。
dir(FBConstraintManager) でコマンドが出てくるですが、各コマンドのヘルプなどはここでわかるのでしょうか?
3dsmax の MacroRecoder や Maya の ScriptEditor みたいに自分が今どんな操作をしているか
確認する方法はないのでしょうか?
これがわかれば、もう少し何とかなると思うのですが・・・。

garu さんの書かれたサンプルを実行してみたところ、たくさん情報が出てきて77行目あたりで
うちのモニタでは途切れてしまいました。泣き顔

WindowsXP SP2、MotionBuilder 7.5 Extension 2、Python 2.4.3 を使用しています。
よろしくお願いします。
>そらいろさん

ごめんなさい。当時、激務でフォーラム全然見てませんでした。
今更遅いかも知れませんが、サンプルをファイルにダンプするという方法もございます。
って、なんだか、代理店やら、開発した人みたいな書き方ですけどw

ファイルオブジェクトにアクセスして(この辺りはMBの知識ではなくPythonの知識が必要になります)
テキストファイルにすることをオススメします。
今、手元にMBが無くて、しかも会社でもライセンス抜かれてちょっと細かくチェック出来ないんで、ヒント的なものになってしまいますがご容赦ください。

上記のコードでしたら、printの周辺に
log = "%s?t%s?t%s" % ( i, lSel.PropertyList[i].GetName(), lSel.PropertyList[i].Data )
を書いていただき書き込みたいファイルパスをopenファンクション、第1引数に入れてください。
dumpPath = r"C:?Temp?PropertyList.txt"
など
で、一番下に
f = open( dumpPath, "w" )
f.write( log )
f.close()
を書き加えれば、テキストファイルが書き出されます。

PropertyListが理解できれば、MBのPython Scriptは、ほぼ我が手のうちにという感じです。オペレーションのほとんどすべてをスクリプトで出来る事になるので、覚えて損は無いです。

あと、確かに作業したらコマンドログが欲しいですよね。
しかしながら、MBは、オブジェクトモデルしかサポートしてないんですよねぇ。
設計がなされていないというのが、現状です。
Pythonで、処理をするのを流行らせたいのなら、コマンドでも動作するようにしたいとは思うんですが、それだけMBの処理を遅らせてしまう結果になってしまいそうなので、コマンド化は反対ですねぇ。
MBはやっぱスピード。なんたって、おもちゃみたいなソフトなんですから。

あと、Areaでも、勇気振り絞って英語で質問てのもアリです。
僕は、ヤフーで翻訳して書き込みました。
ひやひやでしたが…w
意外といけるんだなって、思いましたね。相手はどう思ってるのかは知りませんけど。
Alexありがとう!
うーん。ちょっと間違えました。
mixi、バックスラッシュが?になっちゃうんですね。
しかも、ログファイル¥nを入れないと改行されませんね。
差し替えでお願いします。

log = "%s?t%s?t%s?n" % ( i, lSel.PropertyList[i].GetName(), lSel.PropertyList[i].Data )
>garuさん

お返事どうもありがとうございます。

テキストファイルに書き出すことは成功したのですが
26 AffectZ True
上記のように最後の1行しか書き出すことが出来ませんでした。

コードは下記のように書いてます。
おかしいところがあればご指摘くださるとありがたいです。


from pyfbsdk import *

lSel = [ lObj for lObj in FBSystem().Scene.Components if lObj and lObj.Selected == True ][0]
num = 0
for i in range( len(lSel.PropertyList) ):
try:
print i, lSel.PropertyList[i].GetName(), lSel.PropertyList[i].Data
log = "%s\t%s\t%s\n" % ( i, lSel.PropertyList[i].GetName(), lSel.PropertyList[i].Data )
dumpPath = r"C:\PropertyList.txt"
except:
print ""
num += 1

f = open( dumpPath, "w" )
f.write( log )
f.close()


どうやらPropertyListの値とConstraintのPropertiesの各パラメーターは
連動してないみたいで、いよいよ英語で質問しか道はなくなりそうです。
例えば、ConstraintのActiveはSetActiveと書くようなので・・・。
>そらいろさん

あれ。バックスラッシュ出てますね。うーん。マックだからか…。

ちなみに、ConstraintのPropertiesの各パラメーターは連動しています。
オブジェクトモデルの取得のところが問題なのかなと推測しちゃうんですが…。
上記コードをもうちょっと便利にしたものです。

from pyfbsdk import *

log=""

lMdls = [ lObj for lObj in FBSystem().Scene.Components if lObj and ( lObj.Selected == True ) ]

for i in range(len(lMdls[0].PropertyList)):
if lMdls[0].PropertyList[i].GetName():
log += "%s, %s" % ( i, lMdls[0].PropertyList[i].GetName() )
try:
log += ", %s" % lMdls[0].PropertyList[i].Data
except:
pass
log += "?n"

f=open( r"F:?Temp?PropertyList.log","w")
f.write(log)
f.close()

FBMessageBox( "Message", "OutPut File:?n?n?"F:??Temp??PropertyList.log?"", "OK" )

それと、aimコンストレイントのサンプルもつけておきます。

from pyfbsdk import FBConstraintManager

lMgr = FBConstraintManager()
iIdx = 0 # 0 is Aim Constraint
lCns = lMgr.TypeCreateConstraint( iIdx )
lCns.Name = "%s %s" % (str(iIdx),lMgr.TypeGetName( iIdx ))

lMgr.ConstraintAdd( lCns )

lCns.PropertyList.Find("Weight").Data = 50
lCns.PropertyList.Find("Active").Data = True
lCns.PropertyList.Find("WorldUpType").Data = 1 # 1 is Object Up

print "Adding new constraint: '%s'" % lCns.Name


lCns.PropertyList.Find("Active").Data = True
のところは、SetActiveと同じ動作をするはずです。
PropertyListメソッドから、全てのパラメータにアクセス出来るので
これで、貴方もコンスト通。
Activeの値を調べて、Falseならシーン内のゴミコンストを全て一掃する
Optimizeスクリプトも書けそうですね。
(実際書いてはみたものの使う機会は全然無かったんですけど…)

コンストの仕組みは若干ややこなので、Samplesのコードを見ると分かり易いです。
PythonScripting?Samples?UnitTesting
FBConstraintManager.py

では、頑張ってさらにいいもの作ってください。
出来たら教えてくださいね。
上記コード、なんで最後の一行しか出力されないのか分かりました…。

log = ~~~~~

じゃなくて

log += ~~~~~

ですよね。そりゃそーだ…。
ド素人で、すみません。
>garuさん

どうもです。

> あれ。バックスラッシュ出てますね。うーん。マックだからか…。

こちらWindowsですがバックスラッシュ出るみたいです。

> ちなみに、ConstraintのPropertiesの各パラメーターは連動しています。

いやはや、連動していますね。
英語で質問したところ、garuさんと同じ答えをもらえました。
Autodeskのフォーラムで見つけた、ReferenceAdd(1, ***)みたいな感じの
サンプルを参考にしていたのですが、これは古い方法なのですね。
PropertyList.Findから全てのプロパティの変更が出来ました。
PropertyListメソッド、これホント便利ですね。
今までのもやもやが消え去りスッキリ眠れそうです。

> 上記コードをもうちょっと便利にしたものです。

新しいものはキチンと動きました、感謝です。
ただこちらの環境の問題だけかもしれませんが、下記のようにコードの「"」を取りました。
じゃないとエラーが出たもので・・・。
FBMessageBox( "Message", "OutPut File:?n?n?F:??Temp??PropertyList.log?", "OK" )

> Activeの値を調べて、Falseならシーン内のゴミコンストを全て一掃する
> Optimizeスクリプトも書けそうですね。
> (実際書いてはみたものの使う機会は全然無かったんですけど…)

自由自在にスクリプトが書ける人が羨ましいです。
簡単なものならまだ対応出来るのですが、結局は力技で乗り切ってしまいます。

> コンストの仕組みは若干ややこなので、Samplesのコードを見ると分かり易いです。

サンプル分かりやすいですよね、随分助けてもらいました。
ちなみに、サンプルの終わりに del( *** )って1行がありますよね。
garuさんに教えてもらったものにも del( lMdls )みたいな感じで
最後に入れておいた方がいいのでしょうか?

> ド素人で、すみません。

garuさんがド素人だったら、ボクは一体・・・。
>そらいろさん

見ましたよー。Area。シンプルな感じでいいですね〜。
気軽な感じがまたいいですよね。AutoDeskなかなかやりますな。

delファンクションですが、どうなんでしょ?
恐らく、膨大な量の情報量をメモリにためたやつを解放するファンクションだと
思いますが、いままで全く実行した試しがありません。
もしかしたら、やっておいたほうがいいかもしれませんが、良く分かりません。
いろいろ他のpythonコードを見たりしますが、書いてあるのはSample Scriptだけでした。
開発者の癖というか、決まり事というか、やらないと気が済まないとか
そういう、ニュアンスなのかなぁ。と勝手に解釈してますけど…。
どうなんでしょ?

最近、新しいコード書いてないので、そろそろキャラクタライズ自動化スクリプト
でも作ろうかと思案中です。
>garuさん

> 気軽な感じがまたいいですよね。AutoDeskなかなかやりますな。

ですよね、かなりフランクな感じがします。
もうちょっと英語が出来れば、楽しげな感じで返事出来そうなのですが・・・。

> delファンクションですが、どうなんでしょ?
> 開発者の癖というか、決まり事というか、やらないと気が済まないとか
> そういう、ニュアンスなのかなぁ。と勝手に解釈してますけど…。

なんか、やらないとメモリ圧迫していくのかなと不安に思っていたのですが
そう心配することもなさそうですね。

> 最近、新しいコード書いてないので、そろそろキャラクタライズ自動化スクリプト
> でも作ろうかと思案中です。

いいですねー。
自動化ってどこまで自動化する感じなんですか?
FBXでボーンを書き出す時に、MotionBuilderの命名規則に従って名前を付けていると
ほとんどキャラクタライズって終わってますよね。

今回garuさんに教えていただいたスクリプトはmaxのConstraint情報を
Motionbuilderで半自動的に再現しようと考えていました。
力技でやっていたのですが、数が多かったので助かりました。

キャラクタライズ自動化スクリプトにConstraintも組み込んでもらえると
嬉しいです。
>そらいろさん

どもです。
キャラクタライズ自動化スクリプト。目指すは、100%。
吐き出したらほぼ一発で、キャラクタライズが完了です。
今、考えられるのは、2パターンありひとつは、主要ソフトからコンスト情報が
ある法則で書かれているテキストファイルをダンプして、pythonで、その情報を
元に、再現する。
というのと、主要ソフトから吐き出されたFBXをASCIIに一度変換して
ファイル自体を書き換え、Binaryに戻すというスマートなやり方です。
そらいろさんは、前者でやっているんですね。こっちは、後者でやってたり
するんですが、コレがなかなか…。
ファイルの構造って、ややこすぎて、訳分からないですねぇ。階層構造で
一時中断してます…。
やっぱ、前者でやったほうが楽かもなーって感じですね。
かなりのんびりやってます。
ていうか、せめてExporterにコンスト情報も込みで吐き出して欲しいですよねぇ。
ソフト間の苦労って、何年経っても無くならないですね。
概念はほぼ一緒なのに…。
>garuさん

> キャラクタライズ自動化スクリプト。目指すは、100%。
> ファイル自体を書き換え、Binaryに戻すというスマートなやり方です。

おおー、凄いです。
動物とかのコンバートが楽になりそうで涙ものです。
これが出来れば、各ソフト間でもコンスト情報共有出来そうですね。

> ファイルの構造って、ややこすぎて、訳分からないですねぇ。階層構造で
> 一時中断してます…。
> やっぱ、前者でやったほうが楽かもなーって感じですね。

ボクとしては是非使ってみたいので、まず前者で完成させて欲しいところです。
ベータテストなど協力できることは言ってください。

> ていうか、せめてExporterにコンスト情報も込みで吐き出して欲しいですよねぇ。

言えてます。
もうちょっと、やり取りが共通化されるといいですよね。
CrossWalkとかPolyTransの今後に期待します。
初めて質問します。最近スクリプトいじり始めた者です。

質問:
選択されたアイテム(ヌル等)を選択された順番通りに取得する方法を分かる方いらっしゃいませんでしょうか?
FBModelListで取得したリストはソートされていて選択された順番と関係ないようです。

やりたいのは
A->Bと選択してスクリプト実行するとAがBにコンストされるとかそういった感じの事です。

よろしくお願いいたします。
>そらいろさん

そのうち、Maxデータテストもやってみたいものですね〜
ファイルの仕様も決めないとなぁ…。まったり人間ですみません。

>$AW IIIさん

lMdls = FBModelList()
FBGetSelectedModels( lMdls )

とかやってもソートされちゃうってことですか?
明日ちょっと試してみますね。
ダメなら出来ない…かもですね…。
>$AW IIIさん

うむむ。確かにソートされちゃいますね。
コレは、出来ないですね。こんな事が出来ないとは…。
っていうのが多いんですよね…。

lMdls = [ lObj for lObj in FBSystem().Scene.Components if lObj and lObj.Selected == True ]

とかっつっても同じでしょうねぇ…。
Areaと昔のフォーラムあさってみましたがそれらしき回答も質問すらも
無かったです…。残念…。
SDKでfunction作るしか無いのかなー。
もしかして、すっごいうまいやり方があるのかもしれないですけど
誰か知ってたら教えてくださいって感じです。
お役に立てなくてごめんなさい。
>garuさん
返答ありがとうございます。
しかもわざわざ検証していただいて..

出来ないっぽいですね...
Areaと昔のフォーラムは自分も見てみました。
なんか根本的に使い方が違うんですかねぇ

何か他のアイデアでも有る方よろしくお願いいたします。
>$AW IIIさん

昨日風呂入ってたら、こんなん思いつきました。
どでしょうね〜?
これ以上は無理かな〜?
今んとこ、Parent/Childですが、Relationのほうが良かったかなー?
いづれやってみます。
"・"を" "にreplace。

----------------------

from pyfbsdk import *

def CreateConstraint( pTgt, pSrc ):
・lCnstMng = FBConstraintManager()
・lConst = lCnstMng.TypeCreateConstraint( 4 ) # 4 is Parent/Child Constraint
・lConst.Name = "%s %s -> %s" % ( lConst.Name, pSrc.Name, pTgt.Name )
・lConst.ReferenceAdd( 0, pTgt )
・lConst.ReferenceAdd( 1, pSrc )
・lCnstMng.ConstraintAdd( lConst )
・lConst.SetActive( True )

lMdls = FBModelList()
FBGetSelectedModels( lMdls )

if len(lMdls)==2:
・sRes = FBMessageBox(
・・": : : M E S S A G E : : :",
・・"Parent/Child Constraint:?n?n?tChoose a Source Model",
・・"%s" % lMdls[0].Name,
・・"%s" % lMdls[1].Name,
・・"Cancel"
・・)
・if sRes == 1:
・・CreateConstraint( lMdls[1], lMdls[0] )
・if sRes == 2:
・・CreateConstraint( lMdls[0], lMdls[1] )
・if sRes == 3:
・・print "Canceled."
else:
・FBMessageBox(
・・": : : E R R O R : : :",
・・"Please Select 2 Models.",
・・"OK"
・・)
>garuさん
わざわざありがとうございます!
実は自分も同じような事考えてまして(~~)
コレを機にとTkで作ってました。
確かにMessageBOxの方が気軽に作れますね。
参考にさせていただきます。

ところで
>・lConst = lCnstMng.TypeCreateConstraint( 4 )
でParent/Childコンストレイントを作成してますが、
番号的に
#0:Aim 1:simple IK 2:Expression 3:MultiReference 4:Parent/Child
#5:Path 6:Position 7:Range 8:Relation 9:RigidBody 10:3Points 11:Rotation
となっているようなのですが、
Relationって同じように作成出来ますか?
コチラでは作れなくて半分諦めてしまっています。
作れると便利なんですが、如何でしょうか?
>garuさん

ゆっくりと頑張って下さいー。期待して待っています。

>$AW IIIさん

こちらでも検証してみましたが、Relationでも正常に動作してます。
Extension2にバージョンアップしていないなら試してみてはどうでしょうか?
>そらいろ さん
貴重な情報ありがとうございます。
自分の権限では何ともなりませんので確認してみます。
はじめまして。きっしーと申します。

質問があるのですが、python で Save Selection(もしくは同等のこと)を行うにはどのようにしたらいいでしょうか?
以前のコメントを一通り読んで FBFbxManager から保存を行うことはわかったのですが、選択オブジェクトのみを保存するところがわかりませんでした。

FBFbxManager.Models というアトリビュートで指定するのでしょうか?
その場合も FBElementAction というクラスがなんなのかさっぱりわかりません。

Motion Builderのスクリプトは初心者なのでわからないことだらけで申し訳ないのですがよろしくお願いします。
>$AW IIIさん

亀レスですが…。
どうでしょ?その後、出来ましたでしょうか?
Relation版でももちろん出来るんですが、現存のRelationにFBBoxを加えるとか
内部のFBBoxを取得するとか、結構めんどくさいですが、やろうと思えば
できますね〜。
Functionが、7.5からRelation周りの作成が可能になったので、Sampleを参考に
作ってみてくださいね。
FindAnimationファンクションを使うと、文字列でノードをみっけるんで
あれは、便利ですね〜。
みっけたら、FBConnect(In, Out)でくっつけるだけですね。
Tkでやるんでしたら、結構いろいろオプションつけられていいかも。
完成が楽しみですね。

>きっしーさん

大分経っちゃったので出来ちゃったりしてますかね?

lFbxMgr = FBFbxManager()
lFbxMgr.SaveBegin( 'C:??Temp.fbx' )
lFbxMgr.Selected = True
lFbxMgr.Save()
lFbxMgr.SaveEnd()

コレで、Selection Saveが出来ます。

FBFbxManager.Modelsは、Saveするときに出て来るオプションの設定です。
チェックマークとか、禁止マークとか。(意味分かりますかね?)
lFbxMgr.Models = FBElementAction.kFBElementActionDiscard
とかって使うんじゃないかなー?たぶん…。
コレだと、モデルを全て吐き出しません。意味ないかも…。
lFbxMgr.Save()の前に書きます。
lFbxMgr.Materials = FBElementAction.kFBElementActionDiscard
だと、選択してても、マテリアル吐き出さないから、データ削減に
いいかもですね。ただ、選択しなきゃいいんですけど。
Loadするときのほうが、使えますね。
ではでは。
>garuさん
ありがとうございます!
全然できてませんでした。
.Selected = True
ってオブジェクトの選択に使うのでFBFbxManager()でもそうなのかと勘違いしてました。

.Modelsについてのお返事もありがとうございます。
こちらのほうはまだいまいち理解できてないですがとりあえず今は「=禁止マーク」ということで覚えます。

またわからないことがあったら質問させていただきますのでよろしくお願いします。
>garuさん
ありがとうございます。
FindAnimationファンクション使ってみました。
(Sampleコードのファンクションと気がつかなくて探してしまいました~~;)

Tkはなんか不安定になる事があって何が原因になっているのか分からないのが気持ち悪い状態です。

では
また質問させてください。
新しいグループを作ってそこにアイテムを登録するにはどうしたらよいのでしょうか?
よろしくお願いします。
質問途中ですが、またわからないことができてしまったので質問させてください。

Relationコンストレインを作ろうとしています。
とりあえずFBConstraintRelation()でコンストレインをつくるところまではいったのですが、その後がよくわかりません。

・アニメート可能なプロパティからGetBox()してFBBox()をつくってSetAsSource()でSenderに登録してみたら一応ノードは追加されるものの、手動で作ったときとくらべて「visibility」が足りません。
・プロパティどうしをつなぐ方法がわかりません。

Areaなどで検索してみたんですが見つけられませんでした。
よろしくお願いします。

>きっしーさん

Unfortunately!
残念ながら、FBGroup Classは、Pythonからでは
いじることが出来ないみたいです。ガガーン
FBGroupには、ItemsというAttributeがありますが
tupleで返ってくるため変更不能の変数です。
なので、増やしたり減らしたりは、GUIからじゃないと
出来ないみたいですね〜。
グループを作ること自体は出来るくせにニントモカントモですね。
あぁ・・・。かゆいところに手が届きません。
っていうか知らないだけでしょうか?
ちょっと分からないです。知っている方が居たら教えてください。ごめんなさい。

ビルダーの性質上、RelationのPropertiesタブのAボタンがONになってないと
ノードが現れない仕組みになってますので、それをONしてあげると
いいんじゃないでしょうか?

lNull = FBModelNull("Null")
lNull.Show = True
lNull.Visibility.SetAnimated( True )

で、セット出来ますネ。

Relation Constraintに関しては、SimpleScriptsの
CreateAndPopulateAConstraintRelation.py
というコードを見てみてください。
コレのFindAnimationNodeファンクションを使うと便利ですよ。
つなぎ方は、FBConnectです。って同じこと書いてるな・・・w

逆に、サンプル見ないでココまで来れたのはスゴイっすね。
もう少しです。頑張ってクダサイ。
>garuさん
お返事ありがとうございます。
サンプルずーーっと探してたんですが見つからなくて困ってましたが、
インストールし直したら出てきました。
これがあればあんなことやこんなことに苦労する必要がなかったかもしれません。。。

CreateAndPopulateAConstraintRelation.py見てがんばってみます。

グループ登録はできないんですね。。。
勉強になります。
今日、AutodeskさんにFBGroup()のItemsの返り値を
タプルじゃなくて、リストにしてちょーだいってお願いしてみたりしました。

ほかにもタイムワープから、オブジェクトを選択出来るといいなーとか。

実現するといいなっ。
>garuさん
ありがとうございます!
ほんと実現するといいですね!
キャラクタセットアップツールが最後まで行かないで歯がゆいです。

Relationについて
garuさんのお陰でできました。
ありがとうございました。
ついでにまた質問なんですが値を受け取るノードの上で右クリックすると
「Set value」というポップアップが出て値を数値入力できますが、
あれをPythonでやることは可能でしょうか?
よろしくお願いします。
>きっしーさん

Set Valueについては、ここに書かれていますね〜。
http://area.autodesk.com/index.php/forums/viewthread/4173/
そうなんだって思って、当時、いろいろ自分でも試してみましたが
全然、出来ませんでした…。
かゆいところに手が届かない、その4くらいでしょうか…?
つか、コレ言うの忘れてたー!むぅ…。
出来る方いらっしゃいましたら、教えてください。
ああ。そうそう。
ノードにIntegerなどのカスタムパラムくっ付けて、それに値セットして
そこにコネクトするとSetValueと同じ事が出来ますな〜。
ってのが書いてあったので、遠回りですが、可能は可能ですネ。
でもコレ、面倒くさいっすねw
>garuさん
お返事ありがとうございます。
Set Value できないんですね。残念です。

>ノードにIntegerなどのカスタムパラムくっ付けて、それに値セットして
そこにコネクトするとSetValueと同じ事が出来ますな〜。
Relationにカスタムパラメータつける、ってことでしょうか?
ひさびさの投稿です。そして、名前が逆になりました。
分かりにくくてスミマセン。

そいえば、Groupにアイテムを登録出来ないってアフォな事書いちゃっていましたが
実は出来るみたいです。

lGrp = FBGroup('CreateByScript') # グループ名セット
lGrp.ConnectSrc( lMdl ) # 一個ずつモデルを入れます

リストでセットしたい場合はmapを使えばOKです。

map( lGrp.ConnectSrc, list )

まったく気付きませんでしたYO!(ToT)
久しく書き込みしてませんでした坊主です。

原因は
・仕事場からアクセスが出来ない
・既にMBを使えない環境になってしまった。
な感じです。

でも今度AutoDeskで行われる新機能についてのセミナーには
参加してみようと思います。まだ空きがあると思われますので
きになる方は参加してみては如何でしょうか。

http://me.autodesk.jp/event/2008/maya2009/index.html
>uragさん
おお!
できるんですね!
今回は使用時期が過ぎてしまいましたが次回使わせていただきます。
ありがとうございます。
はじめまして、→まろむと申します。
Python初心者です。

質問させていただきたいのですが、PythonでMBのモデルやカメラをコピー(Duplicate)はできるでしょうか?
MBのヘルプを見てもどこに載っているのかわからず…。
takeのコピーは見つけたのですが。

もし知っていらっしゃったら教えていただきたいです。
よろしくお願い致します。
>→まろむさん

はじめまして。カメレスですが・・・。

Duplicateは、7.5の時に試して、出来ないんだなーと思っていましたが
2009になって、FBModel、FBMaterial、FBTextureに対して
Duplicate出来るFunctionが追加されたようです。

Duplicateしたい物を選択して、実行してみてくださいね。

from pyfbsdk import *
lMdls = FBModelList()
FBGetSelectedModels(lMdls)
newMdl = lMdls[0].Clone()

newMdlには、新しく出来たオブジェクトが返ってくるみたいです。
uragさん

Duplicateは2009から出来るのですねー!
職場がまだ7.5を使っているもので、やはり試してもアトリビュートがないと出てきてしまいました(´・ω・`)
せっかく教えてくださったのに、残念です…。

2009になったらぜひ使ってみたいです。
ありがとうございました!

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

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

MOTION BUILDER 更新情報

MOTION BUILDERのメンバーはこんなコミュニティにも参加しています

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

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