MFnMeshクラスのsplit関数

誰にも頼まれてないけど仕様を日本語に訳しておくよ。

MFnMeshクラスのsplit関数

MStatus MFnMesh::split( MIntArray & placements,
MIntArray & edgeList,
MFloatArray & edgeFactors,
MFloatPointArray & internalPoints
)


スポンサーリンク

この関数は、エッジとフェースを連続的に分割します。placements配列の要素は、列挙型SplitPlacementでなければなりません。placements配列中でSplitPlacement::kOnEdgeと設定された要素は、対応するエッジIDとファクターがedgeList配列とedgeFactors配列にもそれぞれ含まれている必要があります。SplitPlacement::kInternalPointと設定された要素についても同様に、internalPoints配列にも含まれている必要があります。それぞれの要素は、3つの配列全て同じ順序で指定する必要がありますから、placements配列の最初にあるSplitPlacement::kOnEdgeと設定されている要素は、edgeList配列とedgeFactors配列の最初の要素と対応させます。

もしも頂点の内1つでも作成出来ない場合、アルゴリズム全体が失敗します。同じエッジを2回以上分割することはできません。分割の開始・終了もエッジ上である必要があります。これはつまり、placements配列の最初と最後の要素は必ずSplitPlacement::kOnEdgeに設定されていなければならないということです。placements配列がエッジ上で開始・終了しない場合、コードは「成功」ステータスを返しますがメッシュは分割されません。。

NOTE:このメソッドで使用されるアルゴリズムはpolySplitコマンドと同じで、同様の制限があります。

引数:

  • [in] placements

列挙型SplitPlacementが設定された要素を格納する配列。これは、分割で新しい頂点を配置する場所(エッジ上かフェース上か)を表しています。

  • [in] edgeList

分割するエッジのIDを分割順に格納する配列。この配列には、placements配列のSplitPlacement::kOnEdgeに設定されている要素と同じ数だけの要素が必要です。

  • [in] edgeFactors

エッジ上の分割位置を表す内分比ファクター(範囲0~1)、を格納する配列。この配列の持つ要素の数は、edgeList配列が持つ要素の数と同じである必要があります。


スポンサーリンク
  • [in] internalPoints

既存のフェース上に新しく追加する頂点の位置座標を格納する配列。この配列には、placements配列のSplitPlacement::kInternalPointに設定されている要素と同じ数だけの要素が必要です。この配列は空でもかまいません。追加する頂点は、前のエッジIDと次のエッジIDの間にあるフェース上で指定する必要があります。

返り値:

Status Code

Status Codes:

  • MS::kSuccess

The method was successful.

  • MS::kInvalidParameter

One of the following parameter errors

  • MS::kIndexOutOfRange

One or more of the edge IDs are not on the mesh.

  • MS::kValueOutOfRange

One or more of the edge factors are not within the [0,1] range

  • MS::kInvalidParameter

The split algorithm could not be completed successfully or the array sizes are not appropriate.

  • MS::kNotFound

The given placements list is empty.

  • MS::kFailure

An object error has occurred.

  • MS::kObjectDoesNotExist

The base stucture was not initialized properly

  • MS::kShapeHasNoGeometry

The mesh shape has no geometry to work on

Examples:

meshOpFtyAction.cpp.

そんで分割方法のフラグとなる列挙型。(intにキャストしてMIntArrayに入れる)

SplitPlacement

<span class="synType">enum</span> MFnMesh::SplitPlacement

分割点の決定方法を指定するフラグ。

Enumerator:

  • kOnEdge

エッジに沿って新しい頂点を配置し、エッジを 2 つの新しいエッジに分割する。

  • kInternalPoint

フェース内の特定座標に新しい頂点を挿入する。

  • kInvalid

無効

今まで知らなかったんだけど、C++の列挙型ってintと相互にキャストできるのね。(内部では整数が回るらしい)

コーディングミスを防ぐ目的でenumを使うって感じみたい。


スポンサーリンク

関連記事

書籍『ROSプログラミング』

ニンテンドー3DSのGPU PICA200

オーバーロードとオーバーライド

ZBrush 2021.6のMesh from Mask機能を使ってみる

CGのためのディープラーニング

『ローグ・ワン/スター・ウォーズ・ストーリー』のVFXブレイクダウン まとめ

ZBrushでアマビエを作る その2

ZBrushのハードサーフェイス用ブラシ

ZBrushでアヴァン・ガメラを作ってみる 甲羅のバランス調整

GoB:ZBrushとBlenderを連携させるアドオン

GAN (Generative Adversarial Networks):敵対的生成ネットワーク

Blendify:コンピュータービジョン向けBlenderラッパー

TVML (TV program Making language)

Javaで作られたオープンソースの3DCGレンダラ『Sunflow』

ZBrushで仮面ライダー3号を造る 仮面編 ZRemesher

ポリゴン用各種イテレータと関数セット

ZBrushで仮面ライダー3号を造る ベース編

フリーのUV展開ツール Roadkill UV Tool

ZBrushで仮面ライダー3号を造る 仮面編 Clay Polish

ZBrushでアヴァン・ガメラを作ってみる 爪とトゲを追加

『PIXARのひみつ展』に行ってきた

ZBrushでゴジラ2001を作ってみる 姿勢の変更

『スター・ウォーズ 最後のジェダイ』のVFXブレイクダウン まとめ

生物の骨格

ラクガキの立体化 胴体の追加

書籍『開田裕治 怪獣イラストテクニック』

タマムシっぽい質感

Mayaのプラグイン開発

Leap MotionでMaya上のオブジェクトを操作できるプラグイン

OpenCV3.3.0でsfmモジュールのビルドに成功!

PolyPaint

ZBrushでアヴァン・ガメラを作ってみる パーツ分割

デザインのリファイン再び

ZBrushでアヴァン・ガメラを作ってみる 脚のポーズ調整

Iridescence:プロトタイピング向け軽量3D可視化ライブラリ

Rerun:マルチモーダルデータの可視化アプリとSDK

openMVG:複数視点画像から3次元形状を復元するライブラリ

Polyscope:3Dデータ操作用GUIライブラリ

ZBrush 2018へのアップグレード

Photogrammetry (写真測量法)

ポリ男からMetaHumanを作る

Unityで360度ステレオVR動画を作る

コメント