MQObjectクラス

 MQObjectクラスは、オブジェクト中の頂点や面に関する情報を保持します。

基本操作 DeleteThis オブジェクトクラスをデリート(消滅)させます
GetUniqueID オブジェクトのユニークIDを取得します
Clone オブジェクトクラスの複製を作成します
Merge 2つのオブジェクトを合成します
Freeze 曲面や鏡面などの属性をフリーズさせて完全にポリゴン化します
GetName オブジェクトの名前を取得します
SetName オブジェクトの名前を設定します
頂点 GetVertexCount 頂点の数を取得します
GetVertex 頂点の位置を取得します
SetVertex 頂点の位置を設定します
GetVertexArray すべての頂点の位置を配列として一括取得します
AddVertex 頂点を追加します
DeleteVertex 頂点を削除します
GetVertexRefCount 頂点の参照数を取得します
GetVertexUniqueID 頂点に割り当てられているユニークIDを取得します
GetVertexIndexFromUniqueID ユニークIDが割り当てられている頂点のインデックスを取得します
GetVertexWeight 頂点の曲面に対する重みを取得します
SetVertexWeight 頂点の曲面に対する重みを設定します
CopyVertexAttribute 属性を別の頂点にコピーします
GetFaceCount 面数を取得します
GetFacePointCount 面に属する頂点の数を取得します
GetFacePointArray 面の頂点インデックスを配列として取得します
GetFaceCoordinateArray 面の各頂点のUV値を配列として取得します
SetFaceCoordinateArray 面の各頂点のUV値を配列として設定します
GetFaceVertexColor 面内の頂点の頂点カラーを取得します
SetFaceVertexColor 面内の頂点の頂点カラーを設定します
GetFaceMaterial 面に割り当てられたマテリアルのインデックスを取得します
SetFaceMaterial 面にマテリアルを割り当てます
GetFaceUniqueID 面に割り当てられているユニークIDを取得します
GetFaceIndexFromUniqueID ユニークIDが割り当てられている面のインデックスを取得します
AddFace 面を追加します
DeleteFace 面を削除します
InvertFace 面の向きを反転します
諸操作 OptimizeVertex 指定距離以下にある頂点を結合します
Compact 頂点・面のインデックスを切り詰めます
属性 GetVisible オブジェクトの表示・非表示状態を取得します
SetVisible オブジェクトの表示・非表示状態を設定します
GetPatchType 曲面のタイプを取得します
SetPatchType 曲面のタイプを設定します
GetPatchSegment 曲面の分割数を取得します
SetPatchSegment 曲面の分割数を設定します
GetShading スムージングのタイプを取得します
SetShading スムージングのタイプを設定します
GetSmoothAngle スムージング角度を取得します
SetSmoothAngle スムージング角度を設定します
GetMirrorType 鏡面のタイプを取得します
SetMirrorType 鏡面のタイプを設定します
GetMirrorAxis 鏡面の座標軸を取得します
SetMirrorAxis 鏡面の座標軸を設定します
GetMirrorDistance 鏡面の接続距離を取得します
SetMirrorDistance 鏡面の接続距離を設定します
GetLatheType 回転体のタイプを取得します
SetLatheType 回転体のタイプを設定します
GetLatheAxis 回転体の座標軸を取得します
SetLatheAxis 回転体の座標軸を設定します
GetLatheSegment 回転体の分割数を取得します
SetLatheSegment 回転体の分割数を設定します
GetDepth 階層の深さを取得します
SetDepth 階層の深さを設定します
GetFolding 子オブジェクトを折りたたんで非表示にしているかどうかを取得します
SetFolding 子オブジェクトを折りたたんで非表示にしているかどうかを設定します
GetLocking 編集禁止になっているかどうかを取得します
SetLocking 編集禁止になっているかどうかを設定します
ローカル座標 GetScaling ローカル座標変換行列の拡大成分を取得します
SetScaling ローカル座標変換行列の拡大成分を設定します
GetRotation ローカル座標変換行列の回転成分を取得します
SetRotation ローカル座標変換行列の回転成分を設定します
GetTranslation ローカル座標変換行列の移動成分を取得します
SetTranslation ローカル座標変換行列の移動成分を設定します
GetLocalMatrix ローカル座標の変換行列を取得します
SetLocalMatrix ローカル座標の変換行列を設定します
GetLocalInverseMatrix ローカル座標の逆変換行列を取得します

void MQObject::DeleteThis(void);

 オブジェクトクラスをデリート(消滅)させます。
 この関数はドキュメントに登録されていないオブジェクトにのみ有効で、ドキュメントに登録されたオブジェクトを消滅させる場合はMQDocement::DeleteObject()を使用しなければなりません。


UINT MQObject::GetUniqueID(void);

戻り値
ユニークID

(new in Rev2.40)
 オブジェクトのユニークIDを取得します。
 ユニークIDはMQDocument::AddObject()でドキュメントに登録した時点で割り当てられます。Clone()ではユニークIDは複製されません。


MQObject MQObject::Clone(void);

戻り値
複製されたオブジェクトクラス

 オブジェクトクラスの複製を作成します。


void MQObject::Merge(MQObject source);

source
合成元オブジェクトクラス

 sourceのオブジェクトクラスをthisへ合成します。sourceの内容は変化しません。


void MQObject::Freeze(DWORD flag);

flag
各属性のフラグ(複数指定可)
[MQOBJECT_FREEZE_PATCH] 曲面
[MQOBJECT_FREEZE_MIRROR] 鏡面
[MQOBJECT_FREEZE_LATHE] 回転体
[MQOBJECT_FREEZE_ALL] すべての属性

 曲面や鏡面などの属性をフリーズさせて完全にポリゴン化します。


void MQObject::GetName(char *buffer, int size);

buffer
名前を格納するバッファ
size
バッファの大きさ

 オブジェクトの名前をbufferへ格納します。


void MQObject::SetName(const char *buffer);

buffer
名前が格納されているバッファ

 オブジェクトの名前をセットします。


int MQObject::GetVertexCount(void);

戻り値
頂点配列の要素数

 頂点の数を取得します。
 実際に存在する頂点数ではなく配列要素の大きさであるので、正確な頂点数を調べるには各頂点ごとにMQObject::GetVertexRefCount()で0以外が返されるかどうかを調べる必要があります。


MQPoint MQObject::GetVertex(int index);

index
頂点のインデックス
戻り値
頂点位置

 指定した頂点の位置を取得します。
 MQObject::GetVertexRefCount()で0以外が返される頂点にのみ呼び出して下さい。


void MQObject::SetVertex(int index, MQPoint pts);

index
頂点のインデックス
pts
頂点位置

 指定した頂点の位置を設定します。


void MQObject::GetVertexArray(MQPoint *ptsarray);

ptsarray
位置配列

 オブジェクト中のすべての頂点の位置を配列として一括取得します。
 ptsarrayの配列要素数はMQObject::GetVertexCount()で返される数以上でなければなりません。


int MQObject::AddVertex(MQPoint p);

p
頂点の位置
戻り値
追加された頂点のインデックス

 頂点を追加します。
 メモリ不足で頂点データが確保できない場合は-1が返ります。


BOOL MQObject::DeleteVertex(int index);

index
頂点のインデックス
戻り値
削除の成功の可否

 頂点を削除します。
 オブジェクト中のどれかの面が指定した頂点を持つ場合は、その面もいっしょに削除されます。
 削除後もMQObject::GetVertexCount()の数は変化せず、削除されたインデックスへMQObject::GetVertexRefCount()は0を返すようになります。


int MQObject::GetVertexRefCount(int index);

index
頂点のインデックス
戻り値
参照カウント

 頂点がどれだけの面で使われているかを取得します。0が返された場合、頂点は存在しないことを示します。
 MQObject::AddVertex()により参照数は1がセットされ、MQObject::AddFace()で指定されるごとに値が1つずつ増え、MQObject::DeleteFace()により1つずつ減ります。


UINT MQObject::GetVertexUniqueID(int index);

index
頂点のインデックス
戻り値
頂点のユニークID

(new in Rev2.40)
 指定した頂点に割り当てられているユニークIDを取得します。
 ユニークIDはオブジェクト中の他の頂点と重複しない値です。Compact() などによりインデックスが変更されてもユニークIDは変わらないため、特定の頂点の認識に用いることができます。


int MQObject::GetVertexIndexFromUniqueID(UINT unique_id);

unique_id
頂点のユニークID
戻り値
頂点のインデックス(見つからない場合は-1)

(new in Rev2.40)
 指定したユニークIDが割り当てられている頂点のインデックスを取得します。頂点が削除されたり、元々存在しないユニークIDを指定した場合には-1が帰ります。


DWORD MQObject::GetVertexColor(int index);

index
頂点のインデックス
戻り値

 頂点カラーを取得します。
 32ビットのダブルワード値のうち、0xFF000000をマスクすることで頂点カラーが有効であるかどうかを調べます。マスク結果が0の場合頂点カラーは無効であり、0xFF000000の場合は有効です。有効の場合は0x000000FFが赤、0x0000FF00で緑、0x00FF0000青を示します。

(in Rev2.30)

 頂点カラーの保持方法の変更に伴い、GetVertexColor()は正しい動作を保証しません。MQObject::GetFaceVertexColor()に置き換える必要があります。

(in Rev2.40)
 この関数は廃止されました。


void MQObject::SetVertexColor(int index, DWORD color);

index
頂点のインデックス
color

 頂点カラーを設定します。
 頂点カラーを消去するするときはcolorに0を、有効にするときは0xFF000000に各色の値をORします。

(in Rev2.30)
 頂点カラーの保持方法の変更に伴い、SetVertexColor()は正しい動作を保証しません。MQObject::SetFaceVertexColor()に置き換える必要があります。

(in Rev2.40)
 この関数は廃止されました。


float MQObject::GetVertexWeight(int index);

index
頂点のインデックス
戻り値
ウェイト

 頂点の曲面に対する重みを取得します。
 ウェイトは0から1までの値になります。


void MQObject::SetVertexWeight(int index, float value);

index
頂点のインデックス
value
ウェイト

 頂点の曲面に対する重みを設定します。
 valueは0から1までの値でなければなりません。


void MQObject::CopyVertexAttribute(int vert1, MQObject obj2, int vert2);

vert1
オブジェクト中の頂点のインデックス
obj2
ソースのオブジェクト
vert2
obj2中の頂点のインデックス

 obj2中のvert2頂点に割り当てられた、位置を除いて隠し・固定・頂点カラー・ウェイトなどの属性をvert1にコピーします。


int MQObject::GetFaceCount(void);

戻り値
面配列の要素数

 面数を取得します。
 実際に存在する面数ではなく配列要素の大きさであるので、正確な面数を得るには各面ごとにMQObject::GetFacePointCount()で0以外が返されるかどうかを調べる必要があります。


int MQObject::GetFacePointCount(int face);

face
面のインデックス
戻り値
頂点数

 指定した面に属する頂点の数を取得します。
 0,2,3,4のいずれかが返されます。0の場合はMQObject::DeleteFace()により既に破棄され存在していないことを示します。


void MQObject::GetFacePointArray(int face, int *vertex);

face
面のインデックス
vertex
頂点インデックスを格納するバッファ

 指定した面の頂点インデックスを配列として取得します。
 vertexはMQObject::GetFacePointCount()で得られる数以上の大きさをもつ配列でなければなりません。


void MQObject::GetFaceCoordinateArray(int face, MQCoordinate *uvarray);

face
面のインデックス
uvarray
UV値を格納するバッファ

 指定した面の各頂点のUV値を配列として取得します。
 uvarrayはMQObject::GetFacePointCount()で得られる数以上の大きさをもつ配列でなければなりません。


void MQObject::SetFaceCoordinateArray(int face, MQCoordinate *uvarray);

face
面のインデックス
uvarray
UV値を格納したバッファ

 指定した面の各頂点のUV値を配列として設定します。
 uvarrayはMQObject::GetFacePointCount()で得られる数以上の大きさをもつ配列でなければなりません。


DWORD MQObject::GetFaceVertexColor(int face, int vertex);

face
面のインデックス
vertex
面内頂点のインデックス
戻り値

(new in Rev2.30)
 指定した面内の頂点の頂点カラーを取得します。
 vertexはMQObject::GetFacePointCount()で得られる数未満でなければなりません。
 32ビットのダブルワード値のうち、0xFF000000が不透明度、0x000000FFが赤、0x0000FF00で緑、0x00FF0000が青を示します。


void MQObject::SetFaceVertexColor(int face, int vertex, DWORD color);

face
面のインデックス
vertex
面内頂点のインデックス
color

(new in Rev2.30)
 指定した面内の頂点の頂点カラーを設定します。
 vertexはMQObject::GetFacePointCount()で得られる数未満でなければなりません。
 32ビットのダブルワード値のうち、0xFF000000が不透明度、0x000000FFが赤、0x0000FF00で緑、0x00FF0000が青を示します。


int MQObject::GetFaceMaterial(int face);

face
面のインデックス
戻り値
マテリアルのインデックス

 面に割り当てられたマテリアルのインデックスを取得します。インデックスはオブジェクトが属するドキュメント中のものになります。
 どのマテリアルも割り当てられていない「未着色面」の場合は-1が返されます。


void MQObject::SetFaceMaterial(int face, int material);

face
面のインデックス
material
マテリアルのインデックス

 指定した面にマテリアルを割り当てます。


UINT MQObject::GetFaceUniqueID(int face);

face
面のインデックス
戻り値
面のユニークID

(new in Rev2.40)
 指定した面に割り当てられているユニークIDを取得します。
 ユニークIDはオブジェクト中の他の面と重複しない値です。Compact() などによりインデックスが変更されてもユニークIDは変わらないため、特定の面の認識に用いることができます。


int MQObject::GetFaceIndexFromUniqueID(UINT unique_id);

unique_id
面のユニークID
戻り値
面のインデックス(見つからない場合は-1)

(new in Rev2.40)
 指定したユニークIDが割り当てられている面のインデックスを取得します。面が削除されたり、元々存在しないユニークIDを指定した場合には-1が帰ります。


int MQObject::AddFace(int count, int *index);

count
頂点の個数
index
頂点インデックス配列へのポインタ

 面を追加します。面は index に格納された count 個の頂点インデックスをもちます。
 countが2の場合は辺を意味します。
 メモリ不足で面データが確保できない場合は-1が返ります。


BOOL MQObject::DeleteFace(int index);

index
面のインデックス
戻り値
削除の成功の可否

 面を削除します。
 削除した面に属する頂点のうち、この面にしか属していないものは、自動的に削除されます。
 削除後も MQObject::GetFaceCount() の数は変化せず、削除された面インデックスへ MQObject::GetFacePointCount() は0を返すようになります。


BOOL MQObject::InvertFace(int index);

index
面のインデックス
戻り値
反転の成功の可否

 面の向きを反転します。


void MQObject::OptimizeVertex(float distance, MQBool *apply);

distance
結合させる距離
apply
頂点ごとの適用の可否

 オブジェクト中の distance 以下の距離にある頂点を結合します。
 配列数が頂点と同じ数を持つ apply がセットされている場合、頂点ごとに結合させるかどうかを決定することができます。apply が NULL の場合、すべての頂点が結合の対象となります。
 DXFのように、頂点情報が独立して存在せずに、面情報に直接頂点位置が記述されたファイルを読み込んだ後、このAPIを用いると非常に有効です。


void MQObject::Compact(void);

 オブジェクト中に存在する MQObject::GetVertexRefCount() で0を返す頂点や、 MQObject::GetFacePointCount() で0を返す面を切りつめて、配列のサイズを小さくします。
 切り詰めた後はインデックスが変化することに注意して下さい。
 データ量が小さくなるので、オブジェクトに対して大幅な操作を行った後は、このAPIを実行するのが望ましいです。


DWORD MQObject::GetVisible(void);

戻り値
[0] 非表示
[0以外] 表示

 オブジェクトの表示・非表示状態を取得します。
 戻り値は将来のバージョンでビットマスクによって頂点・辺・面の表示状態を示すように変更する予定です。


void MQObject::SetVisible(DWORD visible);

visible
[0] 非表示
[0xFFFFFFFF] 表示

 オブジェクトの表示・非表示状態を設定します。
 引数は将来のバージョンでビットマスクによって頂点・辺・面の表示状態を示すように変更する予定です。


DWORD MQObject::GetPatchType(void);

戻り値
曲面のタイプ
[MQOBJECT_PATCH_NONE] なし
[MQOBJECT_PATCH_SPLINE1] スプライン-タイプ1
[MQOBJECT_PATCH_SPLINE2] スプライン-タイプ2
[MQOBJECT_PATCH_CATMULL] Catmull-Clark曲面 (new in Rev2.30)

 オブジェクトに割り当てられた曲面のタイプを取得します。


void MQObject::SetPatchType(DWORD type);

type
曲面のタイプ(GetPatchTypeと同じ)

 オブジェクトに曲面のタイプを割り当てます。


int MQObject::GetPatchSegment(void);

戻り値
分割数

 オブジェクトの曲面の分割数を取得します。


void MQObject::SetPatchSegment(int segment);

segment
分割数

 オブジェクトに曲面の分割数を設定します。


int MQObject::GetShading(void);

戻り値
[MQOBJECT_SHADE_FLAT] スムージングなし
[MQOBJECT_SHADE_GOURAUD] スムージングあり

(new in Rev2.10)
 オブジェクトに設定されているスムージングのタイプを取得します。


void MQObject::SetShading(int type);

type
[MQOBJECT_SHADE_FLAT] スムージングなし
[MQOBJECT_SHADE_GOURAUD] スムージングあり

(new in Rev2.10)
 オブジェクトにスムージングのタイプを設定します。


float MQObject::GetSmoothAngle(void);

戻り値
スムージング角度

(new in Rev2.10)
 オブジェクトに設定されているスムージング角度を取得します。
 角度は0から180までの値になります。


void MQObject::SetSmoothAngle(float degree);

degree
スムージング角度

(new in Rev2.10)
 オブジェクトにスムージング角度を設定します。
 角度は0から180までの値を指定します。


int MQObject::GetMirrorType(void);

戻り値
鏡面のタイプ
[MQOBJECT_MIRROR_NONE] なし
[MQOBJECT_MIRROR_NORMAL] 左右分離鏡面
[MQOBJECT_MIRROR_JOIN] 左右接続鏡面

(new in Rev2.10)
 オブジェクトに設定されている鏡面のタイプを取得します。


void MQObject::SetMirrorType(int type);

type
鏡面のタイプ
[MQOBJECT_MIRROR_NONE] なし
[MQOBJECT_MIRROR_NORMAL] 左右分離鏡面
[MQOBJECT_MIRROR_JOIN] 左右接続鏡面

(new in Rev2.10)
 オブジェクトに鏡面のタイプを設定します。


DWORD MQObject::GetMirrorAxis(void);

戻り値
鏡面の座標軸(複数同時指定可)
[MQOBJECT_MIRROR_AXIS_X] X軸
[MQOBJECT_MIRROR_AXIS_Y] Y軸
[MQOBJECT_MIRROR_AXIS_Z] Z軸
[MQOBJECT_MIRROR_AXIS_LOCAL] ローカル座標 (new in Rev2.40)

(new in Rev2.10)
 オブジェクトに設定されている鏡面の座標軸を取得します。


void MQObject::SetMirrorAxis(DWORD axis);

axis
鏡面の座標軸(複数同時指定可)
[MQOBJECT_MIRROR_AXIS_X] X軸
[MQOBJECT_MIRROR_AXIS_Y] Y軸
[MQOBJECT_MIRROR_AXIS_Z] Z軸
[MQOBJECT_MIRROR_AXIS_LOCAL] ローカル座標 (new in Rev2.40)

(new in Rev2.10)
 オブジェクトに鏡面の座標軸を設定します。


float MQObject::GetMirrorDistance(void);

戻り値
接続距離

(new in Rev2.10)
 オブジェクトに設定されている鏡面の接続距離を取得します。


void MQObject::SetMirrorDistance(float dis);

dis
接続距離

(new in Rev2.10)
 オブジェクトに鏡面の接続距離を設定します。


int MQObject::GetLatheType(void);

戻り値
回転体のタイプ
[MQOBJECT_LATHE_NONE] なし
[MQOBJECT_LATHE_BOTH] 両面の回転体

(new in Rev2.10)
 オブジェクトに設定されている回転体のタイプを取得します。


void MQObject::SetLatheType(int type);

type
回転体のタイプ
[MQOBJECT_LATHE_NONE] なし
[MQOBJECT_LATHE_BOTH] 両面の回転体

(new in Rev2.10)
 オブジェクトに回転体のタイプを設定します。


DWORD MQObject::GetLatheAxis(void);

戻り値
回転体の座標軸
[MQOBJECT_LATHE_X] X軸
[MQOBJECT_LATHE_Y] Y軸
[MQOBJECT_LATHE_Z] Z軸

(new in Rev2.10)
 オブジェクトに設定されている回転体の座標軸を取得します。


void MQObject::SetLatheAxis(DWORD axis);

axis
回転体の座標軸
[MQOBJECT_LATHE_X] X軸
[MQOBJECT_LATHE_Y] Y軸
[MQOBJECT_LATHE_Z] Z軸

(new in Rev2.10)
 オブジェクトに回転体の座標軸を設定します。


int MQObject::GetLatheSegment(void);

戻り値
分割数

(new in Rev2.10)
 オブジェクトに設定されている回転体の分割数を取得します。


void MQObject::SetLatheSegment(int segment);

segment
分割数

(new in Rev2.10)
 オブジェクトに回転体の分割数を設定します。


int MQObject::GetDepth(void);

戻り値
階層の深さ

(new in Rev2.40)
 オブジェクトの階層の深さを取得します。ルート直下にあるオブジェクトは0を返します。
 Clone()では階層の深さは複製されません。


void MQObject::SetDepth(int depth);

depth
階層の深さ

(new in Rev2.40)
 オブジェクトの階層の深さを設定します。
 深さを設定する際は、階層の不整合が生じないよう注意してください。


BOOL MQObject::GetFolding(void);

戻り値
子階層が折りたたまれているか

(new in Rev2.40)
 オブジェクトパネル上で子オブジェクトを折りたたんで非表示にしているかどうかを取得します。


void MQObject::SetFolding(BOOL flag);

flag
子階層を折りたたむか

(new in Rev2.40)
 オブジェクトパネル上で子オブジェクトを折りたたんで非表示にしているかどうかを設定します。


BOOL MQObject::GetLocking(void);

戻り値
編集禁止かどうか

(new in Rev2.40)
 オブジェクトが編集禁止になっているかどうかを取得します。


void MQObject::SetLocking(BOOL flag);

flag
編集禁止かどうか

(new in Rev2.40)
 オブジェクトを編集禁止または編集可能に設定します。


MQPoint MQObject::GetScaling(void);

戻り値
ローカル座標の拡大率

(new in Rev2.40)
 ローカル座標変換行列の拡大成分を取得します。


void MQObject::SetScaling(MQPoint scale);

scale
ローカル座標の拡大率

(new in Rev2.40)
 ローカル座標変換行列の拡大成分を設定します。


MQAngle MQObject::GetRotation(void);

戻り値
ローカル座標の回転角

(new in Rev2.40)
 ローカル座標変換行列の回転成分を取得します。


void MQObject::SetRotation(MQAngle angle);

angle
ローカル座標の回転角

(new in Rev2.40)
 ローカル座標変換行列の回転成分を設定します。


MQPoint MQObject::GetTranslation(void);

戻り値
ローカル座標の移動量

(new in Rev2.40)
 ローカル座標変換行列の移動成分を取得します。


void MQObject::SetTranslation(MQPoint trans);

angle
ローカル座標の移動量

(new in Rev2.40)
 ローカル座標変換行列の移動成分を設定します。


MQMatrix MQObject::GetLocalMatrix(void);

戻り値
ローカル座標の変換行列

(new in Rev2.40)
 ローカル座標の変換行列を取得します。


void MQObject::SetLocalMatrix(const MQMatrix& mtx);

mtx
ローカル座標の変換行列

(new in Rev2.40)
 ローカル座標の変換行列を設定します。


MQMatrix MQObject::GetLocalInverseMatrix(void);

戻り値
ローカル座標の逆変換行列

(new in Rev2.40)
 ローカル座標の逆変換行列を取得します。