Changeset 390

Show
Ignore:
Timestamp:
09/21/11 11:37:12 (8 months ago)
Author:
Carsten
Message:

Model Editor:
Continuing r383 to r385, this change addresses some issues with model skins,
making sure that the number of materials in each skin always matches the number of meshes.

Location:
cafu/trunk
Files:
5 modified
2 moved

Legend:

Unmodified
Added
Removed
  • cafu/trunk/CaWE/ModelEditor/Commands/Add.cpp

    r384 r390  
    3232      m_Skins() 
    3333{ 
     34    wxASSERT(Skin.Materials.Size()       == m_ModelDoc->GetModel()->GetMeshes().Size()); 
     35    wxASSERT(Skin.RenderMaterials.Size() == m_ModelDoc->GetModel()->GetMeshes().Size()); 
     36 
    3437    m_Skins.PushBack(Skin); 
    3538} 
     
    5356    switch (m_Type) 
    5457    { 
     58        case MESH: 
     59            // If we supported adding meshes, note that we had to add a 
     60            // new "NULL" material (and render material) to each skin as well. 
     61            break; 
     62 
    5563        case SKIN: 
    5664            for (unsigned long SkinNr=0; SkinNr<m_Skins.Size(); SkinNr++) 
     
    92100    switch (m_Type) 
    93101    { 
     102        case MESH: 
     103            // For undoing the addition of a mesh, note that we had to remove 
     104            // the related material (and render material) in each skin as well. 
     105            break; 
     106 
    94107        case SKIN: 
    95108            for (unsigned long SkinNr=0; SkinNr<m_Skins.Size(); SkinNr++) 
  • cafu/trunk/CaWE/ModelEditor/Commands/SetMaterial.cpp

    r383 r390  
    2020*/ 
    2121 
    22 #include "SetMeshMaterial.hpp" 
     22#include "SetMaterial.hpp" 
    2323#include "../ModelDocument.hpp" 
    2424#include "MaterialSystem/Renderer.hpp" 
     
    2929 
    3030 
    31 CommandSetMeshMaterialT::CommandSetMeshMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, int SkinNr, const wxString& NewName) 
     31CommandSetMaterialT::CommandSetMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, int SkinNr, const wxString& NewName) 
    3232    : m_ModelDoc(ModelDoc), 
    3333      m_MeshNr(MeshNr), 
     
    3939 
    4040 
    41 bool CommandSetMeshMaterialT::Do() 
     41bool CommandSetMaterialT::Do() 
    4242{ 
    4343    wxASSERT(!m_Done); 
     
    6060    } 
    6161 
    62     m_ModelDoc->UpdateAllObservers_MeshChanged(m_MeshNr); 
     62    if (m_SkinNr<0) m_ModelDoc->UpdateAllObservers_MeshChanged(m_MeshNr); 
     63               else m_ModelDoc->UpdateAllObservers_SkinChanged(m_SkinNr); 
     64 
    6365    m_Done=true; 
    6466    return true; 
     
    6668 
    6769 
    68 void CommandSetMeshMaterialT::Undo() 
     70void CommandSetMaterialT::Undo() 
    6971{ 
    7072    wxASSERT(m_Done); 
     
    8183    } 
    8284 
    83     m_ModelDoc->UpdateAllObservers_MeshChanged(m_MeshNr); 
     85    if (m_SkinNr<0) m_ModelDoc->UpdateAllObservers_MeshChanged(m_MeshNr); 
     86               else m_ModelDoc->UpdateAllObservers_SkinChanged(m_SkinNr); 
     87 
    8488    m_Done=false; 
    8589} 
    8690 
    8791 
    88 MaterialT*& CommandSetMeshMaterialT::GetMaterial() 
     92MaterialT*& CommandSetMaterialT::GetMaterial() 
    8993{ 
    9094    if (m_SkinNr<0) 
     
    9599 
    96100 
    97 MatSys::RenderMaterialT*& CommandSetMeshMaterialT::GetRenderMaterial() 
     101MatSys::RenderMaterialT*& CommandSetMaterialT::GetRenderMaterial() 
    98102{ 
    99103    if (m_SkinNr<0) 
     
    104108 
    105109 
    106 wxString CommandSetMeshMaterialT::GetName() const 
     110wxString CommandSetMaterialT::GetName() const 
    107111{ 
    108112    return "Assign material"; 
  • cafu/trunk/CaWE/ModelEditor/Commands/SetMaterial.hpp

    r383 r390  
    2020*/ 
    2121 
    22 #ifndef _MODELEDITOR_SET_MESH_MATERIAL_HPP_ 
    23 #define _MODELEDITOR_SET_MESH_MATERIAL_HPP_ 
     22#ifndef _MODELEDITOR_SET_MATERIAL_HPP_ 
     23#define _MODELEDITOR_SET_MATERIAL_HPP_ 
    2424 
    2525#include "../../CommandPattern.hpp" 
     
    3434    class ModelDocumentT; 
    3535 
    36     class CommandSetMeshMaterialT : public CommandT 
     36    /// This command sets a new material for a given mesh in a given skin. 
     37    class CommandSetMaterialT : public CommandT 
    3738    { 
    3839        public: 
    3940 
    40         CommandSetMeshMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, int SkinNr, const wxString& NewName); 
     41        CommandSetMaterialT(ModelDocumentT* ModelDoc, unsigned int MeshNr, int SkinNr, const wxString& NewName); 
    4142 
    4243        // CommandT implementation. 
  • cafu/trunk/CaWE/ModelEditor/MeshInspector.cpp

    r383 r390  
    2424#include "ModelDocument.hpp" 
    2525#include "Commands/Rename.hpp" 
    26 #include "Commands/SetMeshMaterial.hpp" 
     26#include "Commands/SetMaterial.hpp" 
    2727 
    2828#include "../EditorMaterial.hpp" 
     
    177177 
    178178        Append(new MaterialPropertyT(wxString::Format("Material (%s)", m_ModelDoc->GetSelSkinString()), 
    179             wxPG_LABEL, Mat ? Mat->Name : "<NULL>", m_ModelDoc)); 
     179            "Material", Mat ? Mat->Name : "<NULL>", m_ModelDoc)); 
    180180 
    181181        wxPGProperty* UseGivenTS=Append(new wxBoolProperty("Use given TS", wxPG_LABEL, false)); 
     
    225225 
    226226         if (PropName=="Name"    ) ok=m_Parent->SubmitCommand(new CommandRenameT(m_ModelDoc, MESH, MeshNr, Event.GetValue().GetString())); 
    227     else if (PropName=="Material") ok=m_Parent->SubmitCommand(new CommandSetMeshMaterialT(m_ModelDoc, MeshNr, m_ModelDoc->GetSelSkinNr(), Event.GetValue().GetString())); 
     227    else if (PropName=="Material") ok=m_Parent->SubmitCommand(new CommandSetMaterialT(m_ModelDoc, MeshNr, m_ModelDoc->GetSelSkinNr(), Event.GetValue().GetString())); 
    228228    else 
    229229    { 
  • cafu/trunk/CaWE/ModelEditor/SkinsList.cpp

    r383 r390  
    195195 
    196196            Skin.Name="New Skin"; 
     197            while (Skin.Materials.Size()       < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.Materials.PushBack(NULL); 
     198            while (Skin.RenderMaterials.Size() < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.RenderMaterials.PushBack(NULL); 
    197199 
    198200            m_MainFrame->SubmitCommand(new CommandAddT(m_ModelDoc, Skin)); 
     
    326328 
    327329            Skin.Name="New Skin"; 
     330            while (Skin.Materials.Size()       < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.Materials.PushBack(NULL); 
     331            while (Skin.RenderMaterials.Size() < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.RenderMaterials.PushBack(NULL); 
    328332 
    329333            m_MainFrame->SubmitCommand(new CommandAddT(m_ModelDoc, Skin)); 
  • cafu/trunk/Libs/Models/Model_cmdl.cpp

    r382 r390  
    239239 // if (m_Meshes.Size()==0) throw ModelT::LoadError();  // Consider models with no meshes as valid, skeleton-only meshes are sometimes useful for testing. 
    240240 
     241    // Make sure that each skin has as many materials as there are meshes. 
     242    for (unsigned long SkinNr=0; SkinNr<m_Skins.Size(); SkinNr++) 
     243    { 
     244        SkinT& Skin=m_Skins[SkinNr]; 
     245 
     246        while (Skin.Materials.Size() > m_Meshes.Size()) Skin.Materials.DeleteBack(); 
     247        while (Skin.Materials.Size() < m_Meshes.Size()) Skin.Materials.PushBack(NULL); 
     248 
     249        while (Skin.RenderMaterials.Size() > m_Meshes.Size()) Skin.RenderMaterials.DeleteBack(); 
     250        while (Skin.RenderMaterials.Size() < m_Meshes.Size()) Skin.RenderMaterials.PushBack(NULL); 
     251    } 
     252 
    241253    InitMeshes(); 
    242254 
     
    255267        SkinT& Skin=m_Skins[SkinNr]; 
    256268 
    257         assert(Skin.Materials.Size()==m_Meshes.Size()); 
    258         assert(Skin.Materials.Size()==Skin.RenderMaterials.Size()); 
     269        assert(Skin.Materials.Size()      ==m_Meshes.Size()); 
     270        assert(Skin.RenderMaterials.Size()==m_Meshes.Size()); 
    259271 
    260272        for (unsigned long MatNr=0; MatNr<Skin.Materials.Size(); MatNr++) 
  • cafu/trunk/Libs/Models/Model_cmdl.hpp

    r383 r390  
    3939namespace ModelEditor { class CommandSetAnimFPST; } 
    4040namespace ModelEditor { class CommandSetAnimNextT; } 
    41 namespace ModelEditor { class CommandSetMeshMaterialT; } 
     41namespace ModelEditor { class CommandSetMaterialT; } 
    4242namespace ModelEditor { class CommandTransformJointT; } 
    4343namespace ModelEditor { class CommandUpdateAnimT; } 
     
    292292    friend class ModelEditor::CommandSetAnimFPST; 
    293293    friend class ModelEditor::CommandSetAnimNextT; 
    294     friend class ModelEditor::CommandSetMeshMaterialT; 
     294    friend class ModelEditor::CommandSetMaterialT; 
    295295    friend class ModelEditor::CommandTransformJointT; 
    296296    friend class ModelEditor::CommandUpdateAnimT;