(new in Rev4.64)
MQBoneManager クラスはMetasequoia 4に標準搭載されている「ボーン」プラグイン BoneDeformer.dll とアクセスするためのラッパークラスです。
Rev4.70でボーン構造がノード単位で管理されるようになったのに伴い、互換性のない大幅な変更が行われました。
MQBoneManager::MQBoneManager(MQBasePlugin *plugin, MQDocument doc);
コンストラクタです。
static DWORD MQBoneManager::GetProductID();
ボーンプラグインのプロダクトIDを取得します。
static DWORD MQBoneManager::GetPluginID();
ボーンプラグインのプラグインIDを取得します。
bool MQBoneManager::Verified();
ボーンプラグインが利用可能かどうかを取得します。
void MQBoneManager::BeginImport();
インポートを開始します。
Importプラグイン内で使用する場合、ボーン・スキンオブジェクトを追加する前にこの関数を呼び出す必要があります。
void MQBoneManager::EndImport();
インポートを終了します。
Importプラグイン内でBeginImport()を呼び出してボーン・スキンオブジェクトを追加した後に、この関数を呼び出す必要があります。
UINT MQBoneManager::AddBone(const ADD_BONE_PARAM& param);
ボーンを追加します。
bool MQBoneManager::DeleteBone(UINT bone_id);
ボーンを削除します。
bool MQBoneManager::AddBrother(UINT bone_id, UINT brother_bone_id);
兄弟ボーンを追加します。
Rev4.70で廃止されました。
int MQBoneManager::GetBoneNum();
ボーン数を取得します。
int MQBoneManager::EnumBoneID(std::vector<UINT>& bone_id_array);
ボーンIDを列挙します。
int MQBoneManager::EnumSelectedBoneID(std::vector<UINT>& bone_id_array);
選択されているボーンIDを列挙します。
int MQBoneManager::Update();
ボーン・ウェイトの変更を表示に反映します。
常駐型・コマンドプラグインからボーン・ウェイトに対する変更を行った場合、最後にこの関数を呼び出してください。アンドゥを更新する場合は併せてMQBasePlugin::UpdateUndo()も呼び出します。
bool MQBoneManager::GetName(UINT bone_id, std::wstring& name);
void MQBoneManager::SetName(UINT bone_id, const wchar_t *name);
ボーンの名前を取得・設定します。
bool MQBoneManager::GetTipName(UINT bone_id, std::wstring& name);
void MQBoneManager::SetTipName(UINT bone_id, const wchar_t *tip_name);
ボーンの先端の名前を取得・設定します。
Rev4.70で廃止されました。
bool MQBoneManager::GetParent(UINT bone_id, UINT& parent_id);
void MQBoneManager::SetParent(UINT bone_id, UINT parent_id);
ボーンの親ボーンIDを取得・設定します。
bool MQBoneManager::GetChildNum(UINT bone_id, int& child_num);
ボーンの子ボーンの数を取得します。
bool MQBoneManager::GetChildren(UINT bone_id, std::vector<UINT>& children);
ボーンの子ボーンIDを取得します。
bool MQBoneManager::GetBrothers(UINT bone_id, std::vector<UINT>& brothers);
ボーンの兄弟ボーンIDを取得します。
Rev4.70で廃止されました。
bool MQBoneManager::GetBaseRootPos(UINT bone_id, MQPoint& pos);
void MQBoneManager::SetBaseRootPos(UINT bone_id, const MQPoint& pos);
ボーンの変形前の根の位置を取得・設定します。
Rev4.70で廃止され、GetBasePos()に代替されました。
bool MQBoneManager::GetBaseTipPos(UINT bone_id, MQPoint& pos);
void MQBoneManager::SetBaseTipPos(UINT bone_id, const MQPoint& pos);
ボーンの変形前の先端の位置を取得・設定します。
Rev4.70で廃止され、GetBasePos()に代替されました。
bool MQBoneManager::GetBasePos(UINT bone_id, MQPoint& pos);
void MQBoneManager::SetBasePos(UINT bone_id, const MQPoint& pos);
ボーンの変形前の位置を取得・設定します。
bool MQBoneManager::GetBaseMatrix(UINT bone_id, MQMatrix& matrix);
ボーンの変形前の座標変換行列を取得します。
bool MQBoneManager::GetUpVector(UINT bone_id, MQMatrix& matrix);
void MQBoneManager::SetUpVector(UINT bone_id, const MQMatrix matrix);
ボーンのアップベクターを取得・設定します。
bool MQBoneManager::GetForwardAxis(UINT bone_id, int& axis);
void MQBoneManager::SetForwardAxis(UINT bone_id, int axis);
前方を示す軸を取得・設定します。
bool MQBoneManager::GetDeformRootPos(UINT bone_id, MQPoint& pos);
ボーンの変形後の根の位置を取得します。
Rev4.70で廃止され、GetDeformPos()に代替されました。
bool MQBoneManager::GetDeformTipPos(UINT bone_id, MQPoint& pos);
ボーンの変形後の先端の位置を取得します。
Rev4.70で廃止され、GetDeformPos()に代替されました。
bool MQBoneManager::GetDeformPos(UINT bone_id, MQPoint& pos);
ボーンの変形後の位置を取得します。
bool MQBoneManager::GetDeformMatrix(UINT bone_id, MQMatrix& matrix);
ボーンの変形後の座標変換行列を取得します。
bool MQBoneManager::GetDeformScale(UINT bone_id, MQPoint& scale);
void MQBoneManager::SetDeformScale(UINT bone_id, const MQPoint& scale);
ボーンの変形後のスケールを取得・設定します。
bool MQBoneManager::GetDeformRotate(UINT bone_id, MQAngle& angle);
void MQBoneManager::SetDeformRotate(UINT bone_id, const MQAngle& angle);
ボーンの変形後の回転角を取得・設定します。
bool MQBoneManager::GetDeformTranslate(UINT bone_id, MQPoint& translate);
void MQBoneManager::SetDeformTranslate(UINT bone_id, const MQPoint& translate);
ボーンの変形後の移動量を取得・設定します。
bool MQBoneManager::GetRotationMatrix(UINT bone_id, MQMatrix& matrix);
ボーンの回転行列を取得します。
bool MQBoneManager::GetAngleMin(UINT bone_id, MQAngle& angle);
void MQBoneManager::SetAngleMin(UINT bone_id, const MQAngle& angle);
ボーンの回転角制限の最小値を取得・設定します。
bool MQBoneManager::GetAngleMax(UINT bone_id, MQAngle& angle);
void MQBoneManager::SetAngleMax(UINT bone_id, const MQAngle& angle);
ボーンの回転角制限の最大値を取得・設定します。
bool MQBoneManager::GetVisible(UINT bone_id, bool& visible);
void MQBoneManager::SetVisible(UINT bone_id, bool visible);
ボーンの可視設定を取得・設定します。
bool MQBoneManager::GetLock(UINT bone_id, bool& lock);
void MQBoneManager::SetLock(UINT bone_id, bool lock);
ボーンのロック設定を取得・設定します。
bool MQBoneManager::GetDummy(UINT bone_id, bool& dummy);
void MQBoneManager::SetDummy(UINT bone_id, bool dummy);
ボーンのダミー設定を取得・設定します。
bool MQBoneManager::GetIKChain(UINT bone_id, int& chain);
void MQBoneManager::SetIKChain(UINT bone_id, int chain);
ボーンのIKチェイン設定を取得・設定します。
Rev4.70で値の定義が変更され、0でIKチェインなし、1以上で階層分たどった親ボーンがIKのルート側ボーンとなります。
bool MQBoneManager::GetEndPoint(UINT bone_id, bool& end_point);
void MQBoneManager::SetEndPoint(UINT bone_id, bool end_point);
ボーンの先端ノード設定を取得・設定します。
Rev4.70で廃止されました。
bool MQBoneManager::GetMovable(UINT bone_id, bool& movable);
void MQBoneManager::SetMovable(UINT bone_id, bool movable);
ボーンの移動可否設定を取得・設定します。
int MQBoneManager::GetSkinObjectNum();
スキンオブジェクトの数を取得します。
int MQBoneManager::EnumSkinObjectID(std::vector<UINT>& obj_id_array);
スキンオブジェクトのユニークIDを取得します。
bool MQBoneManager::AddSkinObject(MQObject obj);
スキンオブジェクトを追加します。
bool MQBoneManager::DeleteSkinObject(MQObject obj);
スキンオブジェクトとしての登録を解除します。
int MQBoneManager::GetVertexWeightArray(MQObject obj, UINT vertex_id, int array_num, UINT *bone_ids, float *weights);
指定した頂点に影響するボーンとウェイトを取得します。
array_numはbone_ids, weightsの配列のサイズを指定します。実際にウェイトが割り当てられているボーン数がarray_numを超えた場合、ウェイトの値の小さいものが切り捨てられます。すべてのボーンのウェイトを確実に取得したい場合、GetBoneNum()と同じ数の配列を用意します。
bone_ids, weightsにはウェイトの値が大きいものから降順となるよう各ボーンのウェイトが対として格納されます。
bool MQBoneManager::SetVertexWeight(MQObject obj, UINT vertex_id, UINT bone_id, float weight);
指定した頂点にボーンのウェイトを設定します。
int MQBoneManager::GetWeightedVertexArray(UINT bone_id, MQObject obj, std::vector<UINT>& vertex_ids, std::vector<float>& weights);
指定したボーンが影響する頂点とウェイトを一括取得します。
bool MQBoneManager::NormalizeVertexWeight(MQObject obj, UINT vertex_id);
指定した頂点に影響するボーンのウェイトを正規化します。
bool MQBoneManager::GetTipBone(UINT bone_id, UINT& tip_bone_id);
bool MQBoneManager::GetIKName(UINT bone_id, std::wstring& ik_name, std::wstring& ik_tip_name);
bool MQBoneManager::GetIKParent(UINT bone_id, UINT& ik_parent_bone_id, bool& isIK);
bool MQBoneManager::GetLink(UINT bone_id, LINK_PARAM& param);
bool MQBoneManager::GetGroupID(UINT bone_id, UINT& group_id);
void MQBoneManager::SetTipBone(UINT bone_id, UINT tip_bone_id);
void MQBoneManager::SetIKName(UINT bone_id, const wchar_t *ik_name, const wchar_t *ik_tip_name);
void MQBoneManager::SetIKParent(UINT bone_id, UINT ik_parent_bone_id, bool isIK);
void MQBoneManager::SetLink(UINT bone_id, const LINK_PARAM& param);
void MQBoneManager::SetGroupID(UINT bone_id, UINT group_id);
int MQBoneManager::EnumGroups(std::vector<UINT>& group_ids);
UINT MQBoneManager::AddGroup(const wchar_t *name);
bool MQBoneManager::GetGroupName(UINT group_id, std::wstring& name);
PMD向けの関数です。
int MQBoneManager::GetEffectLimitNum();
頂点ごとに影響するボーンの最大数を取得します。0なら制限はありません。
MQBoneManager::LIST_MODE MQBoneManager::GetListMode();
ボーンリストの表示モードを取得します。
Rev4.70で廃止されました。
void MQBoneManager::SetListMode(LIST_MODE mode);
ボーンリストの表示モードを設定します。
Rev4.70で廃止されました。
bool MQBoneManager::DeformObject(MQObject obj, MQObject target);
ボーン情報に基づいてスキンオブジェクトの複製に変形を反映します。スキンオブジェクトを直接変形させることはできません。