Changeset 383
- Timestamp:
- 09/18/11 23:16:39 (8 months ago)
- Location:
- cafu/trunk
- Files:
-
- 2 added
- 23 modified
-
CaWE/ModelEditor/ChildFrame.cpp (modified) (6 diffs)
-
CaWE/ModelEditor/ChildFrame.hpp (modified) (4 diffs)
-
CaWE/ModelEditor/Commands/Add.cpp (modified) (3 diffs)
-
CaWE/ModelEditor/Commands/Add.hpp (modified) (2 diffs)
-
CaWE/ModelEditor/Commands/Delete.cpp (modified) (7 diffs)
-
CaWE/ModelEditor/Commands/Delete.hpp (modified) (1 diff)
-
CaWE/ModelEditor/Commands/Rename.cpp (modified) (3 diffs)
-
CaWE/ModelEditor/Commands/SetMeshMaterial.cpp (modified) (4 diffs)
-
CaWE/ModelEditor/Commands/SetMeshMaterial.hpp (modified) (3 diffs)
-
CaWE/ModelEditor/ElementTypes.hpp (modified) (2 diffs)
-
CaWE/ModelEditor/ElementsList.cpp (modified) (4 diffs)
-
CaWE/ModelEditor/ElementsList.hpp (modified) (1 diff)
-
CaWE/ModelEditor/MeshInspector.cpp (modified) (4 diffs)
-
CaWE/ModelEditor/MeshInspector.hpp (modified) (1 diff)
-
CaWE/ModelEditor/ModelDocument.cpp (modified) (1 diff)
-
CaWE/ModelEditor/ModelDocument.hpp (modified) (2 diffs)
-
CaWE/ModelEditor/ObserverPattern.cpp (modified) (1 diff)
-
CaWE/ModelEditor/ObserverPattern.hpp (modified) (2 diffs)
-
CaWE/ModelEditor/ScenePropGrid.cpp (modified) (2 diffs)
-
CaWE/ModelEditor/SceneView3D.cpp (modified) (4 diffs)
-
CaWE/ModelEditor/SkinsList.cpp (added)
-
CaWE/ModelEditor/SkinsList.hpp (added)
-
CaWE/ModelEditor/SubmodelsList.hpp (modified) (1 diff)
-
Libs/Models/Loader_mdl.cpp (modified) (1 diff)
-
Libs/Models/Model_cmdl.hpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
cafu/trunk/CaWE/ModelEditor/ChildFrame.cpp
r375 r383 31 31 #include "SceneView3D.hpp" 32 32 #include "ScenePropGrid.hpp" 33 #include "SkinsList.hpp" 33 34 #include "SubmodelsList.hpp" 34 35 #include "TransformDialog.hpp" … … 89 90 m_AnimsList(NULL), 90 91 m_AnimInspector(NULL), 92 m_SkinsList(NULL), 91 93 m_GuiFixturesList(NULL), 92 94 m_GuiFixtureInspector(NULL), … … 144 146 ViewMenu->AppendCheckItem(ID_MENU_VIEW_AUIPANE_GUIFIXTURES_LIST, "GUI Fixtures List", "Show or hide the GUI fixtures list"); 145 147 ViewMenu->AppendCheckItem(ID_MENU_VIEW_AUIPANE_GUIFIXTURE_INSPECTOR, "GUI Fixture Inspector", "Show or hide the GUI fixture inspector"); 148 ViewMenu->AppendCheckItem(ID_MENU_VIEW_AUIPANE_SKINS_LIST, "Skins List", "Show or hide the skins list"); 146 149 ViewMenu->AppendSeparator(); 147 150 ViewMenu->AppendCheckItem(ID_MENU_VIEW_AUIPANE_SCENE_SETUP, "Scene Setup", "Show or hide the scene setup inspector"); … … 241 244 Name("SubmodelsPanel").Caption("Submodels List"). 242 245 Right().Position(1)); 246 247 m_SkinsList=new SkinsPanelT(this, wxSize(230, 150)); 248 m_AUIManager.AddPane(m_SkinsList, wxAuiPaneInfo(). 249 Name("SkinsList").Caption("Skins List"). 250 Right().Position(2)); 243 251 244 252 m_TransformDialog=new TransformDialogT(this, wxSize(248, 240)); … … 715 723 case ID_MENU_VIEW_AUIPANE_ANIMS_LIST: PaneToggleShow(m_AUIManager.GetPane(m_AnimsList )); break; 716 724 case ID_MENU_VIEW_AUIPANE_ANIM_INSPECTOR: PaneToggleShow(m_AUIManager.GetPane(m_AnimInspector )); break; 725 case ID_MENU_VIEW_AUIPANE_SKINS_LIST: PaneToggleShow(m_AUIManager.GetPane(m_SkinsList )); break; 717 726 case ID_MENU_VIEW_AUIPANE_GUIFIXTURES_LIST: PaneToggleShow(m_AUIManager.GetPane(m_GuiFixturesList )); break; 718 727 case ID_MENU_VIEW_AUIPANE_GUIFIXTURE_INSPECTOR: PaneToggleShow(m_AUIManager.GetPane(m_GuiFixtureInspector)); break; … … 747 756 case ID_MENU_VIEW_AUIPANE_ANIMS_LIST: UE.Check(m_AUIManager.GetPane(m_AnimsList ).IsShown()); break; 748 757 case ID_MENU_VIEW_AUIPANE_ANIM_INSPECTOR: UE.Check(m_AUIManager.GetPane(m_AnimInspector ).IsShown()); break; 758 case ID_MENU_VIEW_AUIPANE_SKINS_LIST: UE.Check(m_AUIManager.GetPane(m_SkinsList ).IsShown()); break; 749 759 case ID_MENU_VIEW_AUIPANE_GUIFIXTURES_LIST: UE.Check(m_AUIManager.GetPane(m_GuiFixturesList ).IsShown()); break; 750 760 case ID_MENU_VIEW_AUIPANE_GUIFIXTURE_INSPECTOR: UE.Check(m_AUIManager.GetPane(m_GuiFixtureInspector).IsShown()); break; -
cafu/trunk/CaWE/ModelEditor/ChildFrame.hpp
r354 r383 44 44 class ScenePropGridT; 45 45 class SceneView3DT; 46 class SkinsPanelT; 46 47 class SubmodelsPanelT; 47 48 class TransformDialogT; … … 79 80 80 81 /// Sets the type of the most recently used (clicked) model element. 81 void SetLastUsedType(ModelElementTypeT Type) { wxASSERT(Type< 4); m_LastUsedType=Type; }82 void SetLastUsedType(ModelElementTypeT Type) { wxASSERT(Type<5); m_LastUsedType=Type; } 82 83 83 84 ModelDocumentT* GetModelDoc() const { return m_ModelDoc; } … … 109 110 ElementsPanelT* m_AnimsList; 110 111 AnimInspectorT* m_AnimInspector; 112 SkinsPanelT* m_SkinsList; 111 113 ElementsPanelT* m_GuiFixturesList; 112 114 GuiFixInspectorT* m_GuiFixtureInspector; … … 132 134 ID_MENU_VIEW_AUIPANE_ANIMS_LIST, 133 135 ID_MENU_VIEW_AUIPANE_ANIM_INSPECTOR, 136 ID_MENU_VIEW_AUIPANE_SKINS_LIST, 134 137 ID_MENU_VIEW_AUIPANE_GUIFIXTURES_LIST, 135 138 ID_MENU_VIEW_AUIPANE_GUIFIXTURE_INSPECTOR, -
cafu/trunk/CaWE/ModelEditor/Commands/Add.cpp
r334 r383 27 27 28 28 29 CommandAddT::CommandAddT(ModelDocumentT* ModelDoc, const CafuModelT::SkinT& Skin) 30 : m_ModelDoc(ModelDoc), 31 m_Type(SKIN), 32 m_Skins() 33 { 34 m_Skins.PushBack(Skin); 35 } 36 37 29 38 CommandAddT::CommandAddT(ModelDocumentT* ModelDoc, const ArrayT<CafuModelT::GuiFixtureT>& GuiFixtures) 30 39 : m_ModelDoc(ModelDoc), 31 40 m_Type(GFIX), 32 // m_Joints(),33 // m_Meshes(),34 // m_DrawMs(),35 // m_Anims(),36 41 m_GuiFixtures(GuiFixtures) 37 42 { … … 46 51 ArrayT<unsigned int> Indices; 47 52 48 for (unsigned long GFixNr=0; GFixNr<m_GuiFixtures.Size(); GFixNr++)53 switch (m_Type) 49 54 { 50 Indices.PushBack(m_ModelDoc->GetModel()->m_GuiFixtures.Size()); 51 m_ModelDoc->GetModel()->m_GuiFixtures.PushBack(m_GuiFixtures[GFixNr]); 55 case SKIN: 56 for (unsigned long SkinNr=0; SkinNr<m_Skins.Size(); SkinNr++) 57 { 58 Indices.PushBack(m_ModelDoc->GetModel()->m_Skins.Size()); 59 m_ModelDoc->GetModel()->m_Skins.PushBack(m_Skins[SkinNr]); 60 } 61 break; 62 63 case GFIX: 64 for (unsigned long GFixNr=0; GFixNr<m_GuiFixtures.Size(); GFixNr++) 65 { 66 Indices.PushBack(m_ModelDoc->GetModel()->m_GuiFixtures.Size()); 67 m_ModelDoc->GetModel()->m_GuiFixtures.PushBack(m_GuiFixtures[GFixNr]); 68 } 69 break; 70 71 default: 72 break; 52 73 } 53 74 … … 69 90 ArrayT<unsigned int> Indices; 70 91 71 for (unsigned long GFixNr=0; GFixNr<m_GuiFixtures.Size(); GFixNr++)92 switch (m_Type) 72 93 { 73 m_ModelDoc->GetModel()->m_GuiFixtures.DeleteBack(); 74 Indices.InsertAt(0, m_ModelDoc->GetModel()->m_GuiFixtures.Size()); 94 case SKIN: 95 for (unsigned long SkinNr=0; SkinNr<m_Skins.Size(); SkinNr++) 96 { 97 m_ModelDoc->GetModel()->m_Skins.DeleteBack(); 98 Indices.InsertAt(0, m_ModelDoc->GetModel()->m_Skins.Size()); 99 } 100 break; 101 102 case GFIX: 103 for (unsigned long GFixNr=0; GFixNr<m_GuiFixtures.Size(); GFixNr++) 104 { 105 m_ModelDoc->GetModel()->m_GuiFixtures.DeleteBack(); 106 Indices.InsertAt(0, m_ModelDoc->GetModel()->m_GuiFixtures.Size()); 107 } 108 break; 109 110 default: 111 break; 75 112 } 76 113 -
cafu/trunk/CaWE/ModelEditor/Commands/Add.hpp
r334 r383 38 38 public: 39 39 40 CommandAddT(ModelDocumentT* ModelDoc, const CafuModelT::SkinT& Skin); 40 41 CommandAddT(ModelDocumentT* ModelDoc, const ArrayT<CafuModelT::GuiFixtureT>& GuiFixtures); 41 42 … … 54 55 // ArrayT<MatSys::MeshT> m_DrawMs; ///< The draw meshes related to m_Meshes. 55 56 // ArrayT<CafuModelT::AnimT> m_Anims; ///< The added anims (if m_Type==ANIM). 57 ArrayT<CafuModelT::SkinT> m_Skins; ///< The added skins (if m_Type==SKIN). 56 58 ArrayT<CafuModelT::GuiFixtureT> m_GuiFixtures; ///< The added GUI fixtures (if m_Type==GFIX). 57 59 }; -
cafu/trunk/CaWE/ModelEditor/Commands/Delete.cpp
r334 r383 63 63 m_Indices(GetSorted(Indices)), 64 64 m_Joints(), 65 m_Meshes(), 66 m_DrawMs(), 65 m_MeshInfos(), 67 66 m_Anims(), 67 m_Skins(), 68 68 m_GuiFixtures(), 69 69 m_Message(), … … 76 76 switch (m_Type) 77 77 { 78 case JOINT: m_Joints .PushBack(m_ModelDoc->GetModel()->GetJoints()[i]); break; 79 case MESH: m_Meshes .PushBack(m_ModelDoc->GetModel()->GetMeshes()[i]); 80 m_DrawMs .PushBack(m_ModelDoc->GetModel()->m_Draw_Meshes[i]); break; 81 case ANIM: m_Anims .PushBack(m_ModelDoc->GetModel()->GetAnims()[i]); break; 78 case JOINT: m_Joints .PushBack(m_ModelDoc->GetModel()->GetJoints() [i]); break; 79 case ANIM: m_Anims .PushBack(m_ModelDoc->GetModel()->GetAnims() [i]); break; 80 case SKIN: m_Skins .PushBack(m_ModelDoc->GetModel()->GetSkins() [i]); break; 82 81 case GFIX: m_GuiFixtures.PushBack(m_ModelDoc->GetModel()->GetGuiFixtures()[i]); break; 82 case MESH: 83 { 84 wxASSERT(m_MeshInfos.Size() == INr); 85 m_MeshInfos.PushBackEmpty(); 86 MeshInfoT& MI=m_MeshInfos[m_MeshInfos.Size()-1]; 87 88 MI.Mesh =m_ModelDoc->GetModel()->GetMeshes()[i]; 89 MI.DrawMesh=m_ModelDoc->GetModel()->m_Draw_Meshes[i]; 90 91 for (unsigned long SkinNr=0; SkinNr<m_ModelDoc->GetModel()->GetSkins().Size(); SkinNr++) 92 { 93 MI.SkinsMaterials .PushBack(m_ModelDoc->GetModel()->GetSkins()[SkinNr].Materials[i]); 94 MI.SkinsRenderMaterials.PushBack(m_ModelDoc->GetModel()->GetSkins()[SkinNr].RenderMaterials[i]); 95 } 96 break; 97 } 83 98 } 84 99 } … … 90 105 if (m_Done && MatSys::Renderer!=NULL) 91 106 { 92 for (unsigned long MeshNr=0; MeshNr<m_Meshes.Size(); MeshNr++) 93 { 94 MatSys::Renderer->FreeMaterial(m_Meshes[MeshNr].RenderMaterial); 95 m_Meshes[MeshNr].RenderMaterial=NULL; 107 for (unsigned long MeshInfoNr=0; MeshInfoNr<m_MeshInfos.Size(); MeshInfoNr++) 108 { 109 MeshInfoT& MI=m_MeshInfos[MeshInfoNr]; 110 111 MatSys::Renderer->FreeMaterial(MI.Mesh.RenderMaterial); 112 MI.Mesh.RenderMaterial=NULL; 113 114 for (unsigned long SkinNr=0; SkinNr<MI.SkinsRenderMaterials.Size(); SkinNr++) 115 { 116 MatSys::Renderer->FreeMaterial(MI.SkinsRenderMaterials[SkinNr]); 117 MI.SkinsRenderMaterials[SkinNr]=NULL; 118 } 119 } 120 121 for (unsigned long SkinNr=0; SkinNr<m_Skins.Size(); SkinNr++) 122 { 123 for (unsigned long MatNr=0; MatNr<m_Skins[SkinNr].RenderMaterials.Size(); MatNr++) 124 { 125 MatSys::Renderer->FreeMaterial(m_Skins[SkinNr].RenderMaterials[MatNr]); 126 m_Skins[SkinNr].RenderMaterials[MatNr]=NULL; 127 } 96 128 } 97 129 } … … 127 159 if (m_Indices.Find(m_ModelDoc->GetModel()->GetGuiFixtures()[GFixNr].Points[PointNr].MeshNr)>=0) 128 160 { 129 m_Message="There are still GUI fixtures referring to the selected mesh(es). Please delete the GUI fixtures first, then delete the meshes.";161 m_Message="There are still GUI fixtures referring to the selected mesh(es). Delete the GUI fixtures first, then delete the meshes."; 130 162 return false; 131 163 } … … 142 174 { 143 175 case JOINT: m_ModelDoc->GetModel()->m_Joints .RemoveAtAndKeepOrder(i); break; 144 case MESH: m_ModelDoc->GetModel()->m_Meshes .RemoveAtAndKeepOrder(i);145 m_ModelDoc->GetModel()->m_Draw_Meshes.RemoveAtAndKeepOrder(i); break;146 176 case ANIM: m_ModelDoc->GetModel()->m_Anims .RemoveAtAndKeepOrder(i); break; 177 case SKIN: m_ModelDoc->GetModel()->m_Skins .RemoveAtAndKeepOrder(i); break; 147 178 case GFIX: m_ModelDoc->GetModel()->m_GuiFixtures.RemoveAtAndKeepOrder(i); break; 179 case MESH: 180 { 181 m_ModelDoc->GetModel()->m_Meshes .RemoveAtAndKeepOrder(i); 182 m_ModelDoc->GetModel()->m_Draw_Meshes.RemoveAtAndKeepOrder(i); 183 184 for (unsigned long SkinNr=0; SkinNr<m_ModelDoc->GetModel()->GetSkins().Size(); SkinNr++) 185 { 186 m_ModelDoc->GetModel()->m_Skins[SkinNr].Materials .RemoveAtAndKeepOrder(i); 187 m_ModelDoc->GetModel()->m_Skins[SkinNr].RenderMaterials.RemoveAtAndKeepOrder(i); 188 } 189 break; 190 } 148 191 } 149 192 } … … 171 214 { 172 215 case JOINT: m_ModelDoc->GetModel()->m_Joints .InsertAt(i, m_Joints [INr]); break; 173 case MESH: m_ModelDoc->GetModel()->m_Meshes .InsertAt(i, m_Meshes [INr]);174 m_ModelDoc->GetModel()->m_Draw_Meshes.InsertAt(i, m_DrawMs [INr]); break;175 216 case ANIM: m_ModelDoc->GetModel()->m_Anims .InsertAt(i, m_Anims [INr]); break; 217 case SKIN: m_ModelDoc->GetModel()->m_Skins .InsertAt(i, m_Skins [INr]); break; 176 218 case GFIX: m_ModelDoc->GetModel()->m_GuiFixtures.InsertAt(i, m_GuiFixtures[INr]); break; 219 case MESH: 220 { 221 const MeshInfoT& MI=m_MeshInfos[INr]; 222 223 m_ModelDoc->GetModel()->m_Meshes .InsertAt(i, MI.Mesh); 224 m_ModelDoc->GetModel()->m_Draw_Meshes.InsertAt(i, MI.DrawMesh); 225 226 for (unsigned long SkinNr=0; SkinNr<m_ModelDoc->GetModel()->GetSkins().Size(); SkinNr++) 227 { 228 m_ModelDoc->GetModel()->m_Skins[SkinNr].Materials .InsertAt(i, MI.SkinsMaterials[SkinNr]); 229 m_ModelDoc->GetModel()->m_Skins[SkinNr].RenderMaterials.InsertAt(i, MI.SkinsRenderMaterials[SkinNr]); 230 } 231 break; 232 } 177 233 } 178 234 } … … 199 255 case MESH: Name+=(m_Indices.Size()==1) ? "mesh" : "meshes"; break; 200 256 case ANIM: Name+=(m_Indices.Size()==1) ? "animation" : "animations"; break; 257 case SKIN: Name+=(m_Indices.Size()==1) ? "skin" : "skins"; break; 201 258 case GFIX: Name+=(m_Indices.Size()==1) ? "GUI fixture" : "GUI fixtures"; break; 202 259 } -
cafu/trunk/CaWE/ModelEditor/Commands/Delete.hpp
r334 r383 51 51 private: 52 52 53 struct MeshInfoT 54 { 55 CafuModelT::MeshT Mesh; ///< The deleted mesh. 56 MatSys::MeshT DrawMesh; ///< The draw mesh related to \c Mesh. 57 ArrayT<MaterialT*> SkinsMaterials; ///< The material in each skin for this mesh. 58 ArrayT<MatSys::RenderMaterialT*> SkinsRenderMaterials; ///< The render material in each skin for this mesh. 59 }; 60 53 61 ModelDocumentT* m_ModelDoc; 54 62 const ModelElementTypeT m_Type; 55 63 const ArrayT<unsigned int> m_Indices; 56 64 ArrayT<CafuModelT::JointT> m_Joints; ///< The deleted joints (if m_Type==JOINT). 57 ArrayT<CafuModelT::MeshT> m_Meshes; ///< The deleted meshes (if m_Type==MESH). 58 ArrayT<MatSys::MeshT> m_DrawMs; ///< The draw meshes related to m_Meshes. 65 ArrayT<MeshInfoT> m_MeshInfos; ///< Information about the deleted meshes (if m_Type==MESH). 59 66 ArrayT<CafuModelT::AnimT> m_Anims; ///< The deleted anims (if m_Type==ANIM). 67 ArrayT<CafuModelT::SkinT> m_Skins; ///< The deleted skins (if m_Type==SKIN). 60 68 ArrayT<CafuModelT::GuiFixtureT> m_GuiFixtures; ///< The deleted GUI fixtures (if m_Type==GFIX). 61 69 wxString m_Message; ///< Calling Do() may place an error or info message here that the caller is supposed to show to the user (when the command is first run). -
cafu/trunk/CaWE/ModelEditor/Commands/Rename.cpp
r334 r383 77 77 case MESH: return "Rename mesh"; 78 78 case ANIM: return "Rename anim"; 79 case SKIN: return "Rename skin"; 79 80 case GFIX: return "Rename GUI fixture"; 80 81 } … … 92 93 case MESH: return m_ModelDoc->GetModel()->m_Meshes [m_ElemNr].Name; 93 94 case ANIM: return m_ModelDoc->GetModel()->m_Anims [m_ElemNr].Name; 95 case SKIN: return m_ModelDoc->GetModel()->m_Skins [m_ElemNr].Name; 94 96 case GFIX: return m_ModelDoc->GetModel()->m_GuiFixtures[m_ElemNr].Name; 95 97 } … … 108 110 case MESH: m_ModelDoc->UpdateAllObservers_MeshChanged (m_ElemNr); break; 109 111 case ANIM: m_ModelDoc->UpdateAllObservers_AnimChanged (m_ElemNr); break; 112 case SKIN: m_ModelDoc->UpdateAllObservers_SkinChanged (m_ElemNr); break; 110 113 case GFIX: m_ModelDoc->UpdateAllObservers_GuiFixtureChanged(m_ElemNr); break; 111 114 } -
cafu/trunk/CaWE/ModelEditor/Commands/SetMeshMaterial.cpp
r305 r383 29 29 30 30 31 CommandSetMeshMaterialT::CommandSetMeshMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, const wxString& NewName)31 CommandSetMeshMaterialT::CommandSetMeshMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, int SkinNr, const wxString& NewName) 32 32 : m_ModelDoc(ModelDoc), 33 33 m_MeshNr(MeshNr), 34 m_SkinNr(SkinNr), 34 35 m_NewMat(m_ModelDoc->GetModel()->GetMaterialManager().GetMaterial(NewName.ToStdString())), 35 m_OldMat( m_ModelDoc->GetModel()->GetMeshes()[m_MeshNr].Material)36 m_OldMat(GetMaterial()) 36 37 { 37 38 } … … 49 50 if (m_NewMat==m_OldMat) return false; 50 51 51 // Cannot keep a reference to m_ModelDoc->GetModel()->m_Meshes[m_MeshNr] as a member,52 // Cannot keep a reference to m_ModelDoc->GetModel()->m_Meshes[m_MeshNr].Material as a member, 52 53 // because it's bound to become invalid whenever another command meddles with the array of meshes. 53 CafuModelT::MeshT& Mesh=m_ModelDoc->GetModel()->m_Meshes[m_MeshNr]; 54 55 Mesh.Material=m_NewMat; 54 GetMaterial()=m_NewMat; 56 55 57 56 if (MatSys::Renderer!=NULL) 58 57 { 59 MatSys::Renderer->FreeMaterial( Mesh.RenderMaterial);60 Mesh.RenderMaterial=MatSys::Renderer->RegisterMaterial(Mesh.Material);58 MatSys::Renderer->FreeMaterial(GetRenderMaterial()); 59 GetRenderMaterial()=MatSys::Renderer->RegisterMaterial(GetMaterial()); 61 60 } 62 61 … … 72 71 if (!m_Done) return; 73 72 74 // Cannot keep a reference to m_ModelDoc->GetModel()->m_Meshes[m_MeshNr] as a member,73 // Cannot keep a reference to m_ModelDoc->GetModel()->m_Meshes[m_MeshNr].Material as a member, 75 74 // because it's bound to become invalid whenever another command meddles with the array of meshes. 76 CafuModelT::MeshT& Mesh=m_ModelDoc->GetModel()->m_Meshes[m_MeshNr]; 77 78 Mesh.Material=m_OldMat; 75 GetMaterial()=m_OldMat; 79 76 80 77 if (MatSys::Renderer!=NULL) 81 78 { 82 MatSys::Renderer->FreeMaterial( Mesh.RenderMaterial);83 Mesh.RenderMaterial=MatSys::Renderer->RegisterMaterial(Mesh.Material);79 MatSys::Renderer->FreeMaterial(GetRenderMaterial()); 80 GetRenderMaterial()=MatSys::Renderer->RegisterMaterial(GetMaterial()); 84 81 } 85 82 … … 89 86 90 87 88 MaterialT*& CommandSetMeshMaterialT::GetMaterial() 89 { 90 if (m_SkinNr<0) 91 return m_ModelDoc->GetModel()->m_Meshes[m_MeshNr].Material; 92 93 return m_ModelDoc->GetModel()->m_Skins[m_SkinNr].Materials[m_MeshNr]; 94 } 95 96 97 MatSys::RenderMaterialT*& CommandSetMeshMaterialT::GetRenderMaterial() 98 { 99 if (m_SkinNr<0) 100 return m_ModelDoc->GetModel()->m_Meshes[m_MeshNr].RenderMaterial; 101 102 return m_ModelDoc->GetModel()->m_Skins[m_SkinNr].RenderMaterials[m_MeshNr]; 103 } 104 105 91 106 wxString CommandSetMeshMaterialT::GetName() const 92 107 { -
cafu/trunk/CaWE/ModelEditor/Commands/SetMeshMaterial.hpp
r303 r383 27 27 28 28 class MaterialT; 29 namespace MatSys { class RenderMaterialT; } 29 30 30 31 … … 37 38 public: 38 39 39 CommandSetMeshMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, const wxString& NewName);40 CommandSetMeshMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, int SkinNr, const wxString& NewName); 40 41 41 42 // CommandT implementation. … … 47 48 private: 48 49 49 ModelDocumentT* m_ModelDoc; 50 unsigned int m_MeshNr; 51 MaterialT* m_NewMat; 52 MaterialT* m_OldMat; 50 MaterialT*& GetMaterial(); 51 MatSys::RenderMaterialT*& GetRenderMaterial(); 52 53 ModelDocumentT* m_ModelDoc; 54 const unsigned int m_MeshNr; 55 const int m_SkinNr; 56 MaterialT* m_NewMat; 57 MaterialT* m_OldMat; 53 58 }; 54 59 } -
cafu/trunk/CaWE/ModelEditor/ElementTypes.hpp
r334 r383 26 26 namespace ModelEditor 27 27 { 28 /// Enumerates the types of the elements that a model is comp rised of.28 /// Enumerates the types of the elements that a model is composed of. 29 29 enum ModelElementTypeT 30 30 { … … 32 32 MESH =1, 33 33 ANIM =2, 34 GFIX =3 34 SKIN =3, 35 GFIX =4 35 36 }; 36 37 } -
cafu/trunk/CaWE/ModelEditor/ElementsList.cpp
r343 r383 79 79 { 80 80 if (m_IsRecursiveSelfNotify) return; 81 if (m_TYPE==MESH && Type==SKIN) { InitListItems(); return; } 81 82 if (Type!=m_TYPE) return; 82 83 … … 131 132 132 133 134 void ElementsListT::Notify_SkinChanged(SubjectT* Subject, unsigned int SkinNr) 135 { 136 if (m_IsRecursiveSelfNotify) return; 137 138 // Update the list of meshes also when a skin changed, as with each 139 // mesh we display the used material in the currently selected skin. 140 if (m_TYPE!=MESH) return; 141 142 InitListItems(); 143 } 144 145 133 146 void ElementsListT::Notify_GuiFixtureChanged(SubjectT* Subject, unsigned int GuiFixtureNr) 134 147 { … … 164 177 165 178 case MESH: 179 { 180 wxListItem Col; 181 182 GetColumn(2, Col); 183 Col.SetText(wxString::Format("Material (%s)", m_ModelDoc->GetSelSkinString())); 184 SetColumn(2, Col); 185 166 186 for (unsigned long ElemNr=0; ElemNr<m_ModelDoc->GetModel()->GetMeshes().Size(); ElemNr++) 167 187 { 188 const MaterialT* Mat=m_ModelDoc->GetModel()->GetMaterial(ElemNr, m_ModelDoc->GetSelSkinNr()); 189 168 190 InsertItem(ElemNr, m_ModelDoc->GetModel()->GetMeshes()[ElemNr].Name); 169 191 SetItem(ElemNr, 1, wxString::Format("%lu", ElemNr)); 170 SetItem(ElemNr, 2, m_ModelDoc->GetModel()->GetMeshes()[ElemNr].Material->Name);192 SetItem(ElemNr, 2, Mat ? Mat->Name : "<NULL>"); 171 193 172 194 if (Sel.Find(ElemNr)!=-1) Select(ElemNr); 173 195 } 174 196 break; 197 } 175 198 176 199 case ANIM: … … 182 205 if (Sel.Find(ElemNr)!=-1) Select(ElemNr); 183 206 } 207 break; 208 209 case SKIN: 210 wxASSERT(false); 184 211 break; 185 212 -
cafu/trunk/CaWE/ModelEditor/ElementsList.hpp
r343 r383 51 51 void Notify_MeshChanged(SubjectT* Subject, unsigned int MeshNr); 52 52 void Notify_AnimChanged(SubjectT* Subject, unsigned int AnimNr); 53 void Notify_SkinChanged(SubjectT* Subject, unsigned int SkinNr); 53 54 void Notify_GuiFixtureChanged(SubjectT* Subject, unsigned int GuiFixtureNr); 54 55 void Notify_SubjectDies(SubjectT* dyingSubject); -
cafu/trunk/CaWE/ModelEditor/MeshInspector.cpp
r322 r383 118 118 { 119 119 if (m_IsRecursiveSelfNotify) return; 120 if (Type!=MESH) return; 120 121 // Update the mesh also when a skin changed, as the material that 122 // is used for this mesh depends on the currently selected skin. 123 if (Type!=MESH && Type!=SKIN) return; 121 124 122 125 RefreshPropGrid(); … … 128 131 if (m_IsRecursiveSelfNotify) return; 129 132 133 RefreshPropGrid(); 134 } 135 136 137 void MeshInspectorT::Notify_SkinChanged(SubjectT* Subject, unsigned int SkinNr) 138 { 139 if (m_IsRecursiveSelfNotify) return; 140 141 // Update the mesh also when a skin changed, as the material that 142 // is used for this mesh depends on the currently selected skin. 130 143 RefreshPropGrid(); 131 144 } … … 159 172 { 160 173 const CafuModelT::MeshT& Mesh=Meshes[Selection[0]]; 174 const MaterialT* Mat =m_ModelDoc->GetModel()->GetMaterial(Selection[0], m_ModelDoc->GetSelSkinNr()); 161 175 162 176 Append(new wxStringProperty("Name", wxPG_LABEL, Mesh.Name)); 163 Append(new MaterialPropertyT("Material", wxPG_LABEL, Mesh.Material ? Mesh.Material->Name : "<NULL>", m_ModelDoc)); 177 178 Append(new MaterialPropertyT(wxString::Format("Material (%s)", m_ModelDoc->GetSelSkinString()), 179 wxPG_LABEL, Mat ? Mat->Name : "<NULL>", m_ModelDoc)); 164 180 165 181 wxPGProperty* UseGivenTS=Append(new wxBoolProperty("Use given TS", wxPG_LABEL, false)); … … 209 225 210 226 if (PropName=="Name" ) ok=m_Parent->SubmitCommand(new CommandRenameT(m_ModelDoc, MESH, MeshNr, Event.GetValue().GetString())); 211 else if (PropName=="Material") ok=m_Parent->SubmitCommand(new CommandSetMeshMaterialT(m_ModelDoc, MeshNr, Event.GetValue().GetString()));227 else if (PropName=="Material") ok=m_Parent->SubmitCommand(new CommandSetMeshMaterialT(m_ModelDoc, MeshNr, m_ModelDoc->GetSelSkinNr(), Event.GetValue().GetString())); 212 228 else 213 229 { -
cafu/trunk/CaWE/ModelEditor/MeshInspector.hpp
r305 r383 43 43 void Notify_SelectionChanged(SubjectT* Subject, ModelElementTypeT Type, const ArrayT<unsigned int>& OldSel, const ArrayT<unsigned int>& NewSel); 44 44 void Notify_MeshChanged(SubjectT* Subject, unsigned int MeshNr); 45 void Notify_SkinChanged(SubjectT* Subject, unsigned int SkinNr); 45 46 void Notify_SubjectDies(SubjectT* dyingSubject); 46 47 -
cafu/trunk/CaWE/ModelEditor/ModelDocument.cpp
r381 r383 110 110 111 111 112 int ModelEditor::ModelDocumentT::GetSelSkinNr() const 113 { 114 return m_Selection[SKIN].Size()==0 ? -1 : m_Selection[SKIN][0]; 115 } 116 117 118 wxString ModelEditor::ModelDocumentT::GetSelSkinString() const 119 { 120 if (m_Selection[SKIN].Size()==0) 121 return "default skin"; 122 123 return wxString::Format("skin %u: \"%s\"", m_Selection[SKIN][0], m_Model->GetSkins()[m_Selection[SKIN][0]].Name); 124 } 125 126 112 127 void ModelEditor::ModelDocumentT::SetSelection(ModelElementTypeT Type, const ArrayT<unsigned int>& NewSel) 113 128 { 114 wxASSERT(Type< 4);129 wxASSERT(Type<5); 115 130 m_Selection[Type]=NewSel; 116 131 -
cafu/trunk/CaWE/ModelEditor/ModelDocument.hpp
r381 r383 102 102 103 103 const CafuModelT* GetModel() const { return m_Model; } 104 const ArrayT<unsigned int>& GetSelection(ModelElementTypeT Type) const { wxASSERT(Type< 4); return m_Selection[Type]; }104 const ArrayT<unsigned int>& GetSelection(ModelElementTypeT Type) const { wxASSERT(Type<5); return m_Selection[Type]; } 105 105 const BoundingBox3fT& GetSequenceBB() const { return m_SequenceBB; } 106 int GetSelSkinNr() const; ///< Return the index number of the currently selected skin, or -1 when no skin (that is, the default skin) is selected. 107 wxString GetSelSkinString() const; ///< Returns a string representation for the currently selected skin. 106 108 const ArrayT<EditorMaterialI*>& GetEditorMaterials() const { return m_EditorMaterials; } 107 109 const AnimStateT& GetAnimState() const { return m_AnimState; } … … 135 137 136 138 CafuModelT* m_Model; ///< The model that is being edited. 137 ArrayT<unsigned int> m_Selection[ 4]; ///< The selected joints, meshes, animations and GUI fixtures.139 ArrayT<unsigned int> m_Selection[5]; ///< The selected joints, meshes, animations, skins and GUI fixtures. 138 140 BoundingBox3fT m_SequenceBB; ///< The bounding-box encompassing all frames of the currently selected animation sequence(s). 139 141 ArrayT<EditorMaterialI*> m_EditorMaterials; ///< One editor material for each material in the model (its material manager). -
cafu/trunk/CaWE/ModelEditor/ObserverPattern.cpp
r341 r383 102 102 103 103 104 void SubjectT::UpdateAllObservers_SkinChanged(unsigned int SkinNr) 105 { 106 for (unsigned long ObsNr=0; ObsNr<m_Observers.Size(); ObsNr++) 107 m_Observers[ObsNr]->Notify_SkinChanged(this, SkinNr); 108 } 109 110 104 111 void SubjectT::UpdateAllObservers_GuiFixtureChanged(unsigned int GuiFixtureNr) 105 112 { -
cafu/trunk/CaWE/ModelEditor/ObserverPattern.hpp
r374 r383 79 79 virtual void Notify_AnimChanged(SubjectT* Subject, unsigned int AnimNr) { } 80 80 81 /// Notifies the observer that a skin has changed. 82 /// @param Subject The model document with the model in which the skin has changed. 83 /// @param AnimNr The number of the skin that has changed. 84 virtual void Notify_SkinChanged(SubjectT* Subject, unsigned int SkinNr) { } 85 81 86 /// Notifies the observer that a GUI fixture has changed. 82 87 /// @param Subject The model document with the model in which the GUI fixture has changed. … … 125 130 virtual void UpdateAllObservers_MeshChanged(unsigned int MeshNr); 126 131 virtual void UpdateAllObservers_AnimChanged(unsigned int AnimNr); 132 virtual void UpdateAllObservers_SkinChanged(unsigned int SkinNr); 127 133 virtual void UpdateAllObservers_GuiFixtureChanged(unsigned int GuiFixtureNr); 128 134 virtual void UpdateAllObservers_AnimStateChanged(); -
cafu/trunk/CaWE/ModelEditor/ScenePropGrid.cpp
r381 r383 101 101 wxPGProperty* CameraPosY=AppendIn(CameraPos, new wxFloatProperty("y", wxPG_LABEL, Camera.Pos.y)); SetPropertyTextColour(CameraPosY, wxColour(0, 200, 0)); 102 102 wxPGProperty* CameraPosZ=AppendIn(CameraPos, new wxFloatProperty("z", wxPG_LABEL, Camera.Pos.z)); SetPropertyTextColour(CameraPosZ, wxColour(0, 0, 200)); 103 Collapse(CameraPos); 103 104 104 105 wxPGProperty* CameraAngles=AppendIn(CameraCat, new wxStringProperty("Angles", "Camera.Angles", "<composed>")); … … 106 107 // AppendIn(CameraAngles, new wxFloatProperty("Roll", wxPG_LABEL, Camera.Angles.roll())); 107 108 AppendIn(CameraAngles, new wxFloatProperty("Yaw", wxPG_LABEL, Camera.Angles.yaw())); 109 Collapse(CameraAngles); 108 110 109 111 wxPGProperty* CameraAdvanced=AppendIn(CameraCat, new wxStringProperty("Advanced", "Camera.Advanced", "<composed>")); -
cafu/trunk/CaWE/ModelEditor/SceneView3D.cpp
r382 r383 63 63 Vector3fT ModelEditor::SceneView3DT::TraceCameraRay(const wxPoint& RefPtWin, ModelT::TraceResultT& ModelTR) const 64 64 { 65 float BestFraction=std::numeric_limits<float>::max(); 66 Vector3fT BestPos =GetCamera().Pos; 65 const ModelDocumentT* ModelDoc =m_Parent->GetModelDoc(); 66 float BestFraction=std::numeric_limits<float>::max(); 67 Vector3fT BestPos =GetCamera().Pos; 67 68 68 69 // Note that our ray does intentionally not start at GetCamera().Pos, … … 81 82 // Include the ground plane in the test only if it is visible - everything else confuses the user! 82 83 if (m_Parent->GetScenePropGrid()->m_GroundPlane_Show) 83 Elems.PushBack( m_Parent->GetModelDoc()->GetGround());84 Elems.PushBack(ModelDoc->GetGround()); 84 85 85 86 for (unsigned long ElemNr=0; ElemNr<Elems.Size(); ElemNr++) … … 100 101 101 102 // Trace the ray against the model, which is a per-triangle accurate test. 102 const ModelDocumentT::AnimStateT& Anim = m_Parent->GetModelDoc()->GetAnimState();103 const ArrayT<unsigned int>& AnimSel= m_Parent->GetModelDoc()->GetSelection(ANIM);103 const ModelDocumentT::AnimStateT& Anim =ModelDoc->GetAnimState(); 104 const ArrayT<unsigned int>& AnimSel=ModelDoc->GetSelection(ANIM); 104 105 ModelT::TraceResultT Result; 105 106 106 if (m_Parent->GetModelDoc()->GetModel()->TraceRay(AnimSel.Size()==0 ? -1 : AnimSel[0], Anim.FrameNr, -1 /*SkinNr*/, RayOrigin, RayDir, Result) && Result.Fraction<BestFraction) 107 if (ModelDoc->GetModel()->TraceRay(AnimSel.Size()==0 ? -1 : AnimSel[0], Anim.FrameNr, 108 ModelDoc->GetSelSkinNr(), RayOrigin, RayDir, Result) && Result.Fraction<BestFraction) 107 109 { 108 110 BestFraction=Result.Fraction; … … 388 390 if (ScenePropGrid->m_Model_ShowMesh) 389 391 { 390 Model->Draw(SequNr, Anim.FrameNr, -1 /*SkinNr*/, 0.0f /*LodDist*/, (CafuModelT::SuperT*)NULL);392 Model->Draw(SequNr, Anim.FrameNr, ModelDoc->GetSelSkinNr(), 0.0f /*LodDist*/, (CafuModelT::SuperT*)NULL); 391 393 392 394 for (unsigned long SmNr=0; SmNr<ModelDoc->GetSubmodels().Size(); SmNr++) -
cafu/trunk/CaWE/ModelEditor/SubmodelsList.hpp
r343 r383 34 34 35 35 36 /// A control for displaying a list of the elements (meshes or animations) ofthe model.36 /// A control for displaying a list of the submodels that are rendered with the model. 37 37 class SubmodelsListT : public wxListView, public ObserverT 38 38 { -
cafu/trunk/Libs/Models/Loader_mdl.cpp
r382 r383 541 541 CafuModelT::SkinT& Skin =Skins[SkinNr-1]; 542 542 543 Skin.Name="Skin"; 544 543 545 for (unsigned long MeshNr=0; MeshNr<m_MeshSkinRef.Size(); MeshNr++) 544 546 { -
cafu/trunk/Libs/Models/Model_cmdl.hpp
r382 r383 268 268 bool IsVertexNrOK(const GuiFixtureT& GF, unsigned int PointNr) const; 269 269 270 /// Returns the proper material for the given mesh in the given skin. 271 const MaterialT* GetMaterial(unsigned long MeshNr, int SkinNr) const; 272 270 273 // The ModelT interface. 271 274 const std::string& GetFileName() const; // TODO: Remove!?! … … 297 300 void InitMeshes(); ///< An auxiliary method for the constructors. 298 301 void UpdateCachedDrawData(int SequenceNr, float FrameNr, const SuperT* Super) const; ///< A private auxiliary method. 299 const MaterialT* GetMaterial(unsigned long MeshNr, int SkinNr) const; ///< Returns the proper material for the given mesh in the given skin.300 302 MatSys::RenderMaterialT* GetRenderMaterial(unsigned long MeshNr, int SkinNr) const; ///< Returns the proper render material for the given mesh in the given skin. 301 303
