MAXScript 対応 (Pencil+ 4)

Pencil+ 4 の いくつかの MAXScript インターフェイスは更新されており、 Pencil+ 3 よりも利便性が大きく向上しました。 MAXScript の仕様については 3dsMax の [MAXScript ヘルプ ] をご覧ください。

Pencil+ 4 ライン / プロパティ・メソッド

linesets
ラインセットの取得や設定を行うための Array です。 
Pencil+ 3 ではメソッドでしたが、プロパティに変更されました。


solveDuplicatedMtlsByName (メソッド)
[ マテリアル リスト更新 ボタン ] と同様の処理を実行します。ラインセット中のマテリアルがシーンのオブジェクトに割り当てられていない場合、 そのマテリアルと同名のマテリアルがシーンに存在するならば置換を行います。

戻り値:置換されたマテリアルの個数
引数:なし


removeUnusedMtls (メソッド)
ラインセット中のマテリアルがシーンのオブジェクトに割り当てられていない場合、 マテリアルリストから除外します。

戻り値:除外されたマテリアルの個数 
引数:なし

Pencil+ 4 ラインセット / プロパティ

objects
オブジェクトの取得や設定を行うための Array です。


mtls
マテリアルの取得や設定を行うための Array です。

[Pencil+ 4 ラインセット / 各ブラシ設定へのアクセス ]
  • brush
  • brushOutline
  • brushObject
  • brushIntersection
  • brushSmoothingGroup
  • brushMaterialID
  • brushNormalAngle
  • brushWire
  • brushSelectedEdge
  • brush_Hidden
  • brushOutline_Hidden
  • brushObject_Hidden
  • brushIntersection_Hidden
  • brushSmoothingGroup_Hidden
  • brushMaterialID_Hidden
  • brushNormalAngle_Hidden
  • brushWire_Hidden
  • brushSelectedEdge_Hidden

Pencil+ 4 マテリアル / プロパティ

zones
ゾーンの取得や設定を行うための Array です。 
Pencil+ 3 ではメソッドでしたが、プロパティに変更されました。

Pencil+ 4 マテリアル / ライン関連機能 / プロパティ

maskingOffObjects
「対象の隠線を可視線として描画」のオブジェクトの取得や設定を行うための Array です。
Pencil+ 3 ではメソッドでしたが、プロパティに変更されました。 


maskingOffMtls
「対象の隠線を可視線として描画」のマテリアルの取得や設定を行うための Array です。
Pencil+ 3 ではメソッドでしたが、プロパティに変更されました。


maskHiddenLinesObjects
「対象の隠線を遮へいする」のオブジェクトの取得や設定を行うための Array です。
Pencil+ 3 ではメソッドでしたが、プロパティに変更されました。


maskHiddenLinesMtls
「対象の隠線を遮へいする」のマテリアルの取得や設定を行うための Array です。
Pencil+ 3 ではメソッドでしたが、プロパティに変更されました。

カーブ値を設定・取得

カーブコントロールを操作するための Pencil_4_Curve_Control_Interface クラスを新たに定義しました。
また上記クラスを取得するためのプロパティを以下の箇所に追加しました。

  • Pencil_4_LineReduction : curveIF
  • Pencil_4_BrushDetail : sizeCurveIF
  • Pencil_4_BrushDetail : alphaCurveIF
  • Pencil_4_Stroke : sizeCurveIF
  • Pencil_4_Stroke : alphaCurveIF

例えば、効果の最初に設定されている Pencil+ 4 ラインのカーブへのアクセスは次とおりです。

ccif1 = (getEffect 1).linesets[1].sizeReduction.curveIF
ccif2 = (getEffect 1).linesets[1].brush.detail.alphaCurveIF

Pencil_4_Curve_Control_Interface のプロパティ / メソッド

curveControl
操作対象のカーブコントロールを設定 / 取得します。 Pencil_4_LineReduction.curveIF などのプロパティからインスタンスを取得した場合、カーブコントロールはあらかじめ設定されています。


controlCurveIndex
このインターフェイスクラスで操作するカーブのインデックスを設定 / 取得します。初期値は0です。


numPoints
カーブのポイント数を設定 / 取得します。


pointsX
カーブのポイントの X 座標を float の Array で設定 / 取得します。


pointsY
カーブのポイントの Y 座標を float の Array で設定 / 取得します。


inTangentsX
カーブのポイントのイン タンジェント X 座標を float の Array で設定 / 取得します。


inTangentsY
カーブのポイントのイン タンジェント Y 座標を float の Array で設定 / 取得します。


outTangentsX
カーブのポイントのアウト タンジェント X 座標を float の Array で設定 / 取得します。


outTangentsY
カーブのポイントのアウト タンジェント Y 座標を float の Array で設定 / 取得します。


flags
カーブのポイントのフラグを integer の Array で設定 / 取得します。
フラグの詳細は 3ds Max SDK を参照して下さい。
http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__cpp_ref_class_curve_point_html


getValues(メソッド)
カーブの値を取得します。
戻り値 : 引数の X 座標に対応するカーブ値の float の Array
引数 : 値を求める X 座標の float の Array


カーブを右肩下がりの直線に変更するサンプルスクリプト

ccif1.numPoints = 2
ccif1.pointsY = #(1.0, 0.0)
ccif1.flags[1] = ccif1.flags[1] - (bit.and ccif1.flags[1] 3) + 2  -- +1 Bezier / +2 Corner / +3 BezierCorner 
ccif1.flags[2] = ccif1.flags[2] - (bit.and ccif1.flags[2] 3) + 2

-- タンジェントを空にする
ccif1.inTangentsX= #(0.0, 0.0)
ccif1.inTangentsY= #(0.0, 0.0)
ccif1.outTangentsX= #(0.0, 0.0)
ccif1.outTangentsY= #(0.0, 0.0)

-- 値を取得
values = ccif1.getValues #(0.0, 0.25, 0.5, 0.75, 1.0)

Tips!

サンプルスクリプト

  • シーンのオブジェクトに単一のゾーンを持つ Pencil+ 4  マテリアルを割り当てます。
    pcl4mtl_0.ms
  • シーン上の Pencil+ 4  マテリアルのゾーンをデフォルト設定に戻します。
    pcl4mtl_1.ms
  • Pencil+ 4  ラインを効果に割り当てラインセットを追加します。
    pcl4line.ms
  • Pencil+ 4  ラインのラインセットを複製します。
    pcl4lineset_copy.ms
  • レンダーエレメントに Pencil+ 4  マテリアル要素を追加します。
    pcl4mtl_elem.ms
  • レンダーエレメントに Pencil+ 4  ライン要素を追加します。
    pcl4line_elem.ms

Pencil+ for 3ds Max チュートリアル