MQDocumentクラスは、オブジェクトや材質などのデータを管理するクラスです。
オブジェクト | |
GetObjectCount | オブジェクトの数を取得します |
GetObject | 指定されたインデックスのオブジェクトクラスへのポインタを取得します |
GetObjectFromUniqueID | 指定されたユニークIDのオブジェクトクラスへのポインタを取得します |
GetCurrentObjectIndex | カレントオブジェクトのインデックスを取得します |
SetCurrentObjectIndex | カレントオブジェクトをインデックス指定します。 |
AddObject | オブジェクトクラスをドキュメントに登録します |
InsertObject | オブジェクトを指定してオブジェクトの後ろに登録します。 |
RemoveObject | オブジェクトを削除せずに外します。 |
DeleteObject | オブジェクトを外し、オブジェクトクラスを消滅させます |
GetObjectIndex | オブジェクトのインデックスを取得します |
GetParentObject | 指定したオブジェクトの親オブジェクトを取得します |
GetChildObjectCount | オブジェクトに属する子オブジェクトの数を取得します |
GetChildObject | オブジェクトの子オブジェクトを取得します |
GetGlobalMatrix | オブジェクトのグローバル座標変換行列を取得します |
GetGlobalInverseMatrix | オブジェクトのグローバル座標逆変換行列を取得します |
GetUnusedObjectName | 使用されていないオブジェクトの名前を取得します |
Triangulate | 多角形を複数の三角形に分割します |
マテリアル | |
GetMaterialCount | マテリアルの数を取得します |
GetMaterial | 指定されたインデックスのマテリアルクラスへのポインタを取得します |
GetMaterialFromUniqueID | 指定されたユニークIDのマテリアルクラスへのポインタを取得します |
GetCurrentMaterialIndex | カレントマテリアルのインデックスを取得します |
SetCurrentMaterialIndex | カレントマテリアルをインデックス指定します |
AddMaterial | マテリアルクラスをドキュメントに登録します |
DeleteMaterial | ドキュメントからマテリアルを外し、マテリアルクラスを消滅させます |
GetUnusedMaterialName | 使用されていないマテリアルの名前を取得します |
メモリ | |
Compact | ドキュメント中の配列に存在するNULLを切り詰めます |
選択 | |
ClearSelect | ドキュメント中の指定した要素の選択をすべて解除します |
AddSelectVertex | 頂点を選択します |
DeleteSelectVertex | 頂点の選択を解除します |
IsSelectVertex | 頂点が選択されているかどうかをチェックします |
AddSelectLine | ラインを選択します |
DeleteSelectLine | ラインの選択を解除します |
IsSelectLine | ラインが選択されているかどうかをチェックします |
AddSelectFace | 面を選択します |
DeleteSelectFace | 面の選択を解除します |
IsSelectFace | 面が選択されているかどうかをチェックします |
AddSelectUVVertex | 頂点をUV選択します |
DeleteSelectUVVertex | 頂点のUV選択を解除します |
IsSelectUVVertex | 頂点がUV選択されているかどうかをチェックします |
ユーザーデータ | |
CreateObjectUserData | オブジェクト用のユーザーデータのIDを生成します |
DeleteObjectUserData | オブジェクト用のユーザーデータのIDを削除します |
FindObjectUserData | オブジェクト用のユーザーデータのIDを検索します |
CreateVertexUserData | 頂点用のユーザーデータのIDを生成します |
DeleteVertexUserData | 頂点用のユーザーデータのIDを削除します |
FindVertexUserData | 頂点用のユーザーデータのIDを検索します |
CreateFaceUserData | 面用のユーザーデータのIDを生成します |
DeleteFaceUserData | 面用のユーザーデータのIDを削除します |
FindFaceUserData | 面用のユーザーデータのIDを検索します |
CreateMaterialUserData | 材質用のユーザーデータのIDを生成します |
DeleteMaterialUserData | 材質用のユーザーデータのIDを削除します |
FindMaterialUserData | 材質用のユーザーデータのIDを検索します |
マッピング | |
FindMappingFile | ファイル名を絶対パスに変換します |
GetMappingImageSize | マッピング画像のサイズを取得します。 |
GetMappingImage | マッピング画像を取得します。 |
シーン | |
GetScene | シーンを取得します |
int MQDocument::GetObjectCount(void);
ドキュメント中のオブジェクトの数を取得します。
実際に存在するオブジェクト数ではなく配列要素の大きさが返されるので、
MQDocument::DeleteObject() によりNULLになったものも数として入れられます。正確な数を得るには
MQDocument::GetObject() によりNULL以外のものを数える必要があります。
MQObject MQDocument::GetObject(int index);
オブジェクトクラスへのポインタを取得します。
指定したインデックスにオブジェクトが存在しない場合はNULLが返されます。
MQObject MQDocument::GetObjectFromUniqueID(int id);
指定されたユニークIDのオブジェクトクラスへのポインタを取得します。
ユニークIDに該当するオブジェクトが存在しない場合はNULLが返されます。
int MQDocument::GetCurrentObjectIndex(void);
カレントオブジェクトのインデックスを取得します。
複数選択された状態を取得するにはMQObject::GetSelected()を呼び出してください。
void MQDocument::SetCurrentObjectIndex(int index);
カレントオブジェクトをインデックス指定します。
複数選択された状態を設定するにはMQObject::SetSelected()を呼び出してください。
int MQDocument::AddObject(MQObject obj);
オブジェクトクラスをドキュメントに登録します。
objそのものが参照されるので、ドキュメントに追加されたオブジェクトを MQObject::DeleteThis() で消滅させてはいけません。
登録するオブジェクトには他と重複しない名前を指定してください。重複しない名前はMQDocument::GetUnusedObjectName()で取得できます。
int MQDocument::InsertObject(MQObject obj, MQObject before);
(new in Rev2.41)
オブジェクトクラスをドキュメント内の指定したオブジェクトの後ろのインデックスに登録します。
beforeがNULLの場合、リストの先頭に登録されます。
オブジェクトの挿入により、リストの後ろにあるオブジェクトのインデックスは変更されます。
objそのものが参照されるので、ドキュメントに追加されたオブジェクトを MQObject::DeleteThis() で消滅させてはいけません。
BOOL MQDocument::RemoveObject(MQObject obj);
(new in Rev4.71)
ドキュメントからオブジェクトを外します。オブジェクトクラス自体は存続します。
外されたオブジェクトのインデックスに対して MQDocument::GetObject() はNULLを返すようになります。
void MQDocument::DeleteObject(int index);
ドキュメントからオブジェクトを外し、オブジェクトクラスを消滅させます。
削除したインデックスに対して MQDocument::GetObject() はNULLを返すようになります。
int MQDocument::GetObjectIndex(MQObject obj);
ドキュメント中のオブジェクトのインデックスを取得します。
指定したオブジェクトがドキュメント中に存在しない場合は-1が返されます。
MQObject MQDocument::GetParentObject(MQObject obj);
(new in Rev2.40)
ドキュメント中の指定したオブジェクトの親オブジェクトを取得します。
指定したオブジェクトがルートにある場合はNULLが返されます。
int MQDocument::GetChildObjectCount(MQObject obj);
(new in Rev2.40)
ドキュメント中の指定したオブジェクトに属する子オブジェクトの数を取得します。
子オブジェクトは直下にあるもののみがカウントされ、孫以下はカウントされません。
MQObject MQDocument::GetChildObject(MQObject obj, int index);
(new in Rev2.40)
ドキュメント中の指定したオブジェクトの子オブジェクトを取得します。
インデックスは MQDocument::GetChildObjectCount()
で返される数より小さい値を指定してください。
void MQDocument::GetGlobalMatrix(MQObject obj, MQMatrix& mtx);
(new in Rev2.40)
ドキュメント中の指定したオブジェクトのグローバル座標変換行列を取得します。
void MQDocument::GetGlobalInverseMatrix(MQObject obj, MQMatrix& mtx);
(new in Rev2.40)
ドキュメント中の指定したオブジェクトのグローバル座標逆変換行列を取得します。
void MQDocument::GetUnusedObjectName(char *buffer, int buffer_size);
void MQDocument::GetUnusedObjectName(char *buffer, int buffer_size, const char *base_name);
(new in Rev3.10)
ドキュメント中で使用されていないオブジェクトの名前を取得します。
base_nameを指定した場合、その文字列に連番する名前が取得されます(例:test1 -> test2)。 base_nameが指定されない、またはNULLが指定された場合、適当な名前が取得されます。
BOOL MQDocument::Triangulate(const MQPoint *points, int points_num, int *index_array, int index_num);
(new in Rev4.00)
多角形を三角形に分割した結果を取得します。
index_arrayには一つの三角形をなす3つのインデックスが三角形の数の分だけ格納されます。index_numは(points_num-2)*3個以上である必要があります。
int MQDocument::GetMaterialCount(void);
ドキュメント中のマテリアルの数を取得します。
実際に存在するマテリアル数ではなく配列要素の大きさが返されるので、
MQDocument::DeleteMaterial() によりNULLになったものも数として入れられます。正確な数を得るには
MQDocument::GetMaterial() によりNULL以外のものを数える必要があります。
MQMaterial MQDocument::GetMaterial(int index);
マテリアルクラスへのポインタを取得します。
指定したインデックスにマテリアルが存在しない場合はNULLが返されます。
MQMaterial MQDocument::GetMaterialFromUniqueID(int id);
指定されたユニークIDのマテリアルクラスへのポインタを取得します。
ユニークIDに該当するマテリアルが存在しない場合はNULLが返されます。
int MQDocument::GetCurrentMaterialIndex(void);
カレントマテリアルのインデックスを取得します。
-1が返された場合はカレントは未着色面であることを示します。
void MQDocument::SetCurrentMaterialIndex(int index);
カレントマテリアルをインデックス指定します。
int MQDocument::AddMaterial(MQMaterial mat);
マテリアルクラスをドキュメントに登録します。
matそのものが参照されるので、ドキュメントに追加されたマテリアルをMQMaterial::DeleteThis()により消滅させてはいけません。
登録するマテリアルには他と重複しない名前を指定してください。重複しない名前はMQDocument::GetUnusedMaterialName()で取得できます。
void MQDocument::DeleteMaterial(int index);
ドキュメントからマテリアルを外し、マテリアルクラスを消滅させます。
削除したインデックスに対して MQDocument::GetMaterial() はNULLを返すようになります。
void MQDocument::GetUnusedMaterialName(char *buffer, int buffer_size);
void MQDocument::GetUnusedMaterialName(char *buffer, int buffer_size, const char *base_name);
(new in Rev3.10)
ドキュメント中で使用されていないマテリアルの名前を取得します。
base_nameを指定した場合、その文字列に連番する名前が取得されます(例:test1 -> test2)。 base_nameが指定されない、またはNULLが指定された場合、適当な名前が取得されます。
void MQDocument::Compact(void);
ドキュメント中のオブジェクトやマテリアル配列に存在するNULLを切り詰めて、配列の大きさを実際に存在するオブジェクトやマテリアル数と同じにします。また、オブジェクト中に存在する頂点や面の配列も切り詰めます。ただし、頂点や面のインデックスが変化することに注意して下さい。
データ量が小さくなるので、ドキュメントやオブジェクトに対して大幅な操作を行った後は、このAPIを実行するのが望ましいです。
ファイルの保存の際には自動的に実行されます。
void MQDocument::ClearSelect(DWORD flag);
ドキュメント中の指定した要素の選択をすべて解除します。
BOOL MQDocument::AddSelectVertex(int objindex, int vertindex);
BOOL MQDocument::AddSelectVertex(MQSelectVertex sel);
指定した頂点を選択します。
BOOL MQDocument::DeleteSelectVertex(int objindex, int vertindex);
BOOL MQDocument::DeleteSelectVertex(MQSelectVertex sel);
指定した頂点の選択を解除します。
BOOL MQDocument::IsSelectVertex(int objindex, int vertindex);
BOOL MQDocument::IsSelectVertex(MQSelectVertex sel);
指定した頂点が選択されているかどうかをチェックします。
BOOL MQDocument::AddSelectLine(int objindex, int faceindex, int lineindex);
BOOL MQDocument::AddSelectLine(MQSelectLine sel);
指定したラインを選択します。
BOOL MQDocument::DeleteSelectLine(int objindex, int faceindex, int linelidex);
BOOL MQDocument::DeleteSelectLine(MQSelectLine sel);
指定したラインの選択を解除します。
BOOL MQDocument::IsSelectLine(int objindex, int faceindex, int lineindex);
BOOL MQDocument::IsSelectLine(MQSelectLine sel);
指定したラインが選択されているかどうかをチェックします。
BOOL MQDocument::AddSelectFace(int objindex, int faceindex);
BOOL MQDocument::AddSelectFace(MQSelectFace sel);
指定した面を選択します。
BOOL MQDocument::DeleteSelectFace(int objindex, int faceindex);
BOOL MQDocument::DeleteSelectFace(MQSelectFace sel);
指定した面の選択を解除します。
BOOL MQDocument::IsSelectFace(int objindex, int faceindex);
BOOL MQDocument::IsSelectFace(MQSelectFace sel);
指定した面が選択されているかどうかをチェックします。
BOOL MQDocument::AddSelectUVVertex(int objindex, int faceindex, int vertindex);
(new in Rev2.30)
指定した頂点をUV選択します。
BOOL MQDocument::DeleteSelectUVVertex(int objindex, int faceindex, int vertindex);
(new in Rev2.30)
指定した頂点のUV選択を解除します。
BOOL MQDocument::IsSelectUVVertex(int objindex, int faceindex, int vertindex);
(new in Rev2.30)
指定した頂点がUV選択されているかどうかをチェックします。
int MQDocument::CreateObjectUserData(DWORD productID, DWORD pluginID, const char *identifier, int bytes_per_object);
(new in Rev3.10)
オブジェクトごとにプラグイン独自の任意のデータを割り当てるためのオブジェクトユーザーデータIDを生成します。
productID と pluginID は MQGetPlugInID() で取得されるIDを指定する必要があります。bytes_per_object には1つの頂点に割り当てるデータのサイズをバイト数で指定します。1頂点につき最大で65535バイトのデータを割り当てることができます。
生成されたオブジェクトユーザーデータIDは MQObject::AllocUserData() などの関数で使用します。
既に作成されているユーザーデータと同じ productID、pluginID、identifier を指定した場合、ユーザーデータは新規作成されず、既存のユーザーデータのIDが返されます。複数のユーザーデータを扱うには異なる identifier を指定してください。
void MQDocument::DeleteObjectUserData(int userdata_id);
(new in Rev3.10)
MQDocument::CreateObjectUserData() で生成されたユーザーデータを削除します。ドキュメント内のオブジェクトにユーザーデータが確保されている場合、この関数を呼び出したときに自動的に解放されます。
ユーザーデータIDの生成と削除は繰り返し行う必要はありません。プラグインがアンロードされるときなど、以降の処理でユーザーデータが完全に不要になったときのみ呼び出してください。
int MQDocument::FindObjectUserData(DWORD productID, DWORD pluginID, const char *identifier);
(new in Rev3.10)
CreateObjectUserData() で作成されたユーザーデータのIDを取得します。ユーザーデータが作成されていなければ0が返されます。
int MQDocument::CreateVertexUserData(DWORD productID, DWORD pluginID, const char *identifier, int bytes_per_vertex);
(new in Rev3.10)
頂点ごとにプラグイン独自の任意のデータを割り当てるための頂点ユーザーデータIDを生成します。
productID と pluginID は MQGetPlugInID() で取得されるIDを指定する必要があります。bytes_per_vertex には1つの頂点に割り当てるデータのサイズをバイト数で指定します。1頂点につき最大で65535バイトのデータを割り当てることができます。
生成された頂点ユーザーデータIDは MQObject::AllocVertexUserData() などの関数で使用します。
既に作成されているユーザーデータと同じ productID、pluginID、identifier を指定した場合、ユーザーデータは新規作成されず、既存のユーザーデータのIDが返されます。複数のユーザーデータを扱うには異なる identifier を指定してください。
void MQDocument::DeleteVertexUserData(int userdata_id);
(new in Rev3.10)
MQDocument::CreateVertexUserData() で生成された頂点ユーザーデータを削除します。ドキュメント内のオブジェクトに頂点ユーザーデータが確保されている場合、この関数を呼び出したときに自動的に解放されます。
頂点ユーザーデータIDの生成と削除は繰り返し行う必要はありません。プラグインがアンロードされるときなど、以降の処理で頂点ユーザーデータが完全に不要になったときのみ呼び出してください。
int MQDocument::FindVertexUserData(DWORD productID, DWORD pluginID, const char *identifier);
(new in Rev3.10)
CreateVertexUserData() で作成されたユーザーデータのIDを取得します。ユーザーデータが作成されていなければ0が返されます。
int MQDocument::CreateFaceUserData(DWORD productID, DWORD pluginID, const char *identifier, int bytes_per_face);
(new in Rev3.10)
面ごとにプラグイン独自の任意のデータを割り当てるための面ユーザーデータIDを生成します。
productID と pluginID は MQGetPlugInID() で取得されるIDを指定する必要があります。bytes_per_face には1つの面に割り当てるデータのサイズをバイト数で指定します。1つの面につき最大で65535バイトのデータを割り当てることができます。
生成された面ユーザーデータIDは MQObject::AllocFaceUserData() などの関数で使用します。
既に作成されているユーザーデータと同じ productID、pluginID、identifier を指定した場合、ユーザーデータは新規作成されず、既存のユーザーデータのIDが返されます。複数のユーザーデータを扱うには異なる identifier を指定してください。
void MQDocument::DeleteFaceUserData(int userdata_id);
(new in Rev3.10)
MQDocument::CreateFaceUserData() で生成された面ユーザーデータを削除します。ドキュメント内のオブジェクトに面ユーザーデータが確保されている場合、この関数を呼び出したときに自動的に解放されます。
面ユーザーデータIDの生成と削除は繰り返し行う必要はありません。プラグインがアンロードされるときなど、以降の処理で面ユーザーデータが完全に不要になったときのみ呼び出してください。
int MQDocument::FindFaceUserData(DWORD productID, DWORD pluginID, const char *identifier);
(new in Rev3.10)
CreateFaceUserData() で作成されたユーザーデータのIDを取得します。ユーザーデータが作成されていなければ0が返されます。
int MQDocument::CreateMaterialUserData(DWORD productID, DWORD pluginID, const char *identifier, int bytes_per_material);
(new in Rev3.10)
材質ごとにプラグイン独自の任意のデータを割り当てるための材質ユーザーデータIDを生成します。
productID と pluginID は MQGetPlugInID() で取得されるIDを指定する必要があります。bytes_per_material には1つの材質に割り当てるデータのサイズをバイト数で指定します。1つの材質につき最大で65535バイトのデータを割り当てることができます。
生成された材質ユーザーデータIDは MQMaterial::AllocUserData() などの関数で使用します。
既に作成されているユーザーデータと同じ productID、pluginID、identifier を指定した場合、ユーザーデータは新規作成されず、既存のユーザーデータのIDが返されます。複数のユーザーデータを扱うには異なる identifier を指定してください。
void MQDocument::DeleteMaterialUserData(int userdata_id);
(new in Rev3.10)
MQDocument::CreateMaterialUserData() で生成された材質ユーザーデータを削除します。ドキュメント内の材質にユーザーデータが確保されている場合、この関数を呼び出したときに自動的に解放されます。
材質ユーザーデータIDの生成と削除は繰り返し行う必要はありません。プラグインがアンロードされるときなど、以降の処理で材質ユーザーデータが完全に不要になったときのみ呼び出してください。
int MQDocument::FindMaterialUserData(DWORD productID, DWORD pluginID, const char *identifier);
(new in Rev3.10)
CreateMaterialUserData() で作成されたユーザーデータのIDを取得します。ユーザーデータが作成されていなければ0が返されます。
BOOL MQDocument::FindMappingFile(char *out_path, const char *filename, DWORD map_type);
BOOL MQDocument::FindMappingFile(wchar_t *out_path, const wchar_t *filename, DWORD map_type);
(new in Rev2.10)
MQMaterial::GetTextureName(), GetAlphaName(), GetBumpName() で得られるファイル名を絶対パスに変換します。
outpath は MAX_PATH 以上のサイズを持つ必要があります。
BOOL MQDocument::GetMappingImageSize(const char *filename, DWORD map_type, int& width, int& height);
BOOL MQDocument::GetMappingImageSize(const wchar_t *filename, DWORD map_type, int& width, int& height);
(new in Rev3.10)
指定されたファイル名のマッピング画像のサイズを取得します。
マッピング画像は既に読み込まれている必要があります。MQMaterial::SetTextureName()などで設定した直後にはまだ取得できません。
BOOL MQDocument::GetMappingImage(const char *filename, DWORD map_type, int& width, int& height, int& bpp, const RGBQUAD*& colors, const BYTE*& buffer);
BOOL MQDocument::GetMappingImage(const wchar_t *filename, DWORD map_type, int& width, int& height, int& bpp, const RGBQUAD*& colors, const BYTE*& buffer);
(new in Rev4.10)
指定されたファイル名のマッピング画像を取得します。
マッピング画像は既に読み込まれている必要があります。MQMaterial::SetTextureName()などで設定した直後にはまだ取得できません。
bppが8以下の場合、colorsには色数分のカラーパレットが格納されています。8ビットより大きい画像の場合はカラーパレットを持たないためNULLが返されます。
bufferにはWindowsのDIBと互換性がある配置で画像データが格納されています。この内容を直接書き換えないでください。
MQScene MQDocument::GetScene(int index);
(new in Rev2.10)
ドキュメントに割り当てられているシーンを取得します。
indexに0を指定するとパースペクティブビューが取得されます。現行バージョンではindexは0以外は指定しないで下さい。