X



MAXSCRIPT_Vol1
000101垢版04/12/04 01:19:32ID:5lu9hJHF
MAXSCRIPTに関するQ&Aのためのスレッドです。

あらかじめ用意された複数のテクスチャ(解像度違い)があり、
選択しているオブジェクトのテクスチャをボタン一発(インターフェース上は、解像度の種類分)で
切り替えていくというスクリプトを作りたいと思っています。

またできれば、ディフューズレベル、スペキュラレベル...などで、選択できる分岐処理を実装できればと思っています。
既存のものであれば、ご紹介ください。また、参考になるテンプレートスクリプトがあれば、お願いします。

0002名無しさん@お腹いっぱい。垢版04/12/04 01:23:13ID:ls0AqeO1
OK!!
このスレではCG技術板を
笑いの坩堝と化せる
新人芸人を大募集中だ
          ∧_∧
    ∧_∧  (´<_`  )  CG業界の未来を担うのは
   ( ´_ゝ`) /   ⌒i      俺らだけどな。
   /   \     | |
  /    / ̄ ̄ ̄ ̄/ |
__(__ニつ/  FMV  / .| .|____
    \/____/ (u ⊃

________________________
| さあ、皆さんのネタセンスを試す時がやって参りました。 |
| コイツらを使ってどんどん一発ネタを書き込んでみよう。 |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
【テンプレサイト】
http://nody.hp.infoseek.co.jp/

【俺らスレの情報】(ガイドライン板)
( ´_ゝ`)流石だよな俺ら]
http://that.2ch.net/test/read.cgi/gline/1035138937/
↑他板スレ、新AAの報告、その他
0003名無しさん@お腹いっぱい。垢版04/12/04 01:24:27ID:ls0AqeO1
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□■□□■□□■□□□□□□□□□□□□□□□□□□□□□□□□
□□□■■■■■■■■■■■□■■■■■■■■□□□□■□□□□□□□□
□□□□□□■□■□■□□□□□□□□□□□■□□□□■□□□□□□□□
□□□□■■■■■■■■■□□□□□□□□□■□□□□■□□□□□□□□
□□□■□■□□■□□■□■□□□□□□□□■□□□□■■■□□□□□□
□□□□□■■■■■■■□□□□□□□□□■□□□□□■□□■□□□□□
□□□□□□■□□□■□□□□□□□□□■□□□□□□■□□□■□□□□
□□□□■■■■■■■■■□□□□□□■□□□□□□□■□□□□■□□□
□□□□□□■□□□■□□□□□□□■□□□□□□□□■□□□□□■□□
□□□■■■■■■■■■■■□□□■□□□□□□□□□■□□□□□■□□
□□□□□■□□□□□■□□□■■□□□□□□□□□□■□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
0004名無しさん@お腹いっぱい。垢版04/12/04 01:25:38ID:ls0AqeO1
         _________
      ,.r‐''''...................-、
    /:::::::::::::::::::_ ::::::::ヽ
    !::::::::::::::::::::::}十{::::::::::::::i
    !::::::::::::::::::_,,、-'''''' ̄ ̄`'ヽ
    |ミシ ̄ ̄__,,,〜,__ !'''"
   .(6ミシ  ,,(/・)、 /(・ゝ |
     し.    "~~´i |`~~゛ .i
      ミ:::|:::::........ f ・ ・)、 ...:::i
    ノ_ヽ::::::::::::-=三=-:::/   
  /| | |\ヽ:::::::::::゛::::ノ/    削除依頼だせよ
/| | | | |\ ̄ ̄ ̄ | | \  
.    r‐-‐-‐/⌒ヽ-    ヽ、i 
ヽ、  |_,|_,|_,h( ̄.ノヽ       |
ー-ヽノ| `~`".`´ ´"⌒⌒) |_ /
ノ^ //人  入_ノ ビシッ
0005名無しさん@お腹いっぱい。垢版04/12/04 01:26:49ID:ls0AqeO1
     ,.;'‐、____,:-;';:、.
   /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ.
  /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ.
  /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ヽ.
  i;:;:;:;:;:/ノ-'-''"ヽ;:;:;ヽ'''-ヽ、;:;:;:;:;|
  {;:;:;:;:ノ■■■   ■■■ヽ;:;:;}
  ヽ;:;{    _   _    |;:;:{
   };:;|三/ ●),. 、(● ヽ三 |〈  
   ヽ| " ゙='"/:::ヾ='"゙  | }
   { |∫ ∴ (,.、::,. )  ∵ |/
    ゝ::●. ...:人:人:::.....  ...!
    {;;ヽ:.:.:.:.:.:.:.<Ξ>:.::.:.:.:.:.:.:/;}
   / ヽ:.:.:.:.::.:.:.:.:.:.:.:.:.:.:/ \
 /    |ヽ:.:.:.:.:.:.:.:.:.:/|    \
       ヽ ̄ ̄ ̄  /
        ヽ___/
0006名無しさん@お腹いっぱい。垢版04/12/04 02:20:04ID:gDFSp/I2
MAXSCRIPTの書籍関係やネット上の有益な情報って極端に少ないですよね。。
0007名無しさん@お腹いっぱい。垢版04/12/04 10:27:18ID:gDFSp/I2
0
0008通りすがり垢版04/12/04 12:35:23ID:MBIDzuKz
スレタイにPart1とつけると、糞スレとみなされる。
あと、>>1に質問書いたのはまずかったな。
その質問解決してもスレは続くんだし。
0010名無しさん@お腹いっぱい。垢版04/12/04 15:16:14ID:5lu9hJHF
え?
0011名無しさん@お腹いっぱい。垢版04/12/04 15:59:32ID:xp4s4xTY
>>1
テクスチャに解像度ごとにPrefixとか付けてやるとかなら意外と簡単に出来るんでネノ?
指定したオブジェクトのディフューズなりなんなりのテクスチャのファイル名引っ張ってきて
パスとファイル名と拡張子に分解して、末尾のPrefixを指定した文字列に差し替えて
戻してやるって感じで。

タブンめんどっちぃのは、マテリアルの種類によって対応換えるところじゃねカナ?
標準マテリアルのみ対応でマルチサブオブジェクト対応不可とかで汎用性皆無なら
簡単なんで、まぁ、がんばれ。

つか1に質問とか書くと、自分が聞きたいが為にスレ立てした風に見られるから
荒れるし、まともな回答が付きにくいぞ。
0012名無しさん@お腹いっぱい。垢版04/12/04 16:16:32ID:SRw9ENoT
       /⌒``――  
     /   \       ヽ
     /    /~ ̄ ̄ ̄\ ヽ
     /   /  ^    ^ ヽ`、    
     |   ノ  (◎) (○)| |   
     . | {   ?  ⊃! | |
 .    ノ   |     __   | |   
    ノ ノ 人\   _  ノレノ   
       /⌒|   − /    | | i i
     / イ       )  / / / /
   / /|      /  / ////   
   |  |  |    /  彡///人从从 
   |  |  〉   /  三彡//人 /三ミミ、y;)ヽ
   /  |  (   /  三彡/  人/三 ミミ、ソノノ、ヾ、}  
  巛cノ_ |\/  三彡   Σ  ,':,' __  `´ __ `Y:}   
     |  ̄巛クノ   \ Σ    }::! { : :`、 ,´: : j !:!
     ヽ/i    |\   \   {:|‐=・=‐ i !‐=・=‐|:}  
                   r(   / しヘ、  )j ←>>11
                   g !  ` !-=‐!´ ,ノg
                     \._ヽ _´_ノ ソ  
                   __,/ ヽー ,/\___
                   |.:::::.《  ヽー/  》.::.〈
                  //.:::.`\      /'.:::.ヽ\ 
0013名無しさん@お腹いっぱい。垢版04/12/04 23:31:58ID:5lu9hJHF
11>簡単ですか?
001411垢版04/12/05 02:31:10ID:5R2Op1Iu
標準マテリアル限定とか汎用性無視するんなら結構簡単でそ。

$.material.diffusemap.filename
で単純に今選択されてるオブジェクトのディフーズマップが取得できるし
文字列代入すれば簡単にファイル名も変えられる。

getfilnenamepathとかgetfilenametypeとかでパス・ファイル名・拡張子に分解できるから
ファイル名の.countみてsubstringで先頭のprefix抜いて、新しいprefix付けて
またdiffusemap.filenameに入れなおしてやるだけだべ。

実際のスクリプト部分は数行だと思う。
無論その他もろもろのお約束事をかかないかんけど、それでも1画面に収まるぐらいの量でしょ。

めんどくさいのは他人が使うことや汎用性考えて、マテリアルの種類によって変わる
マップの種類とかにも対応させるとか、複数オブジェクト一度に出来るようにするとか、
マップがBitmap以外の時(マップが無いとかグラデとかブレンドとか)の対応とかその辺。
001513垢版04/12/05 04:37:38ID:zaK4WujC
簡単そうにみえて、難しそうですね。
まだまだ勉強が足りません。
標準のマニュアルって、なんであんなにわかりづらいんでしょうね。
CGIやJAVASCRIPTみたいな感じで、
MAXSCRUOTポケットリファレンスなんていうのあると、助かりますねぇ。
001611垢版04/12/05 18:00:49ID:5R2Op1Iu
オンラインヘルプで検索かけながら、リスナーで1行ずつ実行して試しながらやれば、
意外と簡単だと思うよ。
あと、わかんないプロパティーとかは、showpropertiesとかで探しながらやるのも手だと思う。

例えば上のdiffusemapはどこを書き換えればいいか調べる時は
なんかダミーに標準マテリアルとテクスチャ設定しておいて、それを選択した状態で
リスナーから
showproperties $.material
と打てばズラズラっと割り当てられてるマテリアルでアクセス可能なプロパティー名が
出てくる。
んで、その中でdiffusemapっていういかにものがあるので、更に
showproperties $.material.diffusemap
って打てばズラズラ出てくるリストの中に目的のfilenameってプロパティーが見つかる筈。
で、リスナーから
$.material.diffusemap.filenameと打てばファイル名が表示されるんで、ココに入ってるのが判る。
今度はリスナーから
$.material.diffusemap.filename = "foo.tga"
とか打てば、そのオブジェクトのdiffusemapが挿し変わってるのが、確認できると思う。

$ : 現在選択しているオブジェクト
showproperties : オブジェクトのプロパティーを表示
あとは簡単な算術計算の書き方とforとifが判れば、取り合えずちょっとしたスクリプトを組むことが出来ると思う。

最初の内はボタン化とかロールアウトがとか考えないで、リスナーで試しながら
新規スクリプトウィンドウに1行ずつコピペしていって、CTRL+Eで複数行一気に実行とか
そんな感じでいいと思う。
001713垢版04/12/06 00:04:01ID:eTYSwyTG
アドバイスありがとうございます。
文系のあたしには、少し難しそうです。
でも、がんばってみますね。
11さんは、すごいですね。

001813垢版04/12/06 15:06:06ID:99OwW6ZO
マニュアルとにらめっこしながら、
とりあえず、以下のようなスクリプトが
完成しました。
さらなる向上を目指したいと思います。


fn genPrim pCol =
(
print pCol


--//------------------------------------------------------------
if(pCol==1)then(
$.material.diffusemap.filename = "c:/aaa.jpg"
)else if(pCol==2)then(
0019つづき垢版04/12/06 15:06:39ID:99OwW6ZO
$.material.diffusemap.filename = "c:/bbb.jpeg"
)
)


myRollFloater = newrolloutfloater "Resolution" 250 250 150 200
Rollout rlo_genPrim "main"
(
radiobuttons rdi_col "Resolution Option" labels:#("1","2") columns:2 pos:[10,50]
button btn_genPrim "Generate" width:200 height:80 pos:[10,100]

on btn_genPrim pressed do
(
genPrim (rdi_col.state)
)
)
addRollout rlo_genPrim myRollFloater rolledUp:false
002013垢版04/12/06 15:56:22ID:99OwW6ZO
このスクリプトの欠点は、オブジェクトを選択していない
場合に、エラー処理がありません。

また、膨大な量のマップが張られている場合に、
すべてのパスをスクリプトに記述してあげなければなりません。

そして、他のオブジェクトに使用した場合に汎用性がありません。
読みにいっているマップのパスをまるごと変更することはできないでしょうか?

002111垢版04/12/06 18:29:26ID:JP7jZLhp
まぁ、エラー処理は自分だけが使うんなら、取り合えず無視しちゃってもよいでしょ。
真面目にエラー処理するとなると、オブジェクトが選択してない場合以外にも
複数オブジェクト選択されてる場合とか、標準マテリアルが割り当てられてない場合とか
テクスチャが割り当てられてない場合とか等々、それだけでかなりの処理になるんで。

取り合えずテクスチャのファイル名はスクリプトに直接埋め込むんでなく
radiobuttonsの下にedittextを足して、スクリプトの実行時に入力出来るように
するのがいいと思うよ。

あと、テクスチャのファイル名に一定の法則性を付けないと、自動化出来ないんで
その辺の仕様も固めないといかんと思う。

例えば
解像度4文字+マップ種別4文字+オブジェクト名とか。
building01ってオブジェクトに256x256と512x512のdiffusemapを用意してるとしたら
256_dif_building01.tga
512_dif_building01.tga
とか。
そうすれば、解像度とマップ種別をradiobuttonとかdropdownlistで選択して
ファイル名の文字列を自動でくみ上げていけるように出来るんで、
あとはパスの指定をしとくだけで済むし。
002213垢版04/12/06 18:35:58ID:99OwW6ZO
とりあえず、複数選択時に対応するために、
以下のように、for文というのを用いてみました。

on btn_genPrim pressed do
(
if selection.count !=0 then
for i in selection do i.genPrim (rdi_col.state)
)
)

でもなんかエラーみたいです。なにがおかしいのかな。
リスナーって、エラーって教えてくれるけど、
具体性にかけますよね。

パスの変更処理は、スクリプト的には難易度高いですか?
002311垢版04/12/06 19:01:32ID:JP7jZLhp
ん?
これだと未知のプロパティとかエラーが出ない?

取り合えず上のgenPrimが選択オブジェクトの$を使ったままなら、そこも変えなきゃ。

fn genPrim mobj pCol =
とかして、オブジェクトも渡してやって
$をmobjに変えて、呼び出し側で
for i in selection do genPrim i rdi_col.state
と、オブジェクトも一緒に渡してやるとか。

パスの変更処理って、ファイル名そのままで、パスのみ変更とか?
取り合えずgetfilenamepathでパスのみ切り出せるし、getfilenamefileでファイル名、
getfilenametypeで拡張子のも切り出せるんで、それでバラバラにした後
単純に新しいパスの文字列変数と+でつないでやれば行けると思う。
getsavepathとか使えば、フォルダ選択ダイアログ出して選べるし。
002413垢版04/12/06 19:12:58ID:99OwW6ZO
できました。なるほどですね。んー奥が深いですね。
パスの変更は、そんなに難易度は高くないんですね。
知らない関数がたくさんありますね。
とりあえず、マニュアルみてみます。記述方法から、勉強しないとですね。

+でつなぐ?って、どういうことなんでしょうか。
002511垢版04/12/06 19:49:29ID:JP7jZLhp
str1 = "C:\temp\"
str2 = "foo.tga"
str3 = str1 + str2

とやればstr3は"C:\temp\foo.tga"となるという、文字列の演算のことです。


002613垢版04/12/06 19:57:42ID:99OwW6ZO
そういうことなんですね。

例えば、今、このノードのテクスチャを差しかえるようにしているのですが
mobj.material.map1.diffuseMap.src_tex.map1.fileName = ~パス/ファイル名

上記の説明ですと、このノードに対しての変更は、きくと思うのですが、
そこにパスがとおってある全てのテクスチャを同時変更したいと思うときに、
前スレッドで書いたように、すべてのパスを記述してあげないといけません。
(デフューズ、スペキュラ、バンプ、セルフイルミーネーションなど)
また、他オブジェクトには、別のマップを張り替えたいとおもったときに、
そのオブジェクト専用に、またスクリプトをかかなければなりません。
(テクスチャの変更記述)
そこで、マップはすべて同じフォルダにまとめてあるので、
解像度別にパスの変更が実現すれば、汎用性のあるスクリプトになるかなぁ?
と思ったのです。 難しいですね。。
002713垢版04/12/06 20:00:10ID:99OwW6ZO
そういうことなんですね。

例えば、今、このノードのテクスチャを差しかえるようにしているのですが
mobj.material.map1.diffuseMap.src_tex.map1.fileName = ~パス/ファイル名

上記の説明ですと、このノードに対しての変更は、きくと思うのですが、
そこにパスがとおってある全てのテクスチャを同時変更したいと思うときに、
前スレッドで書いたように、すべてのパスを記述してあげないといけません。
(デフューズ、スペキュラ、バンプ、セルフイルミーネーションなど)
また、他オブジェクトには、別のマップを張り替えたいとおもったときに、
そのオブジェクト専用に、またスクリプトをかかなければなりません。
(テクスチャの変更記述、ノードの変更など)
そこで、マップはすべて同じフォルダにまとめてあるので、
解像度別にパスの変更が実現すれば、汎用性のあるスクリプトになるかなぁ?
と思ったのです。 難しいですね。。
002813垢版04/12/06 20:00:21ID:99OwW6ZO
あと、オブジェクトによって、シェーダの設定など
かなり違うので、mobj.material.map1.diffuseMap.src_tex.map1.fileName
←ノードの変更を一つ一つ設定してあげないといけませんよねぇ。。
002911垢版04/12/06 20:50:38ID:JP7jZLhp
ん〜、ちょっと良くわからないけど、もしかして解像度別に
別フォルダに同一のファイル名で入ってるビットマップの内どれかを参照していて
スクリプトでファイル名はそのままでパスのみを差し替えたいって事なのかな?
単純に指定した2Dテクスチャのビットマップのパスやファイル名を差し替えるのは簡単だと思うケド、
上の方でも書いてるけど、汎用性持たせるとなると、とたんにめんどくさくなるよ。

Maxはプラグインでマテリアルの種類とかも増やせるんで、入ってるプラグインによって
プロパティも変わるんで、標準マテリアルのみとか限定しないと、ちょっと大変。
あと、マップ種別はmaterial.diffusemapって参照の仕方以外にも
material.maps[i]っていう風に配列で参照も可能なんで、その方が簡単に別のマップ種別に
対応が可能だとは思うよ。
たしか標準マテリアルの場合はmaps[2]がdiffusemapと同一なはず。
それでも、マルチサブオブジェクトとかブレンドとか使われてるとどうしようもないですしね。

****.classIDでそのオブジェクトがマテリアルかジオメトリかとか、マテリアルなら
どんなマテリアルかとか一応判断はつきますので
ClassIDを見て、対応するプロパティーを換える事は出来ると思うケド
Maxに標準で入ってるマテリアルに対応するだけでも結構面倒なことになると思う。

シーン中のオブジェクトやライトはobjectsやlightsとかで配列で簡単に参照できるんで
イメージも何か一発で配列で参照出来れば簡単にいくと思うんですけどねぇ。

003011垢版04/12/06 20:54:02ID:JP7jZLhp
ん〜、ちょっと良くわからないけど、もしかして解像度別に
別フォルダに同一のファイル名で入ってるビットマップの内どれかを参照していて
スクリプトでファイル名はそのままでパスのみを差し替えたいって事なのかな?
単純に指定した2Dテクスチャのビットマップのパスやファイル名を差し替えるのは簡単だと思うケド、
上の方でも書いてるけど、汎用性持たせるとなると、とたんにめんどくさくなるよ。

Maxはプラグインでマテリアルの種類とかも増やせるんで、入ってるプラグインによって
プロパティも変わるんで、標準マテリアルのみとか限定しないと、ちょっと大変。
あと、マップ種別はmaterial.diffusemapって参照の仕方以外にも
material.maps[i]っていう風に配列で参照も可能なんで、その方が簡単に別のマップ種別に
対応が可能だとは思うよ。
たしか標準マテリアルの場合はmaps[2]がdiffusemapと同一なはず。
それでも、マルチサブオブジェクトとかブレンドとか使われてるとどうしようもないですしね。

****.classIDでそのオブジェクトがマテリアルかジオメトリかとか、マテリアルなら
どんなマテリアルかとか一応判断はつきますので
ClassIDを見て、対応するプロパティーを換える事は出来ると思うケド
Maxに標準で入ってるマテリアルに対応するだけでも結構面倒なことになると思う。

シーン中のオブジェクトやライトはobjectsやlightsとかで配列で簡単に参照できるんで
イメージも何か一発で配列で参照出来れば簡単にいくと思うんですけどねぇ。

パスが違ってもファイル名が同一なら
マップの入ってるフォルダリネームして外部参照パスの設定を変えて
Max立ち上げなおすとかが一番手っ取りばやかったりして。
003111垢版04/12/06 20:56:30ID:JP7jZLhp
あれ、書き込み失敗したと思ったら、2度書きになってら。スマン。
003213垢版04/12/06 20:59:51ID:99OwW6ZO
スクリプトでファイル名はそのままでパスのみを差し替えたいって事なのかな?>
ずばりそのとおりなんですよね。やはり難しいですか。
んー。こまリました。 
今回に限っては、ほとんどのマテリアルは、ブレンドで設定してますね。

配列という考え方ですか。ん。なかなか前途多難です。
もう少し、つっこんで考えてみたいと思います。

http://www.maxuser.com/cgi-bin/forum/thread.php?threadid=1219&sid=&hilight=テクスチャ&hilightuser=0

この辺と、似たようなことなのかなぁ。。

003313垢版04/12/06 21:01:53ID:99OwW6ZO
スクリプトでファイル名はそのままでパスのみを差し替えたいって事なのかな?>
ずばりそのとおりなんですよね。やはり難しいですか。
んー。こまリました。 
今回に限っては、ほとんどのマテリアルは、ブレンドで設定してますね。

配列という考え方ですか。ん。なかなか前途多難です。
もう少し、つっこんで考えてみたいと思います。

http://www.maxuser.com/cgi-bin/forum/thread.php?threadid=1219&sid=&hilight=テクスチャ&hilightuser=0

この辺と、似たようなことなのかなぁ。。

003413垢版04/12/06 21:05:45ID:99OwW6ZO
ワイルドカード*とかつかって、うまくできないかなぁ。。

003513垢版04/12/06 21:15:01ID:99OwW6ZO
別手段として、
イメージなんですが、(できるかどうかはわからない。)
選択しているマテリアル以下に設定してあるすべてのマップファイル(jpg)
を、別フォルダに置いてある(ファイル名同じ)に変更するといった感じで
できるようなきがするんですよね。
甘いかな?


マップの入ってるフォルダリネームして外部参照パスの設定を変えて>
たしかにそれもアリなんですが、スクリプトで変更するカッコヨサ的な
ところを目指してたりします。笑
003613垢版04/12/06 21:50:58ID:99OwW6ZO
usedMaps() マニュアルで調べてみたところ、
この関数は、オブジェクトに割り当てられているbitmapファイルの
一覧を返すみたいです。
これは、表示されるだけで、割り当てなどをできないのでしょうか?
003711垢版04/12/06 23:01:02ID:JP7jZLhp
usedmapsは参照のみですねぇ....
単純にファイル名の文字列でなくて、ポインタというかビットマップテクスチャ自体でも
返してくれるのならやり様もあるんですけどねぇ。
003813垢版04/12/06 23:20:34ID:99OwW6ZO
大変お世話になってます。
11さん。勉強になってます。

先ほどの11さんの方法ですが、
以下。

>解像度4文字+マップ種別4文字+オブジェクト名とか。
>building01ってオブジェクトに256x256と512x512のdiffusemapを用意してるとしたら
>256_dif_building01.tga
>512_dif_building01.tga
>とか。
>そうすれば、解像度とマップ種別をradiobuttonとかdropdownlistで選択して
>ファイル名の文字列を自動でくみ上げていけるように出来るんで、

上記の場合は、マテリアル以下に割り当てされているMAPは、
自動で変更されていくのでしょうか? ちょっと、イメージがわかないんですが。
具体的には、どのようなインターフェースになっているのでしょうか?


---
スクリプトに没頭しすぎて、お料理焦げました。笑


003911垢版04/12/07 00:02:21ID:L6SrA20B
あぁ、それも基本的には標準マテリアルとかでの話で、ファイル名自体をスクリプトに
埋め込んでいたようなので、法則性にしたがってファイル名が決まっているようなら、
スクリプト側でファイル名を生成して差し替えるというか割り当てることが出来るなぁというそういう話です。

マテリアルやテクスチャが階層化してる場合とかは、やっぱりどうしようもないです。

タブン真面目にclassIDみてマテリアルやビットマップの種類を見て
更に下の階層がある場合は再帰処理でドンドンもぐっていって処理するしかないのかなぁと。
0040名無しさん@お腹いっぱい。垢版04/12/07 08:59:43ID:2oHVo7m4
ぬぉ、こんなスレが立ってたとは!!

とりあえずパスのサーチは>>11の書いてるようにSubAnim経由で再帰を使ってやるといいです。

(
local serchmat
fn serchmat s = (
local flags = #()
for i = 1 to s.numsubs do (
try if classof s[i] == SubAnim and classof s[i].object == Bitmaptexture do append flags i
catch()
if (existmap = (serchmat s[i])).count != 0 do (
--format "%\n" s.object
local mnode = try(if classof (s[i].object) == TexmapsUnknown then s.object else s[i].object)catch(s)
format "mnode:%\n" (classof mnode)
for ti in existmap do (
/*
ここにマップタイプごとの分岐処理を書くとよい
ext)
case classof mnode of (
(Standardmaterial) : format "mnode=%\n" "Standard"
(CompositeTexturemap) : format "mnode=%\n" "Composite"
)
*/
004140垢版04/12/07 09:00:07ID:2oHVo7m4
if classof (s[i].object) == TexmapsUnknown then
format "\t%[%]:%\n" mnode ti mnode[i][ti].filename--mnodeを定義した際の階層分戻してやる
else
format "\t%[%]:%\n" mnode ti mnode[ti].object.filename
)
)
)
flags
)
serchmat meditmaterials[activemeditslot]
)
004240垢版04/12/07 09:04:53ID:2oHVo7m4
ぐはっ・・・インデントが取れた!

マテリアルのクラス判別をするために一旦テクスチャパスの階層まで読んで
巻き戻るって感じの処理をやってます。

mnode(map node)を定義する辺りがちょっと怪しいかも・・・
動かなかったらスルーしてください(;´Д`)
004311垢版04/12/07 14:21:55ID:7iR+1VxZ
うわぁ〜。なんかいきなり難易度が高くなったかんじですね。
つまるところ、40さんの方法で、パスのサーチ機能を組み込むことによって、
パス名のみ変更して、ビットマップテクスチャの差し替え可能になるということ
なんですね。 プログラム上、前述のスクリプトと、どこをどう繋いでいけばいいか、ちんぷんかんぷんです。

マップタイプごとの分岐処理?←これは、ブレンドやら、マットシャドウなんかの
タイプの違いによる処理ってことですか?13さんが書いているようにタイプの違いが
複数あるので、かなり面倒になってくるといってたアレでしょうか?

mnodeを定義した際の階層分戻してやる←言葉の意味が、難しくて、私の頭では理解できてません。
アドバイスお願い致します。
004540垢版04/12/07 20:06:26ID:Kklazi4n
>>43(>>11)説明した方がいいですか?
なんか既にハルシノで解決してるっぽいんですけど・・・orz

ところで>>13>>1は同一人物?

004613垢版04/12/07 21:40:07ID:7iR+1VxZ
ハルシノさんの人は、私じゃないですよ??
004740垢版04/12/07 21:53:08ID:Kklazi4n
>>46
そうでしたか。スマソ
004813垢版04/12/07 22:14:17ID:7iR+1VxZ
40さん考えている構造は、ハルシノさんに書いている内容と基本的なところは
同じなんでしょうか? 勉強のためにお聞かせください。
0049名無しさん@お腹いっぱい。垢版04/12/07 22:28:39ID:yEHtXvJk
なんでモモにもpostしてんの?
005140垢版04/12/08 07:20:05ID:5e3nYkRl
>>50
俺もそう思うw

ちなみにハルシノで書かれてた処理を↑で書いたやつに取り入れるとこんな感じになります。
(
local serchmat
fn serchmat s ps = (
for i = 1 to s.numsubs do (
if isProperty s[i] #filename do (
local fp = getProperty s[i] #filename --ファイルパス
local p = if classof s.object == TexmapsUnknown then ps.object else s.object
format "%\n\t%\n" (classof p) fp
)
if s.numsubs > 0 do serchmat s[i] s
)
)
for i = 1 to meditmaterials[activemeditslot].numsubs do
serchmat meditmaterials[activemeditslot][i] meditmaterials[activemeditslot]
)
すげー短くなったな・・・orz
変数pはテクスチャを保持しているノードになります。(ディフューズマップとか、ブレンドのマップ1とかね)
今回もファイルパスの置換処理やらは簡単なので端折ってます。エラー処理も同様に。

>>48
再帰的に処理するって意味では大体似たようなもんだと思う。(解答としては向こうの方が遥かに丁寧ですが)
向こうのはマップタイプの判定処理が入ってないけど、多分入れてないだけだと思うし。
考え方自体は変わんないってことで。
0052名無しさん@お腹いっぱい。垢版04/12/08 09:49:15ID:WobGaAPf
なんでモモにもpostしてんの?
0053名無しさん@お腹いっぱい。垢版04/12/08 09:53:40ID:jj+9pzF4
ていうか、ハルシノに書いてあるキャッシュの保存とか、できんのか?
できそうにないとおもうんだが。
0054名無しさん@お腹いっぱい。垢版04/12/08 11:05:04ID:yRfn5+E+
>>51
ハルシノのみればわかるけど、.filenameプロパティをもったものを再帰的にさがしているので、マップの判定処理がいらない。
マルチサブだろうとブレンドだろうとうまくいく。
もっとも質問した>>1みたいにいびつなマルチサブの使い方されるとエラーでるから、tryで例外処理かけたみたいだけど(w

>>53
キャッシュって履歴のこと?
それってマップ張り替える部分とはまったく関係ないからiniにでも書き出すなり好きにしろ、って書いてあるけど。
0055名無しさん@お腹いっぱい。垢版04/12/08 11:35:54ID:unI4NWNV
再帰的にマップのパスを取得するだけならこれでいい

fn serchmat s =
(
Try
(
for i = 1 to s.numsubs do
(
if isProperty s[i] #filename do
(
fp = getProperty s[i] #filename --ファイルパス
format "%\n" fp
)
if s.numsubs > 0 do serchmat s[i]
)
)
catch()
)

serchmat meditmaterials[activemeditslot]

>>51
悪くはないけど助長すぎる。
005640垢版04/12/08 11:54:58ID:5e3nYkRl
ん?俺が勘違いしてるのかな?

マップの判定ってのは例えばディフューズマップのパスは置換したいけど、
バンプマップは置換したくない場合とかに必要なんじゃないかなと思ってさ。
まぁ、そういう状況があるかないかは分かんないけどね。
問答無用でテクスチャのパスを書き換えるってんなら>>55のでもいいと思うけど。

説明下手でスマン。

>>53
あれは割と簡単。
でも>>1に出来るかどうかは誰にも分からない。
0057名無しさん@お腹いっぱい。垢版04/12/08 12:39:03ID:unI4NWNV
>>56
ああ、なるほど。
つうか、そこまでなるとxmlでマテリアル構造書き出して置換、読み込みしたほうがよさげ。

それと別にあんたの説明は下手ではないとおもうぞ。
0058名無しさん@お腹いっぱい。垢版04/12/08 12:49:24ID:unI4NWNV
汎用性もたせるようにするとcase文の荒になって可読性低くなるから、
汎用性殺して単純に変換したくないマップタイプを配列にいれといて、関数の引数に渡してやればよさそう。
配列は手動で必要に応じて書き換えとかで。
変なUIつけるより、現実的に。
0059名無しさん@お腹いっぱい。垢版04/12/08 14:20:59ID:lHHrycve
>
キャッシュって履歴のこと?
それってマップ張り替える部分とはまったく関係ないからiniにでも書き出すなり好きにしろ、って書いてあるけど。
>


え? できるのそれって? 具体的には?
0060名無しさん@お腹いっぱい。垢版04/12/08 16:20:45ID:unI4NWNV
>>59
具体的もなにも、ファイル作ってgetINISettingやsetINISettingで読み書きすりゃいいだけじゃん。
まさかScriptでのI/O操作がわからんってレベルでいってんじゃないよね?
0061名無しさん@お腹いっぱい。垢版04/12/08 17:26:45ID:lHHrycve
へー
0062名無しさん@お腹いっぱい。垢版04/12/08 23:14:15ID:lHHrycve
ドロップリストで選択できるのかってことなんじゃない?
入出力できるだけってことじゃなく。
0063名無しさん@お腹いっぱい。垢版04/12/08 23:57:37ID:Aax9qEPh
>>62
ドロップリストの初期化時にリストの配列をiniなりから読み込ませるだけだから簡単にできるけど。。
つうかscript書いたことのない人のあつまりか、ここ??
わかんねぇなら素直にハルシノで聞けよw
0064名無しさん@お腹いっぱい。垢版04/12/09 03:34:39ID:RvJenXrJ
取り合えず俺は今回Tryを知ったのとプロパティ名でなく配列でアクセスできるって言う収穫があったので、とても収穫。

0066名無しさん@お腹いっぱい。垢版04/12/09 14:18:13ID:2xCzFsOS
わかりません。サンプルお願いします。>63
006813垢版04/12/11 09:49:36ID:Sw2/Uz1I
ドロップリストで選択?
006969垢版04/12/11 23:35:51ID:Sw2/Uz1I
heapSize += 300000000
global batchRenderFloater

rollout BRobot_batchRender "Batch Render" width:600 height:103
(

edittext browse_max_label "max file directory: " pos:[6,7] width:537 height:17 fieldwidth:158
button browse_max "Browse" pos:[549,5] width:51 height:21 across:2
edittext browse_output_label "output directory: " pos:[6,31] width:537 height:17 fieldwidth:158
button browse_output "Browse" pos:[550,30] width:51 height:21 across:2
button go_button "Go!" pos:[240,63] width:126 height:32
on browse_max pressed do
(
max_dir = getSavePath()
browse_max_label.text = (max_dir as string)
)
on browse_output pressed do
(
output_dir = getSavePath()
browse_output_label.text = (output_dir as string)
)
007069垢版04/12/11 23:36:39ID:Sw2/Uz1I
on go_button pressed do
(
CloseRolloutFloater batchRenderFloater
maxfiles = getFiles (browse_max_label.text + "\\*.max")
outputpath = (browse_output_label.text + "\\")

for i in 1 to maxfiles.count
do
(
loadMaxFile maxfiles[i]
filename = (getFileNameFile maxfiles[i] +".tif")
myoutput = (outputpath + filename)
myanim = render camera:$Camera01 outputSize:[320,240] pixelascept:1.3 fromframe:AnimationRange.start toframe:AnimationRange.end outputfile:myoutput
undisplay myanim
saveMaxFile maxfiles[i]
)
messagebox "Batch Render Completed!"
)
)
007169垢版04/12/11 23:46:51ID:Sw2/Uz1I
はじめまして。69です。

上のスクリプトは、全自動レンダリングスクリプトです。
以下の項目で、改善したいと思ってます。
お力をお貸しください。

●レンダリングを途中で止めたい。(GUI付)
●レンダリングするフレームを決めたい。(GUI付)
●レンダリングする解像度を選択したい(GUI付)
●どんなカメラが設定しても、レンダリングをかかるようにしたい
(今は、Camera01という名前がついていないとエラー)
●アウトするファイルネームを変更したい。(今は、ファイル名で決定)
●例えば、Bipdデータがあったとして、自動で、ルート(bip_Root)を選択し
ある一定角度間隔(1フレームごと)で、回ってレンダリングして、画像に落とす
というようなルーティング工程をスクリプトのなかに埋め込みたい(これは、GUIレベルでなくてもイイと思います。)

というような塩梅なのですが、なかなか難しくて、先に勧めません。
どのようにプログラムを組み立てていけばよろしいでしょうか?
よろしくお願いします。
0072名無しさん@お腹いっぱい。垢版04/12/12 01:03:19ID:VYFvTGes
おす
0073名無しさん@お腹いっぱい。垢版04/12/12 13:37:58ID:VYFvTGes
ほむ
0074名無しさん@お腹いっぱい。垢版04/12/12 23:35:36ID:ZHVGWivj
パレットのオン/オフってスクリプトで出来ますか?
Mキー押して出てくるマテリアルパレットを、
もう一回、Mキー押したら消せないかと思って...
0075名無しさん@お腹いっぱい。垢版04/12/13 01:21:45ID:mxnBYmZX
それ私もほしいです!>74
007640垢版04/12/13 06:07:02ID:+Itm+BbJ
>>74
max7から標準で出来るみたい。
6以下は無理。外部アプリ併用すれば出来なくもないらしい。
ハルシノで検索すれば出てくるよ。
007740垢版04/12/13 06:12:15ID:+Itm+BbJ
>>69
もう解決しちゃったかな?

●レンダリングを途中で止めたい。(GUI付)
どゆこと?スクリプトからレンダリング止めたいってこと?
だとしたらちょっと分かんない。ESCキー押して止めるってのじゃ駄目?
中止されたかどうかはrender()のcancelledオプションで取れるから。(リファレンス参照)

●レンダリングするフレームを決めたい。(GUI付)
スピナコントロールを配置してやってその値をそのまま使う。
spinner spn_from "from" range:[0,100,0]
spinner spn_to "to" range:[0,100,0]
render fromframe:spn_from.value toframe:spn_to.value
max5以降ならスピナの値をFloatにしとけばサブフレームも考慮される(らしい)。

●レンダリングする解像度を選択したい(GUI付)
上記と同じ要領でスピナを配置してその値を使用、
又はdropdownlistにプリセット(String)を登録しといてpoint2値に変換して使う。後者の方が便利かな。
dropdownlist ddl_outsize"Size" items:#("320x240","640x48","800x600")
とコントロールを定義して
local arr = filterString ddl_outsize.items[ddl_outsize.selection] "x"
render outputSize:(point2 (arr[1] as number) (arr[2] as number))
こんな感じ。

●どんなカメラが設定しても、レンダリングをかかるようにしたい
仕様による。
カメラがシーン内に一つしかないとかなら
render camera:cameras[1]--camerasはObjectSet値ね
でいいと思うけど。
007840垢版04/12/13 06:18:58ID:+Itm+BbJ
続き・・・

●アウトするファイルネームを変更したい。(今は、ファイル名で決定)
edittextコントロール配置してそこに入力した値を反映させるといいのでわ。
edittext edt_filename "filename"
filename = (edt_filename.text + ".tif")

●例えば、Bipdデータがあったとして、自動で、ルート(bip_Root)を選択し(ry
for n in objects where classof n == Biped_Object or (n.parent != undefined and classof n.parent == Biped_Object) do (
local bipRoot = n.controller.rootNode
if bipRoot != undefined do (
local bipPos = bipRoot.controller.vertical.value.translationpart
--↑か↓、どっちでもいけるっぽい。
--local bipPos = bipRoot.controller.horizontal.value.translationpart
local pH = point pos:bipPos
bipRoot.parent = pH
pH.rotation.controller = Euler_XYZ()
animationRange = interval 0 36
with animate on
for i = 1 to 4 do
at time (9 * i) pH.rotation.z_rotation += 90
pH.rotation.z_rotation.controller.keys[1].outTangentType = #linear --スムースに回転して欲しいので
pH.rotation.z_rotation.controller.keys[5].inTangentType = #linear
)
exit
)
最初に見つかったbipedオブジェクトの親にヘルパーを指定して
ヘルパーに対して回転アニメーション付けてます。
bipedの位置取得とかちょっと自信無さげですが、一応動いてるのでこれでいいのかも。
肝であるbipedの取得と位置の特定さえ出来れば、あとはターゲットカメラ作って
それをアニメーションさせてもいいし、なんなりと応用利かせてやってください。
007940垢版04/12/13 06:21:30ID:+Itm+BbJ
訂正
bipedオブジェクトの親にヘルパーを指定

bipedオブジェクトのルート(COM)の親にヘルパーを指定
0080名無しさん@お腹いっぱい。垢版04/12/13 09:59:16ID:UxDEQOI5
0081名無しさん@お腹いっぱい。垢版04/12/13 10:03:37ID:UxDEQOI5
それを69のスクリプトと組み合わせるとどうなるわけ?
008240垢版04/12/13 10:08:31ID:+Itm+BbJ
どうなるの?>>69
0083名無しさん@お腹いっぱい。垢版04/12/13 11:57:40ID:UxDEQOI5
69には、理解できないと思う。
0085名無しさん@お腹いっぱい。垢版04/12/13 23:53:44ID:UxDEQOI5
008674垢版04/12/14 00:17:55ID:d58EmSMP
>>40
パレットの件、情報ありがとうございます。
7を待ちます。っつうか、こんなことやっとできるようになったMAXって...。
0087名無しさん@お腹いっぱい。垢版04/12/14 18:52:27ID:nPZpeO3J
>>40
がんがって説明しても理解できてないとおもうよ。
つうか、その程度のUIすら自分で組めないならもうだめぽ。。
単純にここは自分で欲しい機能を誰かが作ってくれることを願う、しょっぱいスレだからなw
008840垢版04/12/14 19:51:50ID:K0JTT0jK
>>87
初歩的だから答えてんの!!
難しい質問きたら俺は逃げるから。
0089名無しさん@お腹いっぱい。垢版04/12/14 21:38:47ID:ZdeW0Vcl
初歩的なんですか?
009040垢版04/12/14 22:44:19ID:OtRtkCrg
>>89
言葉の綾です。
別に線引きをするつもりはないですよ。
009169垢版04/12/15 00:07:21ID:tG2RJyjg
いろいろ辞書を調べて、試行錯誤してみましたが、
僕の今の知識では、40さんの回答頂いた内容をスクリプトに反映させることが
できなさそうです。もうすこしヒントを頂けないでしょうか?
009240垢版04/12/15 05:53:18ID:T3D31FAl
>>91
(´・ω・`)

具体的にどの辺がどういう風に分からない?
出すもん出さないと答えは返ってこないよ。
0093名無しさん@お腹いっぱい。垢版04/12/15 14:13:13ID:ORRRLmau
>>91
辞書で調べても無意味。リファレンスみれ。

というか、初心者は最低でもさとうさんのスクリプト講座全部に目を通せよ。
どんなに>>40が解答しようが、その解答すらりかいできてないんだもの。
野球のルールを知らずに野球がうまくなりたいってれべる。
あれが理解(義務教育レベルで十分対応できる範囲)できないやつはScriptやらんほうがいい。
0094名無しさん@お腹いっぱい。垢版04/12/16 16:08:52ID:i1Ul180r
sa
0095名無しさん@お腹いっぱい。垢版04/12/16 23:35:04ID:w/9wxO44
さとうさんのスクリプト講座ってどこにあるんですか?
URL貼ってくれませんか?
009640垢版04/12/17 01:01:33ID:0654/xYU
>>95
HALLUCINOフォーラムの「スクリプト講座をchmに」っていうスレッドにchm版がアップされてます。
ダウンロードには登録が必要ですのでURLは貼りません。
0097名無しさん@お腹いっぱい。垢版04/12/18 04:24:41ID:O/Kgcyuv
極論をいえば、ひとつひとつの意味は、なんとなく理解しているのかも
しれんが、アップしたスクリプトとのかかわりかた具合が、わからんのじゃない?
0098名無しさん@お腹いっぱい。垢版04/12/20 11:22:43ID:jxRJPalx
max5以降はリファレンスにチュートリアルもあるんで、それやれば理解が進む。
正直、scriptは自分で勉強する意思がないやつはやる必要なし。
0099名無しさん@お腹いっぱい。垢版04/12/21 00:46:03ID:tSLbRQpk
ipo
0100名無しさん@お腹いっぱい。垢版04/12/21 13:06:28ID:yMa6rVoM
MAXのスクリプトでシェーダーは書けないんでしょうか。
他のソフトのようにシェーダーツリーで色々カスタマイズしたいのですが。
0101名無しさん@お腹いっぱい。垢版04/12/21 15:12:45ID:mQCgdCDp
>>100
pluginScriptで書けなくはない。
以前はrenderman記述で書けるpluginScriptも存在した(もちろん対応している関数は少ない)
同じようなものでpluginのmaxShaderつうのもあった。
どちらも現在は開発は続いていない。maxでこんなこともできるかもってもんだった。実用性はあんまない。

ちなみに、シェーダーツリーはシェーダーを組むGUIであって、シェーダー自身を書くとかとは意味合いが違うだろ。
シェーダーをGUIで書けるツールだべ?
maxのマテリアルブラウザをスケマティック表示させたい、それをmaxScriptで作りたいってならboboさんとこですでにあるし、pluginでも存在してるよ。
ちなみに、boboさんのScriptは凄すぎ。ActiveXとかつかわないでmaxScriptでスケマティックを自前で描画してるw
0102名無しさん@お腹いっぱい。垢版04/12/22 22:46:54ID:BZc0vkhD
78>私の場合は、Bipedではなくて、シーンにカメラとライトを配置していて、そのカメラとライト両方を
  ヘルパーにリンクさせて、まわすのはどうすればいいでしょうか?
0103名無しさん@お腹いっぱい。垢版04/12/22 22:49:00ID:BZc0vkhD
ターゲットカメラとライトで、ターゲット固定(ターゲットを中心に)です。
010440垢版04/12/23 03:03:33ID:Cjant1mf
>>102

pH = undefined
for n in cameras where classof n == Targetobject do (
pH = point pos:n.pos
exit
)
/*もしターゲットの命名規則が決まってて一意の名前である場合は上のforループの代わりに
pH = point pos:$Camera01.Target.pos
みたいにしてやった方がいいかもしれない*/
if pH != undefined do (
pH.rotation.controller = Euler_XYZ()
cameras.parent = lights.parent = pH
animationRange = interval 0 36
with animate on
for i = 1 to 4 do
at time (9 * i) pH.rotation.z_rotation += 90
pH.rotation.z_rotation.controller.keys[1].outTangentType = #linear
pH.rotation.z_rotation.controller.keys[5].inTangentType = #linear
)

例によって最初に見つけた(カメラの)ターゲットオブジェクトの位置にポイントヘルパーを作成してます。
ターゲットの名前が決まってたらforループ消してコメント内のコードの$ほげ.posのほげ部分をその名前に書き換えればおk。
0105102垢版04/12/23 15:34:56ID:c7oiyKn/
作成されるヘルパーが、必ず原点にくるようにするにはどうすればよいでしょうか?
複数カメラがある場合に、どれかのカメラのターゲットをランダムに選択するため
ヘルパーの位置が、変化していまいます。
ご教授よろしくお願いします。
0106102垢版04/12/23 17:45:59ID:c7oiyKn/
上記に加えて、モーフモデファイヤが仕込んであり、
上から順番に、ターゲット1:0-100-0 ターゲット2:0-100-0 ...
で、キーを打ち込んでいき、レンダリングしていくという仕様を
考えてるんですが、モーファモディファイヤのノードの記述方法が、
いまいちうまくいかず苦戦しています。
初歩的なことかもしれませんが、何卒よろしくお願いします。



010740垢版04/12/23 19:15:42ID:06S7Eu8r
>>102
> 作成されるヘルパーが、必ず原点にくるようにするにはどうすればよいでしょうか?

ターゲット中心にって書いてたじゃん・・・
原点にヘルパー持ってくるだけなら
cameras.parent = lights.parent = pH
の上か下かに
pH.pos = [0,0,0]
を追加するだけ。
上に追加したらターゲット中心とは限らなくなるし
下に追加したら子オブジェクトごと移動するからね。

> モーファモディファイヤのノードの記述方法が、
> いまいちうまくいかず苦戦しています。

いまいちうまくいかずって・・・
もちっと具体的に書いてくれ。
0108102垢版04/12/23 22:26:37ID:c7oiyKn/
Morpher modifiersにフレーム数とチャンネルと値
を代入してキーを作成する方法がうまくいきません。

こんな感じで考えてるんですが。
以下。

$.modifiers[#Morpher][2].object
k = addNewKey $.modifiers[#Morpher][1].object
k.value = 0.8

チャンネル2のコントローラを取得して、
フレーム10に、0.8の値の入力という具合です。

これを前スレッドで書いたように、
例えば、最初の10フレームで、チャンネル2が100。次の10フレームで、チャンネル2
が0に戻り、チャンネル3が100になり、どんどん下のチャンネルまで下っていき、
各フレームでレンダリングしていくという感じです。

で、上記に合わせ、カメラとライトは、そのチャンネルが全て一順するまでは、
固定カメラで、一順終わると、カメラ、ライトが90度周り、
再び、上のチャンネルからキーが入っていき、レンダリングしていくという
工程を考えてます。

また複数カメラがある場合は、カメラ(Cam1、Cam2...カメラの名前はデフォルトの名前ではないです。)
ごとに、レンダリングをかけることはできるのでしょうか?
010969です!!垢版04/12/24 00:46:16ID:PELn8VFb
ファイル名の変更のところでつまづいています。


edittext edt_filename "Filename" pos:[6,155] width:300
height:17

---以下略。

実行部分。
filename = (edt_filename.text + ".tif")

上のように、スクリプトを書き換えました。
この場合、複数MAXファイルがある場合に、
次々に、ファイル名が上書きされてしまいます。
MAXファイルごとにファイル名を決めたいと思ってます。
んー むずかしいでしょうか?
最悪、ファイル名をこちらで決めたもので、
あとのMAXファイルは、連番でつながっていくというような感じで
もいいかな。とは思ってます。。。
011040垢版04/12/24 05:38:36ID:cZ3GLrJ4
>>108
activeCh = #() --アクティブなチャンネルのインデックスを格納
for i = 1 to 100 do
if $.modifiers[#morpher][i].object != undefined and WM3_MC_IsActive $.modifiers[#morpher] i do append activeCh i
newRange = interval 0 0
for i = 1 to activeCh.count do (
maxF = (i - 1) * 10
fArr = #(maxF-10, maxF, maxF+10)
for f in fArr do (
k = addNewKey $.modifiers[#morpher][activeCh[i]].object f
k.value = if f == maxF then 100. else 0.
)
if fArr[1] < newRange.start do newRange.start = fArr[1]
newRange.end = fArr[3]
)
animationRange = newRange
pH = point cross:false box:true size:100
cameras.parent = lights.parent = pH
for i = 1 to cameras.count where classof cameras[i] != Targetobject do (
viewport.setCamera cameras[i]
for i = 1 to 4 do (
--ここにレンダリング処理を入れる
--for f = animationRange.start to animationRange.end do (sliderTime = f; sleep (1./30)) --テスト
pH.rotation.z_rotation += 90
)
pH.rotation.z_rotation = 0
)

ややこしいのでとりあえず書いてみた。
キーはとりあえず100の値になるフレームを割り出してその両脇+-10Fを0にした。ここらへんは適当に。
あと3行目の「WM3_ほにゃらら」はmax5以降のメソッドなので4の人は注意。(4の時はエクステンションだったはず)
011140垢版04/12/24 05:43:03ID:cZ3GLrJ4
>>109
maxファイルごとに名前変えたいんなら素直に
maxFileName + edt_filename.text + ".tif"
とかにすればいいんでないの?

とりあえずどんな命名規則でやってるのかも分からないんで
この程度の答えしか書けません。
0112102垢版04/12/24 11:14:22ID:PELn8VFb
実行部分を以下のように書き換えてみました。
そのまんまなんですが。。。

実行部分のみ--

on go_button pressed do
(

CloseRolloutFloater BRobot_batchRenderFloater
maxfiles = getFiles (browse_max_label.text + "\\*.max")
outputpath = (browse_output_label.text + "\\")
local arr = filterString ddl_outsize.items[ddl_outsize.selection] "x"

for i in 1 to maxfiles.count
do
(
loadMaxFile maxfiles[i]
filename = (getFileNameFile maxfiles[i] +".tif")
myoutput = (outputpath + filename)

0113102垢版04/12/24 11:15:25ID:PELn8VFb
続き

activeCh = #() --アクティブなチャンネルのインデックスを格納
for i = 1 to 100 do
if $.modifiers[#morpher][i].object != undefined and WM3_MC_IsActive $.modifiers[#morpher] i do append activeCh i
newRange = interval 0 0
for i = 1 to activeCh.count do (
maxF = (i - 1) * 10
fArr = #(maxF-10, maxF, maxF+10)
for f in fArr do (
k = addNewKey $.modifiers[#morpher][activeCh[i]].object f
k.value = if f == maxF then 100. else 0.
)
if fArr[1] < newRange.start do newRange.start = fArr[1]
newRange.end = fArr[3]
)
0114102垢版04/12/24 11:15:44ID:PELn8VFb
続き

animationRange = newRange
pH = point cross:false box:true size:100
cameras.parent = lights.parent = pH
for i = 1 to cameras.count where classof cameras[i] != Targetobject do (
viewport.setCamera cameras[i]
for i = 1 to 4 do (
pH.rotation.z_rotation += 90
)
pH.rotation.z_rotation = 0
)


myanim = render camera:$Camera01 outputSize:(point2 (arr[1] as number) (arr[2] as number)) pixelascept:1.0 imageaspept:1.333 fromframe:spn_from.value toframe:spn_to.value outputfile:myoutput
undisplay myanim
saveMaxFile maxfiles[i]
)

0115102垢版04/12/24 11:17:42ID:PELn8VFb
上のスクリプトを実行すると
以下のエラーがダイアログででました。

-- Unknown property: "modifiers" in undefined

プロパティがない? みたいなことをいわれます。
これは、どういうことなのでしょうか?

Verは、MAX6.Eです。
011640垢版04/12/24 17:43:57ID:7yypda9c
>>112-115(>>102)

パス名リテラル
名前
ObjectSet値
MAXScriptトレーニング - ボックスの操作

あたりを読んでみて。
それでも分からなかったらどこが分からないか聞くといい。

ちなみにレンダリングの処理を書く場所が違ってる。
0117102垢版04/12/24 18:25:56ID:PELn8VFb
ありがとうございます。
リファレンスで、教えていただいた場所を読んでみました。

要するに、現在は、選択しているオブジェクトに対しての処理ということ
なんですね。 なので、シーンにあるオブジェクトの名前でイベントを
起こすように考えてみました。


$.modifiers→$*モーフモディファイヤがかかっているオブジェクトの頭文字*.modifiers

上のように処理を書き換えました。

リスナーで、エラーを確認しながらやっているのですが
下記のエラーがでています。activeChの行〜pH.rotation.z_rotation = 0
)までで。
0118102垢版04/12/24 18:26:40ID:PELn8VFb
#()
-- Error occurred in i loop
-- Frame:
-- i: 1
-- Unknown property: "modifiers" in $$objects/.../*E01_Base*
(interval 0f 0f)
OK
-- Runtime error: animationRange cannot be set to a zero-length interval.
$Point_Helper:Point11 @ [0.000000,0.000000,0.000000]
$Point_Helper:Point11 @ [0.000000,0.000000,0.000000]

//続き

レンダリング処理とは、どこを差しているのでしょうか?

myanim←ここからの行のことを差しているのでしょうか?
インサートする場所が違うだけなのでしょうか?
0119102垢版04/12/24 20:15:38ID:PELn8VFb
オブジェクトを抽出するのが、できなかったので
直接オブジェクト名を指定しました。
そうすると、-- Unknown property: "modifiers" in undefinedの
エラーはなくなりました。

以下。

animationRange = newRange
pH = point cross:false box:true size:100
cameras.parent = lights.parent = pH
for i = 1 to cameras.count where classof cameras[i] != Targetobject do (
viewport.setCamera cameras[i]
for i = 1 to 4 do (
myanim = render camera:$Camera[i] outputSize:(point2 (arr[1] as number) (arr[2] as number)) pixelascept:1.0 imageaspept:1.333 fromframe:spn_from.value toframe:spn_to.value outputfile:myoutput
pH.rotation.z_rotation += 90
)
pH.rotation.z_rotation = 0
)
0120102垢版04/12/24 20:18:45ID:PELn8VFb
また、レンダリング処理の記述場所もわかりました。
書いて頂いてましたね。すいませんでした。

-- Error occurred in i loop
-- Frame:
-- i: 1
-- called in i loop
-- Frame:
-- filename: "MAY_Uqwqwq.tif"
-- myoutput: "D:\tmp\aaaa.tif"
-- myanim: undefined
-- i: 1
-- called in go_button.pressed()
-- Frame:
-- maxfiles: #("D:\Test\aaa.max")
-- arr: #("320", "240")
-- outputPath: "D:\tmp\"
>> MAXScript Rollout Handler Exception: -- No ""get"" function for undefined <<

また新たなエラーが発生しました。上のようなエラーです。
012240垢版04/12/24 22:12:59ID:+e2ZwavD
>>119(>>102)
モーフ対象のオブジェクトが確実に一つしか無いと分かっている場合は
($*E01_Base*)[1].modifiers
でいけると思う。
複数の場合は
mMod = for i in $*E01_Base* where i.modifiers[#morpher] != undefined collect i.modifiers[#morpher]
こんな感じでMorpherだけを集めて
for m in mMod do (
--for i = 1 to 100 do if m[i].object != undefined 〜中略〜 animationRange = newRange
)
こんな感じでキーを打っていけばいい。

>>120(>>102)
MAXScriptのエラーは訳分かんないことが多いね。
いろいろ想像するのは面倒なのでとりあえずコード書いておく。

for ang = 1 to 4 do (
--↑の i をfor i = 1 to cameras.count where〜の<var_name>と被らないように変えて。じゃないとカメラが正しく指定できないから。
myoutput = outputpath + maxFileName + cameras[i].name + ((ang - 1) * 90) as string +".tif"
myanim = render camera:cameras[i] outputSize:(point2 (arr[1] as number) (arr[2] as number)) pixelascept:1.0 imageaspept:1.333 fromframe:spn_from.value toframe:spn_to.value outputfile:myoutput
undisplay myanim
pH.rotation.z_rotation += 90
)
saveMaxFile maxfiles[i]

後は自力でガンガレ。
0123102垢版04/12/24 23:16:52ID:PELn8VFb
//実行部分のみ

on go_button pressed do
(

CloseRolloutFloater RenderFloater
maxfiles = getFiles (browse_max_label.text + "\\*.max")
outputpath = (browse_output_label.text + "\\")
local arr = filterString ddl_outsize.items[ddl_outsize.selection] "x"

for i in 1 to maxfiles.count
do
(
loadMaxFile maxfiles[i]
filename = (getFileNameFile maxfiles[i])
0124102垢版04/12/24 23:17:29ID:PELn8VFb
--activeCh = #() --アクティブなチャンネルのインデックスを格納
for i = 1 to 100 do
if ($*E01_Base*)[1].modifiers[#morpher][i].object != undefined and WM3_MC_IsActive ($*E01_Base*)[1].modifiers[#morpher] i do append activeCh i
newRange = interval 0 0
for i = 1 to activeCh.count do (
maxF = (i - 1) * 10
fArr = #(maxF-10, maxF, maxF+10)
for f in fArr do (
k = addNewKey ($*E01_Base*)[1].modifiers[#morpher][activeCh[i]].object f
k.value = if f == maxF then 100. else 0.
)
if fArr[1] < newRange.start do newRange.start = fArr[1]
newRange.end = fArr[3]
)
0125102垢版04/12/24 23:18:06ID:PELn8VFb
animationRange = newRange
pH = point cross:false box:true size:100
cameras.parent = lights.parent = pH
for i = 1 to cameras.count where classof cameras[i] != Targetobject do (
viewport.setCamera cameras[i]
for ang = 1 to 4 do (

myanim = render camera:$Camera[i] outputSize:(point2 (arr[1] as number) (arr[2] as number)) pixelascept:1.0 imageaspept:1.333 fromframe:spn_from.value toframe:spn_to.value outputfile:myoutput
myoutput = outputpath + filename + cameras[i].name + ((ang - 1) * 90) as string +".tif"
undisplay myanim

pH.rotation.z_rotation += 90
)
pH.rotation.z_rotation = 0
)
saveMaxFile maxfiles[i]
)
0126102垢版04/12/24 23:21:42ID:PELn8VFb
上のような感じで、スクリプトを改造しました。

まだ、なにか原因不明のエラーがでます???

-- Error occurred in i loop
-- Frame:
-- i: 2
-- activeCh: undefined
-- called in i loop
-- Frame:
-- i: 1
-- activeCh: undefined
-- pH: undefined
-- newRange: undefined
-- filename: "※※※"
>> MAXScript Rollout Handler Exception: -- Unable to convert: Morpher:Morpher to type: AngleAxis <<

スクリプトのエラーがでてるのは、わかるのですが、
具体性にかけて、いったい何が悪いのか。。さっぱりです。。
0127102垢版04/12/24 23:25:18ID:PELn8VFb
($*E01_Base*)[1].modifiers
また、パス名のところを以下で書き換えてみたところ、

変更後→$E01_Base.[1].modifiers

-- Error occurred in i loop
-- Frame:
-- i: 1
-- called in i loop
-- Frame:
-- i: 1
-- activeCh: #()
-- pH: undefined
-- newRange: undefined
-- filename: "※※※"
>> MAXScript Rollout Handler Exception: -- Unknown property: "modifiers" in SubAnim:Visibility <<

というかんじにかわりました。

エラーの指摘個所は、いずれもこの行になります。
if ($*E01_Base*)[1].modifiers[#morpher][i].object != undefined and WM3_MC_IsActive ($*E01_Base*)[1].modifiers[#morpher] i do append activeCh i

どういったケースが考えられるでしょうか?
諸先輩方のお力をお貸しください。
012869です!!垢版04/12/25 00:06:17ID:KQ8flVD+
ファイル名の規則性ですけど、
Bipdに一通りのアニメーションをつけています。
その一連のアニメーションをキーフレームごとに
レンダリングします。
それを、たとえば、フロントとサイドでレンダリングしたいと思います!

上の手順でいくと、フロントからのレンダリングを一通りBipedを
アニメーションさせて、一巡。カメラが、90度回転してサイドに行きます。
それで、また一巡してレンダリングしていきます。

なので、Front_01,02...(連番)Side_01,02..といった名前付けを
考えてみました。 Front、Sideなどの名前付けは、可能であれば
テキストボックスから入力したものに反映させてたいと思ってます!
(あらかじめ、プリセットするのではなくてですね。)
または、カメラ名から取得してもいいのかなぁ〜とは思ってます。

108さんのモーフの取得は、上のスレッドを読みながら、
あたしも勉強がてら試してみてますけど、んー難易度高いですー。
すごいいっぱいエラーがでてます 笑
012940垢版04/12/25 01:43:02ID:KOhVNH9a
>>127
MAXScriptの吐くエラーには、それこそ経験がないと原因が特定しづらいものも多いです。

これまでのあなたの書き込み内容から察するに、
処理的な話をする上で最低限必要な知識が欠けていると思われますので、
これ以上ここで問答を繰り返してもお互い徒労に終わる可能性が高いと思います。
ですので、もう少し簡単なスクリプトで経験なり知識を蓄えてから挑戦されてはどうでしょうか。
どうしても必要というのでしたら外部に委託して作ってもらうという手もあります。

私も一旦手を差し伸べた以上、途中放棄はしたくないのですが、
労力に見合うだけの対価(教えることで得られる何か)が得られない以上、
回答を続ける気にはなれません。

>>128
そうですか。
頑張ってください。
0130名無しさん@お腹いっぱい。垢版04/12/25 01:54:10ID:ch/46iy7
えらそうだけど、わかんないんじゃないの?>40
0131名無しさん@お腹いっぱい。垢版04/12/25 01:54:59ID:ch/46iy7
見返りがほしいの?>40
0132名無しさん@お腹いっぱい。垢版04/12/25 02:08:29ID:vz2dx0gi
>>40
レス追っていけば分かるというか
40も分かってると思うけど上げて質問してるアホは1でしょ。
よくがんばったと思うよ。
 
>>131
コミュニティはリソースのギグアンドテイクで成り立つんだよ。
お前みたいな他人を利用することしか考えない乞食は邪魔なだけ。
013340垢版04/12/25 03:10:57ID:KOhVNH9a
>>130>>131
> えらそうだけど、わかんないんじゃないの?>40
わかんないよ。
エラー出力書かれて漠然とした質問されてもまともな回答なんて出来ない。
だったら分かってる範囲で回答するしかないじゃない。

> 見返りがほしいの?>40
否定はしない。

教えることで得られる何かってのは
例えば教えるために調べることで自分も勉強になったり、
分かってもらえた時の喜びとかそういう他愛もない自己満足的なもの。

もちろん初めからそういった見返りを要求してたら成り立たないけど、
回を重ねると事情も変わってくるよ。人間だからね。
答える方だってそれなりに時間を割いてるわけだし。
0134名無しさん@お腹いっぱい。垢版04/12/25 12:13:54ID:ch/46iy7
102は、確かに悪だ。 しかし、ソースを試してみてん。
簡単なシーンで、モーフを登録してね。

確かに、その箇所で、エラーがでるぞ。
間違いない。 40は、実際試してみて、ソースをあげてるのかい?
自分の目でみてみてん。 想像で書いても、スクリプタとはいえんぞい。
013540垢版04/12/25 16:40:26ID:FMKIgUQc
>>134
Sphereを5つ作ってEditable_meshに変換後、1つ目に作ったSphereにMorpherを適用。
各チャンネルにはあとの4つのSphereをそれぞれ格納。
以上のようなシーンで以下のコードを実行したがエラーは出ない。

for i = 1 to 5 do ( --maxfiles.countの代わり
activeCh = #() --アクティブなチャンネルのインデックスを格納
for i = 1 to 100 do
if ($*sph*)[1].modifiers[#morpher][i].object != undefined and WM3_MC_IsActive ($*sph*)[1].modifiers[#morpher] i do append activeCh i
format "i:% activeCh:%\n" i activeCH
newRange = interval 0 0
for i = 1 to activeCh.count do (
maxF = (i - 1) * 10
fArr = #(maxF-10, maxF, maxF+10)
for f in fArr do (
k = addNewKey ($*sph*)[1].modifiers[#morpher][activeCh[i]].object f
k.value = if f == maxF then 100. else 0.
)
if fArr[1] < newRange.start do newRange.start = fArr[1]
newRange.end = fArr[3]
)
animationRange = newRange
)

これまでに提示してきたコードもあくまでアドバイスとして要所要所の考え方をコードとして提示しているに過ぎない。
提示されたアドバイスを読み解いてちゃんと動作するようにするのは質問主のすべきこと。
0136名無しさん@お腹いっぱい。垢版04/12/26 01:14:25ID:eYoc//mn
ちなみVerはいくつやん?>135
俺ンとこも駄目だったぞ?

うちは、MAX6の英語バージョン
013740垢版04/12/26 02:32:49ID:336kiAqh
>>136
max6英語版です。

どこが引っかかってるんだろう・・・
特にエクステンションが必要なわけでもないし。
とりあえずうちではmax6E・max5E共にちゃんと動くしなぁ・・・
0138136垢版04/12/26 04:09:24ID:KOhTlVIY
なんか、マシンによってエラーがおきたり、おきなかったり、
なにか衝突するプログラムがあるのかもねぇ。。
ま。MAXですから。。

ようわからんわ。
013940垢版04/12/26 04:27:46ID:S0khontO
MOMOに書き込まれちゃってるみたいなんで、
勝手ながらこの辺でこの話題からは抜けさせてもらいます。
なんかややこしいことになっちゃってゴメンネ
0140名無しさん@お腹いっぱい。垢版04/12/26 19:44:46ID:KOhTlVIY
ほ?
0141名無しさん@お腹いっぱい。垢版04/12/27 15:22:57ID:V7T2foWg
まぞで低レベルだな。。
>>40もムキになって答えんなよ。
あんたの回答を質問したやつはほとんど理解してないとおもわれ。
つうか、理解できる程度の知能があるやつは最初からリファレンスなりで自力で解決できてる。
その程度の内容のことで自己解決できないやつは、何をやってもダメぽ。
0142名無しさん@お腹いっぱい。垢版04/12/30 22:20:38ID:PfXs4Vxb
ooo
0143名無しさん@お腹いっぱい。垢版05/01/03 01:05:48ID:M55ds7UU
hu
0144名無しさん@お腹いっぱい。垢版05/01/04 12:23:22ID:i3ERclvD
はん
0145名無しさん@お腹いっぱい。垢版05/01/14 05:03:19ID:Gw14vC6K
うん
0146名無しさん@お腹いっぱい。垢版05/01/23 13:24:08ID:B/ZrynHg
yu
0147名無しさん@お腹いっぱい。垢版05/01/30 00:54:51ID:3Y/69Adl
Rs
0148名無しさん@お腹いっぱい。垢版05/01/30 00:55:28ID:3Y/69Adl
Rs
0149名無しさん@お腹いっぱい。垢版05/02/26 22:44:52ID:X1lrvR6u
yu
0150名無しさん@お腹いっぱい。垢版2005/05/15(日) 16:16:20ID:cs1r6F9M
C4DのCoffeeみたいな使い方できねーの?
0153名無しさん@お腹いっぱい。垢版2005/05/16(月) 15:17:27ID:/1xf8E/z
それのどこが具体的やねん
だいたい、コンセントレイトってなんや
なにがしたいんかさっぱりわからんわ
0156名無しさん@お腹いっぱい。垢版2005/05/16(月) 23:02:39ID:9KUTM0eo
Coffeeで計算した座標をIKのターゲットにしたいだけだよ
こんな感じで ttp://junkuser.hp.infoseek.co.jp/Untitled.zip


maxで同じ事やろうとしたけど変換前の座標拾っちゃうんだよ。
0157名無しさん@お腹いっぱい。垢版2005/05/16(月) 23:44:32ID:tGxvuD7u
C4Dもってねーから見られへんけど
要するにターゲットオブジェクトをスクリプトコントローラー
とかで動かしたいんか?それならdependsOnかまさなあかんで。
詳しくはマニュアルの「スクリプト コントローラ用 dependsOn」
あたりやな
0161151垢版2005/05/17(火) 22:03:04ID:OW7A3Ad5
どーも151です
ソルバを使った関節からrotationが読み出せないで詰まってました
方向セントルイスだとリンクできるんだけどね

>>160
関節が2重3重になってんのよ〜プラモによくあるっしょ
肩がX回転 肘のX回転の2重関節 上腕部でバンク回転とか

式コントローラーはIKと併用できなかったよ?
dependsOn教えてもらってからスクリプトコントローラーで出来たけど

>>159
必要事項をまとめられる知識があったらHelpから引いてるよw
まじ>>157に感謝ですよ。
0162名無しさん@お腹いっぱい。垢版2005/05/17(火) 22:32:11ID:5LbITx48
うまくいったんなら良かったやん
けど、そういうのならエクスポーズTmと
リアクションコントローラーだけでいけそうな気もすんな。
7はあんまり使うてへんからよーわからんけど。
なんにせよ、情報出し惜しみされると答えにくいわw
0163名無しさん@お腹いっぱい。垢版2005/05/18(水) 12:46:43ID:9vmhxcFV
>>157
dependsOnてカレントフレームでScriptを評価させるだけでないの?
次フレームに進めれば評価されるわけだから、別にdependsOnつかわなくても成立しない?
操作をダイレクトにしたい(いちいち次フレームに進めて評価させるのかったるい)ってことだけでdependsOnつかってるだけ?
0164名無しさん@お腹いっぱい。垢版2005/05/18(水) 15:46:45ID:JQV997Dc
dependsOn $Point01.transform.controller;

とかすると従属関係が明確になるみたいですよ?太字になる。
効率上がるしね

>>162
いやーすまんこ(>_<ゞ

スクリプトコントローラーが言う事きかなくて・・・最初はそれだけ
教えてもらってとってもブレイクスルー♪
0165名無しさん@お腹いっぱい。垢版2005/05/18(水) 16:45:33ID:9vmhxcFV
>>164
コーディングスタイルの問題なんだけど、maxScriptの場合、式の末尾に;っていらなくても大丈夫じゃない。
でも、人のコード読むときは、;があると随分読みやすいよね。
特にif文やswich文なんかだと。
なんで、このスレの住人だけでも文末は;をつけよう推奨してよん。
0167名無しさん@お腹いっぱい。垢版2005/05/22(日) 22:06:14ID:JifNFWYR
IKで作った角度をmaxscriptでアクセスできないとかぶーたれてたわけですが
coordsys で変換軸を指定してなかったのが敗因だったもようです

お手数かけましたw
0168名無しさん@お腹いっぱい。垢版2005/10/22(土) 22:46:03ID:WHmRJmqZ
いえいえ
0169名無しさん@お腹いっぱい。垢版2006/05/31(水) 23:02:59ID:Frdw45AH
現在 max のプラグインを製作中の者です。
NURBS の曲面とある座標をとの距離を求めたいのですが、
どのようにしたらよいのでしょうか?
0170名無しさん@お腹いっぱい。垢版2006/06/11(日) 18:46:39ID:syds5UWa
どうなのよ
0171名無しさん@お腹いっぱい。垢版2006/09/12(火) 02:02:58ID:DfRZzxQz
$.material.diffusemap.filename = "c:/bbb.jpeg"
)
)
0173名無しさん@お腹いっぱい。垢版2006/09/17(日) 23:43:17ID:4QiIeya5
シンプルなサンプルコードをたくさん読みたいのですが、
適当なサイトが見つかりません。
オブジェクトをひとつずつ処理するとか、位置情報を書き出すとか、
そういうシンプルなのどこかに無いでしょうか?
0175名無しさん@お腹いっぱい。垢版2006/09/18(月) 18:09:27ID:H/4zw7Uu
いろいろ探したけど、さとうさんのしか見つからないです。
そもそも、公開するのが恥ずかしいくらいの短いスクリプトは、誰も公開したがらないってことなんでしょうか?...。

0176名無しさん@お腹いっぱい。垢版2006/09/20(水) 14:02:54ID:++ZisKGN
>>173
公開するまでもないからなw
それに大抵リファレンスとmaxに付属してるscriptサンプルに載ってるし

>>174
対応してない命令も多いし、バグコード吐くことも多いよ
まぁ、とっかかりには悪くない

>>173
何が知りたい?
教えてやるぜ。
-----選択してるオブジェクトの位置情報書き出し---------------
debug = newScript()

for i in selection do
(
local TM = i.objectTransform
format "name:% pos:% rot:% scale:% \n" i.name TM.translationpart TM.rotationpart TM.scalepart to:debug
)
0177名無しさん@お腹いっぱい。垢版2006/09/21(木) 00:03:54ID:M6XjoFd2
8で付いたデバッガって皆使ってる?
いまいち使いどころ(使い方も)がよく分からんのだが・・・

こういう場合に使うと(・∀・)イイ!!って例ある?
0178名無しさん@お腹いっぱい。垢版2006/09/21(木) 01:15:56ID:bMeMN2Nk
>>176
ありがとうございます。
こういう数行のやつがとっかかりやすいですね。

0180名無しさん@お腹いっぱい。垢版2006/09/21(木) 21:47:01ID:X8sG1n1e
>>179
そんなもんformat使った方が自由度高くていいじゃん・・・って思ってしまう。
もっとデバッガにしかできない便利な使い方ってないの?
0181名無しさん@お腹いっぱい。垢版2006/09/21(木) 22:34:43ID:rgN92/H0
printデバッグのほうが面倒だと思うけど・・・

>もっとデバッガにしかできない便利な使い方ってないの?
breakして変数書き換えとか
0183180垢版2006/09/22(金) 21:42:41ID:2Ox504s/
>>182
それが分からないから聞いてるんだけど・・・
0185名無しさん@お腹いっぱい。垢版2006/09/24(日) 21:32:03ID:HfQkFOvG
UVWMapモデファイアのギズモを90度回転させるにはどう書いたらいいっすか?
0188名無しさん@お腹いっぱい。垢版2006/09/24(日) 23:12:59ID:HfQkFOvG
>>186
でけました!ありがとうございます。
0189名無しさん@お腹いっぱい。垢版2006/09/25(月) 12:29:20ID:vhkyfxZ/
>>185
そんくらいマクロレコーダーで吐き出せるだろwww

と思って試したが、
それすら吐き出せないマクロレコーダーに失望した
0190名無しさん@お腹いっぱい。垢版2006/09/25(月) 12:43:51ID:ZFHVi/yy
マクロレコーダーが万能だと思ってる人は、自分でスクリプトを書こうとしたことが無い人ですよ。
0194名無しさん@お腹いっぱい。垢版2007/01/06(土) 18:47:38ID:REW6/hxJ
うわぁ、過疎スレですねぇ...。
0195名無しさん@お腹いっぱい。垢版2007/01/06(土) 21:53:30ID:gtvSVqQa
たしかに過疎ってるな。
しょうが無いから三ヶ月以上前の話題にレスしとくと、
マクロレコーダは飾りじゃないが、肝心な時に役に立ってくれ無かったりする微妙に憎たらしい奴。
0196名無しさん@お腹いっぱい。垢版2007/01/07(日) 02:48:08ID:CZlb6Lxc
scriptとは行かないまでも
最近式コントローラーとかをなんとか弄って頑張っています。
ハルシノと睨めっこしながらですが・・

そのうちサクサクscript書けるようになりたいです。
0199名無しさん@お腹いっぱい。垢版2007/04/14(土) 14:20:28ID:9iJBZ1Wk
(
if (classOf MAXSCRIPT_VOl1)==Array do
  (
   mapped fn resOutput res =
    (
    format "% 名前: % [%] 投稿日:% ID:% \n % \n" res.index res.name res.mail res.data res.id res.text
    )

  resOutput MAXSCRIPT_VOl1
  )
)
0200名無しさん@お腹いっぱい。垢版2007/04/14(土) 14:36:17ID:9iJBZ1Wk
messageBox "保守" title:"名無しさん@お腹いっぱい。" age:true
0201名無しさん@お腹いっぱい。垢版2008/06/19(木) 17:42:15ID:ygr/I/SO
messageBox "保守2" title:"名無しさん@お腹いっぱい。" age:true
0205名無しさん@お腹いっぱい。垢版2008/11/11(火) 16:17:00ID:r6M3elYI
最近maxscriptを触り始めたばかりなのですが、
ttp://kazu001.blog66.fc2.com/blog-entry-146.html
に記載されている
「親ボーンを曲げたら子ボーンも自動的に同じ角度だけ曲がるようにしておけば便利」
が、どのようにすればうまくいくのかが分かりません
分かる方、いっらしゃいましたら教えて下さい
0206205垢版2008/11/11(火) 16:23:04ID:r6M3elYI
>>205
細かい点ですが、
×いっらしゃいましたら → ○いらっしゃいましたら
0207名無しさん@お腹いっぱい。垢版2009/01/19(月) 23:55:14ID:l5zDWz/E
meditMaterials[1]のDiffuse colorの彩度を調整するには
どう書いたらいいんですか?
0209名無しさん@お腹いっぱい。垢版2009/01/20(火) 14:36:49ID:fDmQp2Qg
>>208
同じように書いてみたんですけど、マテリアルエディタの色は変わんないんです。
meditMaterials[1].diffusecolor.saturation = 200にしても彩度が200になんないし。
リスナーには200 OKとか出るんですけど。
何が違うんでしょうか?
0211名無しさん@お腹いっぱい。垢版2009/01/21(水) 12:03:14ID:9OSkWqRQ
>>210
リファレンスとかネットとかで調べてるんですけど分からなくて。
でもリファレンスに書いてあるんですね。
皆さんもっと熟読してるんですね。
分かりました。
0212名無しさん@お腹いっぱい。垢版2009/01/21(水) 23:12:58ID:TLS7jrms
>>211
ばっちり書いてあるし別に熟読しなくても直ぐに見つかるよ。

と、突き放してもいいんだけど、初心者のころって確かに
何が分からないかもよく分からなかったり、調べ方すら分からなかったりするよね。

とりあえずそういう人は疑問に思ったらリスナーに以下を入力してみて欲しい。
大抵の場合はこれで突破口が開けるはずだ。

classof <調べたいもの>
show <調べたいもの>
0214名無しさん@お腹いっぱい。垢版2009/02/06(金) 01:11:41ID:AoCDsP5+
ちょっと端的に聞いてみるけれど、モーションデータにオブジェクトを同調させるスクリプト知らまいか?
0216名無しさん@お腹いっぱい。垢版2009/03/06(金) 21:29:06ID:1FYX7vbE
age
0217名無しさん@お腹いっぱい。垢版2009/05/12(火) 22:43:36ID:rv7ZWwOY
コード
(
struct hoge (this)
local foo = hoge()
foo.t = foo
foo
)

出力
(hoge this:<<recursive Struct:hoge>>)

上記コードでメンバ変数 this はメモリ上ではどういう状態なんでしょうか?
プラグインスクリプトの this みたいなのが構造体にもあれば便利だと思うんですが
上記の方法だとメモリの状態がよく分からないので不安です。
0218名無しさん@お腹いっぱい。垢版2009/05/12(火) 22:45:10ID:rv7ZWwOY
訂正
×:foo.t = hoge()
○:foo.this = hoge()
0220名無しさん@お腹いっぱい。垢版2011/11/10(木) 00:49:29.40ID:UyZo2+nH
if rot > 0 then
(
rot*2
)
else
(
0
)

rotが0より大きいときにx2してそれ以外は0って感じなんだけど、
これに「rotが90以上の時も0」って加えたいんだけど
どう書けばいいでしょうか?
0221名無しさん@お腹いっぱい。垢版2011/11/10(木) 18:31:49.11ID:HmWVAfBq
「rotが90以上の時も0」を加えるんじゃなくて
「rotが0より大きいとき」じゃなくて「rotが0より大きく尚且つrotが90より小さい」
ってすればよい。
if rot > 0 then

if rot > 0 and rot < 90 then
0222名無しさん@お腹いっぱい。垢版2011/11/11(金) 00:26:28.61ID:IXSZtxDz
ありがとうございます!

仮に、 rot < 90 のときは rot*3 など、結果を3パターン以上出したい時は
どうすればいいでしょうか?
0224222垢版2011/11/12(土) 00:10:18.50ID:KLAa1gQo
自己解決しました。

else以下にまたif文を入れればよかったのですね。
0225名無しさん@お腹いっぱい。垢版2011/11/29(火) 01:00:23.38ID:iJujN947
max2012で保存されているトラックビューを一括削除するスクリプトを探しています。
(頻繁に削除するので、リストで消すのが面倒)
ハルシノにあったRudeCleanserTrackviewsがそれっぽいのですが、
バージョンが合わないせいか思うような動作をせず、中途半端に残ったりしてしまいます。
全部閉じた状態で実行すれば真っ白になっているようなものを書いていただけないでしょうか?
0226名無しさん@お腹いっぱい。垢版2011/11/29(火) 01:44:57.26ID:6G8vdm3r
リファレンス見ながら書くから動かなくても文句言わないでね

(
local numTVs = trackviews.numTrackViews()
for i = numTVs to 1 by -1 do
(
if trackviews.isOpen i do trackviews.close i
trackviews.delete i
)
)
0227名無しさん@お腹いっぱい。垢版2011/11/29(火) 01:53:03.90ID:6G8vdm3r
ごめん、動かなかったので直した
(
local numTVs = trackviews.numTrackViews()
for i = 1 to numTVs where trackviews.isOpen i do trackviews.close i
for i = numTVs to 1 by -1 do
(
local tvName = trackviews.getTrackViewName i
trackviews.delete tvName
)
)
0231名無しさん@お腹いっぱい。垢版2012/03/09(金) 13:20:58.35ID:UWqUBMhr
ボーン(biped以外)の表示非表示を切り替えたいんだけど、

(
on execute do
(
case of
(
(hideByCategory.bones == true): (hideByCategory.bones = false)
(hideByCategory.bones == false): (hideByCategory.bones = true)
)
)
)

こうするとBipedまで対象になってしまうのですが、どうカテゴリ分けすればいいでしょうか?
(表示フロータに2つあるボーンオブジェクトの下だけ適用した感じにしたい)
0232名無しさん@お腹いっぱい。垢版2012/03/09(金) 15:05:45.86ID:w6SaxgOB
hideByCategoryだと無理っぽい気が。
showPropertiesで見てもチェックボックスの有る分のプロパしか見当たらないし。
下のボックス内と追加で出る分のカテゴリ非表示はスクリプトからは無理なんかね。

自前でループさせてclassofでチェックしてボーンだけ非表示になるスクリプトを組むとか。
カテゴリ非表示ほどレスポンスは良くないだろうけど。
0233名無しさん@お腹いっぱい。垢版2012/03/09(金) 15:12:46.88ID:DUum4bFn
Bipedの表示カテゴリはむかしジオメトリだったのが最近はボーンに変わったんだっけ?
しかもそれが選択フィルタのカテゴリと食い違ってたり

色々面倒だから、最近はカテゴリ表示・非表示よりレイヤーで分類して管理する方法で慣れちゃったなあ
0234名無しさん@お腹いっぱい。垢版2012/06/19(火) 04:36:49.15ID:bhbSvTzB
モーフモデファイヤについて質問です。
選択した複数のモーフオブジェクトの、特定のチャンネルを一括で変更したいのですが、
色々試しても、複数選択した内の一つにしか適用されません。
試したスクリプトです。(チャンネルの2番目を変えるとして)

mph = $.morpher
for i = 1 to selection do
(
WM3_MC_SetValue mph 2 100.0
)



スクリプトは今回初めて学ぶので単純な原因をわかっていないのかもしれませんが、
もしよかったらアドバイスをよろしくお願いします。
0235名無しさん@お腹いっぱい。垢版2012/06/22(金) 02:54:00.37ID:QmxroByN
1行目
.morpherはモーファーが適用された個別のオブジェクトのプロパティなんで
複数選択した場合には$はオブジェクトセットになるんで
個別の要素に対してそのプロパティでアクセスしないといかん。
ex1) $[1].morpher
ex2) selection[1].morpher

2行目
selectionは現在の選択のオブジェクトセット(配列)なんで
for文で1から配列までって記述はおかしい。
for i = 1 to selection.count do
でiにインデックス入れて
mph = selection[i].morpher
でモディファイア引っ張ってくるか
for i in selection do
でiにオブジェクト入れて
mph = i.morpher
でモディファイア引っ張ってくる
0236名無しさん@お腹いっぱい。垢版2012/07/23(月) 13:33:07.25ID:CQfkCaq4
スクリプトを学ぼうといろいろチュートリアルやらなんやらを集めてはみたものの、
どれも最初はBOXの作り方なんだよな…

基礎が一番重要なのはわかっちゃいるけど、もうちょっと先からお願いしたいわ…
0238名無しさん@お腹いっぱい。垢版2012/08/01(水) 20:39:06.10ID:iBfM2Ns7
表示パネル→表示カラーロールアウトで
ワイヤフレームとシェーディングのカラーをそれぞれ変更できますが、
実行するたびにオブジェクトとマテリアルが切り替わるようなスクリプトを書いて欲しいです。
結構頻繁に切り替えるのですが、そのたびにパネルを開くが面倒で…
0243名無しさん@お腹いっぱい。垢版2012/11/12(月) 17:36:06.13ID:pFmIk8Ww
選択した複数のオブジェクトのアニメーションカーブにサイクルやループ属性をつけるスクリプトって可能でしょうか?
カーブエディタが開いているだけで重いので、カーブエディタを開かずにループ属性をつけたいのです
0245名無しさん@お腹いっぱい。垢版2013/03/15(金) 16:23:15.57ID:3W8hD6Qc
選択中のオブジェクト+子供を全選択するようなスクリプトを書きたいのですが、
スクリプトリファレンスのトレーニングやチュートリアルをみても、選択に関するものが見当たりません…
そもそも"指定したboxを選択する"書き方すらわからない素人ですが、どのあたりを見ればいいでしょうか?
0246名無しさん@お腹いっぱい。垢版2013/03/15(金) 17:51:32.07ID:Hrrb6kT4
リスナーのマクロレコーダの使用可能にするにチェック入れると、基本的なコマンド類は
リスナーにコマンドが現れるんで、そのコマンド見てMaxScriptのヘルプで検索する。

クリックしてオブジェクト選択すればリスナーに
select $Box001
とか出るんでselectでヘルプ検索すればノードの共通プロパティの所に
選択関係のコマンドが載ってる。

あと子供の選択はデフォルトだと[PageDown]複数の子を選択は[CTRL]+[PageDown]だったと思うんで
(俺は既にデフォルトから変えてるんでもしかして違ったら自分でテキトーなショトカに割り当てるかメニューに出してやって)
それ押せばマクロレコーダに子供を選択するコマンドが出ると思う。
0248名無しさん@お腹いっぱい。垢版2013/03/15(金) 18:45:57.66ID:3W8hD6Qc
複数の子を選択なんてあったのか…今回はそれで十分でした。ありがとう。
レコーダーの件はわからないけど…
0250名無しさん@お腹いっぱい。垢版2013/03/19(火) 19:26:13.50ID:X8YFO+Ym
for i in objects do

みたいな書き方だと、メッシュ化してないプリミティブオブジェクト(普通のSphereとかBoxとか)が拾えないみたいです。

objects の代わりに $* だと拾えるのは分かったんだけど、
昔に別な書き方でもできた気が。
$* 以外の書き方って無かったでしたっけ?
0251名無しさん@お腹いっぱい。垢版2013/03/19(火) 20:28:59.89ID:X8YFO+Ym
>みたいな書き方だと、メッシュ化してないプリミティブオブジェクト(普通のSphereとかBoxとか)が拾えないみたいです。

あれ、拾える?
勘違いしたかも。ごめん。
0252名無しさん@お腹いっぱい。垢版2013/03/20(水) 02:26:31.86ID:aKXLPO5z
>>251
一度くらいはリファレンスに目を通しましょう

objectsはObjectSet値
$*はPathName値

条件次第で同じ動作をするけど明確に異なる値です
0254名無しさん@お腹いっぱい。垢版2013/04/08(月) 01:53:06.75ID:5QN07Uff
複数のスクリプトのバージョンまとめて更新したいんだけど、なんかいい方法ある?
今のとこ一つずつビューポートに投げるしか方法思い浮かばなくて。
0255254垢版2013/04/09(火) 02:40:30.40ID:Rf+a1HI9
事故解決しますた。
AppDataのほうにスクリプトあるとmacroscriptsに入れても更新されないのね。
0256名無しさん@お腹いっぱい。垢版2013/09/20(金) 13:22:13.08ID:J23xaoqY
基本設定の自動バックアップのチェックのオンオフをスクリプトで制御したいのですが、
どこにアクセスしたら良いでしょうか?
0259名無しさん@お腹いっぱい。垢版2013/09/20(金) 15:12:16.09ID:J23xaoqY
(
 (
 if (autosave.Enable = true) then autosave.Enable = false
 else autosave.Enable = true
 )
)

のようにして、有効の時に押せば無効になるようにしたのですが、
無効の時に押しても有効になりません…
書き方がおかしいのでしょうか?
0262260垢版2013/09/24(火) 01:00:49.87ID:mn/UtfSO
あ、そりゃそうだ。
0263名無しさん@お腹いっぱい。垢版2013/09/27(金) 18:56:32.77ID:TYSRycw4
レイヤーマネージャーのボタンのように、一回押すとオレンジになり
もう一回押すと戻るようなマクロスクリプトはどのように書いたらよいでしょうか?
0266名無しさん@お腹いっぱい。垢版2013/10/30(水) 11:56:10.28ID:9LvRQ0hj
オブジェクトプロパティの「フリーズをグレーで表示」をボタンにしたいのですが、
マクロレコーダーに出た$.showFrozenInGray = onだけでは反映されません。
何か足りないのがあるのでしょうか?
0267名無しさん@お腹いっぱい。垢版2013/10/30(水) 16:50:12.49ID:S4wv1NoX
いけるはずだけど。

$は選択オブジェクトを表してるから、オブジェクトが選択されてないか、
もしくは複数選択されてるとか。
0269名無しさん@お腹いっぱい。垢版2013/10/30(水) 21:43:19.30ID:j90ZXGHA
これなら選択なし/単体/複数でも対応可能
selection.showFrozenInGray = true

$は現在の選択を表す「PathName値」
selectionは現在の選択を表す「ObjectSet値」

どちらも配列の一種で似てるけど微妙に違う
試しに何も選択せずにリスナーに
$

selection
を打って戻り値を確認するといいよ
どういう違いなのかなんとなく分かるはず
0270名無しさん@お腹いっぱい。垢版2013/10/31(木) 10:00:43.80ID:/c+HcHYW
へ〜、selectionってプロパティの代入はループさせなくても複数一気にいけるんだ。
一個賢くなった。>>268じゃないけどdクス
0272271垢版2013/11/06(水) 12:25:25.06ID:aqtHo5u9
何度もすいません…。
下記のようにしてif文にしたところ、2010では動作しましたが2012では動作しないようです。
仕様が若干変わっていたりするのでしょうか?

(
for i in selection do
(
if (i.showFrozenInGray == on) then (i.showFrozenInGray = off)
else
(i.showFrozenInGray = on)
)
)
0273名無しさん@お腹いっぱい。垢版2014/04/18(金) 17:07:03.83ID:9+12GPL9
大体そういうのって才能でしょ
0274名無しさん@お腹いっぱい。垢版2014/09/17(水) 12:58:38.10ID:29SZFRZ4
スクリプトを勉強し始めた初心者です。

ヘルプにあるビューポートの再描画コールバックについて2012と2014で
結果が異なる為、ご存知の方がいましたらご教授願います。

fn redrawviews_p = print "Viewports Redrawn"
registerRedrawViewsCallback redrawviews_p

上記を評価してコールバックを停止するため

unregisterRedrawViewsCallback redrawviews_p

と入力しました。
2012は正常にコールバックが停止するのですが、2014は「OK」と返しては来るのですが
"Viewports Redrawn"がリスナーに表示され続けます(停止できない)

モヤモヤしてます・・・
0277名無しさん@お腹いっぱい。垢版2014/09/19(金) 11:24:09.41ID:B80uezAN
>>276
登録したスクリプトがエラーを吐くと正常に登録解除できない
その状況を作らないために登録する関数は
実処理を行う関数を呼び出すだけの内容にしておくといいってリファレンスにも載ってるよ
さらにtry文で囲んでおくと安全

--登録
fn redrawviews_p = print "Viewports Redrawn"
fn redrawviews_handler = try( redrawviews_p() )catch()
registerRedrawViewsCallback redrawviews_handler

--解除
unregisterRedrawViewsCallback redrawviews_handler

バージョン毎の動作の違いはよく分からん
0278名無しさん@お腹いっぱい。垢版2014/09/19(金) 19:24:22.18ID:8D8hfrU1
>>277
教えて頂きありがとうございます。
仕事の暇を見つけてスクリプトの学習を行っているので進みがとても遅く
try文が何なのか未だ理解してません。
もっと勉強します。

プログラミングの予備知識ゼロの人がmaxscriptを一人前に出来るようになるまで
どれくらい時間が必要なんでしょうかね。本人次第の所はありますが。。。
0281名無しさん@お腹いっぱい。垢版2016/10/28(金) 03:55:49.06ID:O8TzAf5R
ほしゅ
0283名無しさん@お腹いっぱい。垢版2017/03/01(水) 20:12:49.31ID:xlEL985/
0284名無しさん@お腹いっぱい。垢版2017/07/13(木) 22:14:39.30ID:LLhauofu
また活発になってほしい...
それかpython版作ろうよ
0285名無しさん@お腹いっぱい。垢版2017/07/14(金) 09:40:43.13ID:bf4NRxNB
いい加減Qtに移行したいけどpythonで完結できないことが多くて
結局maxscriptが必要になるならmaxscript一本でいいやとなって移行できない
0286名無しさん@お腹いっぱい。垢版2017/07/17(月) 02:06:52.52ID:qFBfMv+9
BonesProをmaxscriptから操作したいと思って試したのですが、上手くいかず困ってます。
http://doc.bonespro.com/MAXScript.html

【概要】
ボーン選択をmaxscriptで選択したい
<void> BonesPro.bone_select_name <name> <select>


<void>と <name> <select>のところが同様になっていると良いのかが良くわかっていません。
クラスとかパラメータとか調べてみたのですが、上記のメソッド関係が動いてくれません。
どうしたらいいのかアドバイス頂ける幸いです。
よろしくお願いいたします。
0287名無しさん@お腹いっぱい。垢版2017/07/17(月) 02:07:45.66ID:qFBfMv+9
テストで探ってた際のログ
【実行】
showproperties $.modifiers[BonesProDemo]
【結果】
.use_inertia : boolean
.use_oscillation : boolean
.use_stack : boolean
.use_parabones : boolean
.use_dual_quaternion : boolean
.use_linked : boolean on off
.bone_sync : boolean
.mirror_plane : integer
.mirror_flip : boolean
.mirror_offset : float
.mirror_threshold : float
.soft_selection : boolean
.soft_radius : float
.use_edge_distance : boolean
.edge_distance : integer
false

【それを元にパラメータは操作できました】
$.modifiers[#BonesProDemo].use_stack = off

【実行】
$.modifiers[#BonesProDemo].category
$.modifiers[#BonesProDemo].classID
【結果】
#3d_io_Plugins
#(1623534534, 1946828630)
0288名無しさん@お腹いっぱい。垢版2017/07/17(月) 15:50:16.01ID:ytjApNC/
>>286
この手のドキュメントは
<戻り値>関数名 <引数名または型>
みたいに書かれてることが多い
型は説明文に書かれてる場合がある
戻り値のvoidってのは意味のある値は返さないって意味

ちょっと不親切なドキュメントだけど読めなくもない
0289名無しさん@お腹いっぱい。垢版2017/07/18(火) 11:42:08.96ID:+y6a6aPr
>>288
解説ありがとうございます。何となくな理解だったので助かりました。
あれから色々試していくつか分かってきたのですが、根本的に合っているのか謎で手探り状態なのですが、ご報告します。

・Nameはstringにしろとエラー文で言われました。maxscriptのヘルプ通り、文字列 string値でした。

・Bone選択は描画を更新しないと反映されないようで、以下のような処理が必ず実行されます。http://doc.bonespro.com/MAXScript.htmlの関数説明文にそのようなことが書いてありました。
【必ずBone選択時に実行される処理】
$.modifiers[#BonesPro].use_oscillation = on
max views redraw

・また、Boneの操作のためにはLayerにアクセスする必要がありそうでした。実行:$.modifiers[#BonesPro].BonesPro.num_bones()結果:場所は <MixinInterface:BonesPro>と表示されます。
http://help.autodesk.com/view/3DSMAX/2016/JPN/?guid=__files_GUID_78B79975_7BA5_4A03_8FEF_27E78D14B575_htm
$.modifiers[#BonesPro].BonesPro.num_bones()のように単純にやるだけではダメで、Layerの方も考慮しないといけないぽく、立ち止まってます。
0290名無しさん@お腹いっぱい。垢版2017/07/18(火) 11:42:44.79ID:+y6a6aPr
>>288
以下はテスト時のログ


[実行]

$.modifiers[#BonesPro].BonesPro.num_bones()
----------------------------------------------------------
$.modifiers[#BonesPro].BonesPro.bone_select_all()

----------------------------------------------------------
BonesPro.bone_select_all()
----------------------------------------------------------
BonesPro.bone_select_all(1)




[結果]

-- 未知のプロパティ : "num_bones()" 場所は <MixinInterface:BonesPro>
----------------------------------------------------------

OK

----------------------------------------------------------
-- 引数のカウント エラー : bone_select_all には 1 が必要です、0 を受け取りました


----------------------------------------------------------
-- ランタイム エラー: オブジェクトにこのインタフェースが実装されていません : BonesPro
0291名無しさん@お腹いっぱい。垢版2017/07/18(火) 14:23:18.04ID:QbqZQpNF
>>289
MixinInterfaceってのは簡単に言えばA(BonesProインタフェース)に実装された関数num_bonesを別のB(モディファイア)でも共有して利用するための仕組みのこと

A
└num_bones
B(Aを継承)

プラグイン内部をこんな感じで実装すると

B.num_bones

こんな感じでmaxscriptではAとBの違いを意識せずに使える

手元にプラグインがないから推測になるけど
$.modifiers[#BonesPro].bone_select_all()
みたいに書けばいいはず
0292名無しさん@お腹いっぱい。垢版2017/07/18(火) 15:49:51.54ID:+y6a6aPr
$.modifiers[#BonesPro].bone_select_all()でBone全選択行けました。
http://www.bonespro.com/download-order/からデモ版でやっていたので、それで出来なかったっぽいです。ライセンス版の方で動きました。ありがとうございます。

名前選択の方も、-- 変換できません : "Bone001" 入力: Boolean といったエラーメッセージをもとにtrue or false を入れてみたら動きました。

名前の指定で選択
$.modifiers[#BonesPro].BonesPro.bone_select_name "Bone001" true
名前の指定で選択解除
$.modifiers[#BonesPro].BonesPro.bone_select_name "Bone001" false

ありがとうございます。

この"Bone001"を配列に置き換えてfor文でループ処理して複数でも行けるようにしてみました。

A = #("Bone001","Bone002")
print A[1]
for i = 1 to 2 do (
$.modifiers[#BonesPro].BonesPro.bone_select_name A[i] true
)

ありがとうございます。大変勉強になりました。
0293名無しさん@お腹いっぱい。垢版2017/07/18(火) 15:52:50.34ID:+y6a6aPr
>>291
MixinInterfaceの解説はヘルプ見てもチンプンカンプンだったので、ありがとうございます。
まだ何となくですが、分かった気がしますw
色々ありがとうございました。
0294名無しさん@お腹いっぱい。垢版2017/12/30(土) 17:47:26.45ID:Hp7G0Fs4
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。

グーグル検索⇒『半藤のブブイウイウレレ』

T7Y1UVEC4V
レスを投稿する


ニューススポーツなんでも実況