エッジとエッジで位置あわせをしたい。
↓こうしたい
▼やり方
エッジと向きが一致する円柱を作り、
位置合わせしたいオブジェクトを円柱の子にして、
円柱を使って位置合わせをする。
まずエッジと重なるベクトルを作るために
エッジの両端にポイントヘルパーを作成する。
ポイントヘルパーを置く際は
スナップをONにして、頂点にスナップする様にする。
↓ポイントヘルパーを作成して、位置あわせに使いたいエッジを挟む様に配置
↓以下のスクリプトを実行
・スクリプト1
muki = $point001.pos - $point002.pos muki = normalize muki tra = matrixFromNormal muki hako = Cylinder() hako.transform = tra hako.radius = 1 hako.height = distance $point001 $point002 hako.pos = $point002.pos
・スクリプト2
muki = $point003.pos - $point004.pos muki = normalize muki tra = matrixFromNormal muki hako = Cylinder() hako.transform = tra hako.radius = 1 hako.height = distance $point003 $point004 hako.pos = $point004.pos
↓処理の説明
エッジを中心とする円柱オブジェクトを作りたい。
そのために、エッジと重なるベクトルを作り、
そのベクトルを元にmatrix3値を作る。
円柱を作りmatrix3値を割り当てる。
円柱の高さをエッジの長さと同じにする。
円柱とエッジの向きと長さは一致したので、
最後に円柱の位置を合わせる。
memo
Cylinder.dir に正規化したベクトルを割り当てるのでも良いかも。
muki = $point001.pos - $point002.pos ↑位置から位置を引くとベクトルが得られる。 得たベクトルを変数mukiに入れる。 muki = normalize muki ↑ベクトルの正規化(ベクトルの長さを1にする) 正規化したベクトルを変数mukiに入れる。(上書き) tra = matrixFromNormal muki ↑向きからmatrix3値を作り、変数traに入れる。 hako = Cylinder() ←シリンダーを作成 hako.transform = tra ←シリンダーのトランスフォームを変数traの中身にする hako.radius = 1 ←シリンダーの半径を1にする hako.height = distance $point001 $point002 ↑シリンダーの高さを、ポイント1と2の間の距離にする hako.pos = $point002.pos ↑シリンダーの位置をポイント2の位置にする
↓こうなる
↓位置あわせのショートカットキーは、Alt+Aキー
↓シリンダーとポイントヘルパーを非表示すると、
ぴったりとエッジで一致しているのが確認できる。
▼参考リンク
3ds Max 2019 ヘルプ: Matrix3 値
3ds Max 2019 ヘルプ: ノードの共通プロパティ、演算子、メソッド
3ds Max 2019 ヘルプ: 位置合わせ
3ds Max 2019 ヘルプ: 標準的なスナップ