MAXSCRIPT_Vol1

このエントリーをはてなブックマークに追加
231名無しさん@お腹いっぱい。:2012/03/09(金) 13:20:58.35 ID:UWqUBMhr
ボーン(biped以外)の表示非表示を切り替えたいんだけど、

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

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

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

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

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



スクリプトは今回初めて学ぶので単純な原因をわかっていないのかもしれませんが、
もしよかったらアドバイスをよろしくお願いします。
235名無しさん@お腹いっぱい。:2012/06/22(金) 02:54:00.37 ID: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
でモディファイア引っ張ってくる
236名無しさん@お腹いっぱい。:2012/07/23(月) 13:33:07.25 ID:CQfkCaq4
スクリプトを学ぼうといろいろチュートリアルやらなんやらを集めてはみたものの、
どれも最初はBOXの作り方なんだよな…

基礎が一番重要なのはわかっちゃいるけど、もうちょっと先からお願いしたいわ…
237名無しさん@お腹いっぱい。:2012/07/23(月) 14:03:22.92 ID:CPiDyMRn
読み飛ばせばいいやん
238名無しさん@お腹いっぱい。:2012/08/01(水) 20:39:06.10 ID:iBfM2Ns7
表示パネル→表示カラーロールアウトで
ワイヤフレームとシェーディングのカラーをそれぞれ変更できますが、
実行するたびにオブジェクトとマテリアルが切り替わるようなスクリプトを書いて欲しいです。
結構頻繁に切り替えるのですが、そのたびにパネルを開くが面倒で…
239名無しさん@お腹いっぱい。:2012/08/02(木) 02:29:02.11 ID:6rgCqgW8
手作業でやれやボケ
240名無しさん@お腹いっぱい。:2012/08/02(木) 09:02:59.28 ID:nppKpiou
書き方が知りたいんじゃなくて書いて欲しいって、どんだけやねん。
241名無しさん@お腹いっぱい。:2012/08/02(木) 12:35:09.50 ID:pjnwXFe7
こんな過疎スレで釣られんな無視だ
242名無しさん@お腹いっぱい。:2012/08/10(金) 16:44:19.02 ID:L9KXrC8I
sage進行で過疎ってる割りにレスは早い…住人はいるんだな
243名無しさん@お腹いっぱい。:2012/11/12(月) 17:36:06.13 ID:pFmIk8Ww
選択した複数のオブジェクトのアニメーションカーブにサイクルやループ属性をつけるスクリプトって可能でしょうか?
カーブエディタが開いているだけで重いので、カーブエディタを開かずにループ属性をつけたいのです
244名無しさん@お腹いっぱい。:2012/11/12(月) 23:39:54.74 ID:JSsC7Orb
可能かどうかも含めてリファレンスに全部載ってるよ
245名無しさん@お腹いっぱい。:2013/03/15(金) 16:23:15.57 ID:3W8hD6Qc
選択中のオブジェクト+子供を全選択するようなスクリプトを書きたいのですが、
スクリプトリファレンスのトレーニングやチュートリアルをみても、選択に関するものが見当たりません…
そもそも"指定したboxを選択する"書き方すらわからない素人ですが、どのあたりを見ればいいでしょうか?
246名無しさん@お腹いっぱい。:2013/03/15(金) 17:51:32.07 ID:Hrrb6kT4
リスナーのマクロレコーダの使用可能にするにチェック入れると、基本的なコマンド類は
リスナーにコマンドが現れるんで、そのコマンド見てMaxScriptのヘルプで検索する。

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

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

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

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

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

objectsはObjectSet値
$*はPathName値

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

のようにして、有効の時に押せば無効になるようにしたのですが、
無効の時に押しても有効になりません…
書き方がおかしいのでしょうか?
260名無しさん@お腹いっぱい。:2013/09/20(金) 16:39:14.32 ID:seUHEVg3
×if (autosave.Enable = true)
○if (autosave.Enable == true)
261名無しさん@お腹いっぱい。:2013/09/23(月) 17:48:48.98 ID:9DKAKKE/
Boolのトグルにif文はいらんよ
autosave.Enable = not autosave.Enable
262260:2013/09/24(火) 01:00:49.87 ID:mn/UtfSO
あ、そりゃそうだ。
263名無しさん@お腹いっぱい。:2013/09/27(金) 18:56:32.77 ID:TYSRycw4
レイヤーマネージャーのボタンのように、一回押すとオレンジになり
もう一回押すと戻るようなマクロスクリプトはどのように書いたらよいでしょうか?
264名無しさん@お腹いっぱい。:2013/09/29(日) 22:42:11.86 ID:Kn62Wyl+
CheckButton
265264:2013/09/30(月) 15:00:16.83 ID:oCM9TbaB
ごめん、勘違いしてた
ツールバーのボタンのことならisCheckedっていうイベントがあって
その中で真偽値を返すことで押下状態を制御できるよ
http://docs.autodesk.com/3DSMAX/16/JPN/MAXScript-Help/index.html?url=files/GUID-6E21C768-7256-4500-AB1F-B144F492F055.htm,topicNumber=d30e639208
266名無しさん@お腹いっぱい。:2013/10/30(水) 11:56:10.28 ID:9LvRQ0hj
オブジェクトプロパティの「フリーズをグレーで表示」をボタンにしたいのですが、
マクロレコーダーに出た$.showFrozenInGray = onだけでは反映されません。
何か足りないのがあるのでしょうか?
267名無しさん@お腹いっぱい。:2013/10/30(水) 16:50:12.49 ID:S4wv1NoX
いけるはずだけど。

$は選択オブジェクトを表してるから、オブジェクトが選択されてないか、
もしくは複数選択されてるとか。
268名無しさん@お腹いっぱい。:2013/10/30(水) 18:14:49.54 ID:9LvRQ0hj
>>267
単体で試したら確かにいけました。
複数選択時はまた違うのでしょうか?
269名無しさん@お腹いっぱい。:2013/10/30(水) 21:43:19.30 ID:j90ZXGHA
これなら選択なし/単体/複数でも対応可能
selection.showFrozenInGray = true

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

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

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

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

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

fn redrawviews_p = print "Viewports Redrawn"
registerRedrawViewsCallback redrawviews_p

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

unregisterRedrawViewsCallback redrawviews_p

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

モヤモヤしてます・・・
275名無しさん@お腹いっぱい。:2014/09/17(水) 14:21:03.60 ID:ZrjisZBc
今試してみたけど、うちは2014でも止まるよ。SP5。
276名無しさん@お腹いっぱい。:2014/09/17(水) 20:16:44.80 ID:29SZFRZ4
>>275
なんだかよくわかりませんでしたが、max再起動したら正常に動作しました。
ありがとうございました。
277名無しさん@お腹いっぱい。:2014/09/19(金) 11:24:09.41 ID:B80uezAN
>>276
登録したスクリプトがエラーを吐くと正常に登録解除できない
その状況を作らないために登録する関数は
実処理を行う関数を呼び出すだけの内容にしておくといいってリファレンスにも載ってるよ
さらにtry文で囲んでおくと安全

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

--解除
unregisterRedrawViewsCallback redrawviews_handler

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

プログラミングの予備知識ゼロの人がmaxscriptを一人前に出来るようになるまで
どれくらい時間が必要なんでしょうかね。本人次第の所はありますが。。。
279本田:2014/11/27(木) 00:59:22.99 ID:5yIvS+Qc
Introduction to MaxScript - Creating a Voxel Tree - Part 1
https://www.youtube.com/watch?v=ZoIY5lT6IV4
Introduction to MaxScript - Creating a Voxel Tree - Part 2
https://www.youtube.com/watch?v=NxI-ru5yAa0
280名無しさん@お腹いっぱい。
>>279
ただのBoxで構成された木を作る動画
ボクセルツリーという言葉に期待した人は残念でした