ページトップへ戻る

DIGITAL DNA
2019.08.12 - 2019.10.12
Max Script 基本文法:ループ・繰り返しの処理

目次
「MaxScriptヘルプ」の見かた
デバッグ用に変数の値などを表示したい
スクリプトファイルの拡張子
コメントの記述

・MaxScript基本文法
 ├変数
 ├演算子
 ├文字列
 ├配列
 ├ループ
 ├条件分岐・エラー回避処理
 └関数(Function)



ループ
ヘルプ
[HELP] MAXScript 言語リファレンス > プログラム フロー制御 > For ループ
[HELP] MAXScript に関する質問と回答 > 高速で優れたスクリプトの作成 > 処理速度を上げる方法 > for ... collect と for ... do のパフォーマンスの比較


基本
ループ処理で使われる主な構文は下記の通り。

for … to … do
for … to … by … do
for … in … do
while … do
do … while
exit


for … to … do
解説とメモ
to で指定した条件を満たすあいだ処理を実行します。
自動的に1ずつ加算しながらループします。(※for … to … by … do のbyを省略した書き方です)


基本的な書式
for [初期値] to [ループ終了となる条件式] do (
  [処理内容]
)


Max Scriptのサンプル
$Box001から$Box005まで選択する処理の例。
(
	clearSelection()
	local objlist = #($Box001,$Box002,$Box003,$Box004,$Box005,$Box006)
	for i=1 to i=5 do
	(
		selectMore objlist[i]
	)
)


for … to … by … do
解説とメモ
増分を指定できるループ処理です。
by 2 と書くとループしながら自動的に2ずつ加算されます。
by を指定しなかった場合、自動的に1ずつ加算されます。


基本的な書式
for [初期値] to [ループ終了となる条件式] by [ループするごとに加算する値] do (
  [処理内容]
)


Max Scriptのサンプル
1つおきに選択($Box001,$Box003,$Box005を選択)する処理の例。
(
	clearSelection()
	local objlist = #($Box001,$Box002,$Box003,$Box004,$Box005,$Box006)
	for i=1 to i=6 by 2 do
	(
		selectMore objlist[i]
	)
)


for … in … do
解説とメモ
配列に含まれているすべてに対して処理を行います。


基本的な書式
for [配列から取り出した値を格納する変数] in [配列名] do (
    [処理内容]
)


Max Scriptのサンプル
$Box001から$Box006まですべて選択する。
(
	clearSelection()
	local objlist = #($Box001,$Box002,$Box003,$Box004,$Box005,$Box006)
	for obj in objlist do
	(
		selectMore obj
	)
)


while … do
ヘルプ
[HELP]MAXScript 言語リファレンス > プログラム フロー制御 > While ループと Do ループ


解説とメモ
while で指定した条件を満たすあいだ処理を行います。


基本的な書式
while [条件式] do (
    [処理内容]
)


Max Scriptのサンプル
$Box006から$Box001まで選択するスクリプト。
(
	clearSelection()
	local objlist = #($Box001,$Box002,$Box003,$Box004,$Box005,$Box006)
	i = 6
	while i > 1 do
	(
		selectMore objlist
		i = i - 1
	)
)


do … while
ヘルプ
[HELP]MAXScript 言語リファレンス > プログラム フロー制御 > While ループと Do ループ


解説とメモ
whileで指定した条件を満たすあいだ処理を行います。条件判定が最後にあるため、必ず1回は処理が行われます。


基本的な書式
do (
    [処理内容]
)
while [条件式]


Max Scriptのサンプル
$Box006から$Box001まで選択するスクリプト。
(
	clearSelection()
	local objlist = #($Box001,$Box002,$Box003,$Box004,$Box005,$Box006)
	i = 6
	do (
		selectMore objlist
		i = i - 1
	) while i > 1 
)


exit
ヘルプ
[HELP]MAXScript 言語リファレンス > プログラム フロー制御 > ループ終了
[HELP] MAXScript に関する質問と回答 > 処理速度を上げる方法 > return、break、exit、continue を使用しない


解説とメモ
exit でループを抜けることができます。
ただし、処理速度を上げるにはexitは使用しないほうが良いそうです。


Max Scriptのサンプル
whileでBox005まで選択するよう条件を指定しているが、実際には$Box003以降は強制的にループを抜ける例。
(
	clearSelection()
	local objlist = #($Box001,$Box002,$Box003,$Box004,$Box005,$Box006)
	i = 1
	while i<=5 do
	(
		selectMore objlist[i]
		i=i+1
		if i>3 then exit
	)
)