メッシュ・ポリゴン
MaxScript チートシート の章一覧
メッシュの中身(頂点・面)を読み書きする操作です。ポリゴンは polyop、メッシュ(TriMesh)は meshop / グローバル関数 と、対象で関数群が分かれます。
編集ポリゴン(Editable_Poly)
polyop.getNumVerts $ -- 頂点数
polyop.getVert $ 1 -- 頂点1の座標(point3)
polyop.setVert $ 1 [0,0,10] -- 頂点1を移動
polyop.getNumFaces $ -- 面数
polyop.getFaceVerts $ 1 -- 面1を構成する頂点番号
polyop.getNumEdges $ -- エッジ数
- ⚠️ 頂点・面の番号は 1始まり です。
setVert後はupdate $で表示が更新されます。
編集メッシュ(Editable_Mesh / TriMesh)
getNumVerts $ -- 頂点数
getVert $ 1 -- 頂点1の座標
setVert $ 1 [0,0,0] -- 頂点1を移動
getNumFaces $ -- 面数(三角形)
getFace $ 1 -- 面1の頂点インデックス
update $ -- 変更を反映
- ⚠️ メッシュ(
getVert等)とポリゴン(polyop.getVert等)は 別 API です。対象のクラスに合わせて使い分けます。
サブオブジェクト選択(ビット集合)
polyop.setVertSelection $ #{1..10} -- 頂点1〜10を選択
polyop.getVertSelection $ -- 選択中の頂点(BitArray)
polyop.setFaceSelection $ #{1,3,5} -- 面を選択
polyop.getFaceSelection $ -- 選択中の面
#{1..10}は BitArray(ビット集合) で、サブオブジェクト選択の標準形式です。
全頂点をループする
-- 全頂点を Z 方向に持ち上げる(編集ポリゴン)
for i in 1 to (polyop.getNumVerts $) do
(
v = polyop.getVert $ i
polyop.setVert $ i [v.x, v.y, v.z + 10]
)
update $
法線・UV
polyop.getFaceNormal $ 1 -- 面1の法線
getNormal $ 1 -- メッシュ頂点1の法線(TriMesh)
polyop.getMapVert $ 1 5 -- マップチャンネル1の頂点5(UV座標)
polyop.getNumMapVerts $ 1 -- マップチャンネル1の UV頂点数
meshop.getMapFace $ 1 3 -- メッシュのマップ面
- UV はマップチャンネル番号(既定は
1)を指定して読み書きします。チャンネル0は頂点カラー、-1/-2は特殊チャンネルです。
スナップショット(変形結果を固定メッシュ化)
m = snapshotAsMesh $ -- 現在の評価結果を TriMesh として取得(非破壊)
m.numverts
snapshotAsMeshは モディファイア適用後の結果 を読み取るのに便利です(元オブジェクトは変えません)。
落とし穴まとめ
- 頂点・面の番号は 1 始まり。
- ポリゴン(
polyop)とメッシュ(meshop/グローバル関数)は別 API。 - サブオブジェクト選択は
#{...}の BitArray。 - 頂点を直接書き換えたら
update $で反映する。
関連
- 対象を選ぶ / クラスを判定する: 「選択・取得」章
- 使える関数を調べる(
showInterfaces polyop): 「デバッグ・調査」章