00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __pcggui__H
00015 #define __pcggui__H
00016
00017 #include "Max.h"
00018 #include "resource.h"
00019 #include "istdplug.h"
00020 #include "iparamb2.h"
00021 #include "iparamm2.h"
00022
00023 #include "bmmlib.h"
00024 #include "modstack.h"
00025 #include "simpmod.h"
00026
00027
00028 #include "utilapi.h"
00029
00030 #include <ExampleModel.h>
00031 #include <ReferenceModel.h>
00032 #include <Exporter.h>
00033 #include <Analyzer.h>
00034
00035 typedef unsigned int uint;
00036
00037 extern TCHAR *GetString(int id);
00038
00039 extern HINSTANCE hInstance;
00040
00041 class pcggui : public UtilityObj {
00042 private:
00043 vector<model::ExampleModel*> exampleModels;
00044 vector<model::ReferenceModel*> referenceModels;
00045 model::Analyzer pca;
00046
00047 public:
00048
00049 HWND hPanel;
00050 IUtil *iu;
00051 Interface *ip;
00052 BOOL refModel;
00053
00054 enum Skin_Status {
00055 NoError,
00056 InvalidSkeleton,
00057 VertexWithoutWeight,
00058 };
00059
00060
00061 void BeginEditParams(Interface *ip,IUtil *iu);
00062 void EndEditParams(Interface *ip,IUtil *iu);
00063
00064 void Init(HWND hWnd);
00065 void Destroy(HWND hWnd);
00066
00067 void DeleteThis() { }
00068
00069
00070 pcggui();
00071 ~pcggui();
00072
00073 void CovertScene();
00074 void ConvertBone(INode* pParent, model::ReferenceModel* rm);
00075 uint ConvertSkin(INode* node, model::ReferenceModel* rm);
00076 Modifier* getModifier (INode* pNode, Class_ID modCID);
00077 void SetReferenceModelMode(BOOL rm) { refModel = rm; };
00078 void ExportAll();
00079 void SaveAll();
00080 void LoadAll();
00081 void SaveAnalyzer();
00082 void LoadAnalyzer();
00083 void Analyze();
00084 void Render();
00085
00086 };
00087
00088
00089 class ISkinContextData
00090 {
00091 public:
00092 virtual int GetNumPoints()=0;
00093 virtual int GetNumAssignedBones(int vertexIdx)=0;
00094 virtual int GetAssignedBone(int vertexIdx, int boneIdx)=0;
00095 virtual float GetBoneWeight(int vertexIdx, int boneIdx)=0;
00096
00097 virtual int GetSubCurveIndex(int vertexIdx, int boneIdx)=0;
00098 virtual int GetSubSegmentIndex(int vertexIdx, int boneIdx)=0;
00099 virtual float GetSubSegmentDistance(int vertexIdx, int boneIdx)=0;
00100 virtual Point3 GetTangent(int vertexIdx, int boneIdx)=0;
00101 virtual Point3 GetOPoint(int vertexIdx, int boneIdx)=0;
00102
00103 virtual void SetWeight(int vertexIdx, int boneIdx, float weight)=0;
00104 virtual void SetWeight(int vertexIdx, INode* bone, float weight)=0;
00105 virtual void SetWeights(int vertexIdx, Tab<int> boneIdx, Tab<float> weights)=0;
00106 virtual void SetWeights(int vertexIdx, INodeTab boneIdx, Tab<float> weights)=0;
00107
00108 };
00109
00110
00111
00112 class ISkin
00113 {
00114 public:
00115 ISkin() {}
00116 ~ISkin() {}
00117 virtual int GetBoneInitTM(INode *pNode, Matrix3 &InitTM, bool bObjOffset = false)=0;
00118 virtual int GetSkinInitTM(INode *pNode, Matrix3 &InitTM, bool bObjOffset = false)=0;
00119 virtual int GetNumBones()=0;
00120 virtual INode *GetBone(int idx)=0;
00121 virtual DWORD GetBoneProperty(int idx)=0;
00122 virtual ISkinContextData *GetContextInterface(INode *pNode)=0;
00123
00124 virtual BOOL AddBone(INode *bone)=0;
00125 virtual BOOL AddBones(INodeTab *bones)=0;
00126 virtual BOOL RemoveBone(INode *bone)=0;
00127 virtual void Invalidate()=0;
00128 };
00129 #endif