OSDN Git Service

メッシュ単位のインデックスカラーに対応
authorqw_fuku <fkhideaki@gmail.com>
Sun, 1 Mar 2015 09:41:47 +0000 (18:41 +0900)
committerqw_fuku <fkhideaki@gmail.com>
Sun, 1 Mar 2015 09:41:47 +0000 (18:41 +0900)
14 files changed:
Src/LibQtGeoViewerCore/Format/AssimpReader.cpp
Src/LibQtGeoViewerCore/Format/MqoLoader.cpp
Src/LibQtGeoViewerCore/Format/ObjLoader.cpp
Src/LibQtGeoViewerCore/Format/Plyloader.cpp
Src/LibQtGeoViewerCore/Format/PmdLoader.cpp
Src/LibQtGeoViewerCore/Format/StlLoader.cpp
Src/LibQtGeoViewerCore/GeomObject.h
Src/LibQtGeoViewerCore/MeshBuf.h
Src/LibQtGeoViewerCore/SceneMain.cpp
Src/QtGeoViewer/CrossSectionRender.cpp
Src/QtGeoViewer/FormVertexBuilder.cpp
Src/QtGeoViewer/GeometryRender.cpp
Src/QtGeoViewer/SampleShapeBuilder.cpp
Src/QtGeoViewer/View3D.cpp

index e117f21..95f5b21 100644 (file)
@@ -38,6 +38,7 @@ bool AssimpReader::Load(SceneMain& scene, const std::string& filename)
        {
                aiMesh* mesh = ai_scene->mMeshes[i];
                MeshBuf* mbuf = geom->CreateNewMeshBuf();
+               scene.RefreshObjectIndex();
 
                lib_geo::BaseMesh& mesh_dst = mbuf->m_Mesh;
                mbuf->m_Name = mesh->mName.C_Str();
index 8340484..41b2788 100644 (file)
@@ -17,6 +17,7 @@ bool MqoLoader::Load(SceneMain& scene, const std::string& filename)
 
        GeomObject* geom = scene.CreateNewGeometry();
        MeshBuf* mbuf = geom->CreateNewMeshBuf();
+       scene.RefreshObjectIndex();
 
        mqo_obj.ConvertToBaseMesh(mbuf->m_Mesh);
 
index a8eaab7..2bdd742 100644 (file)
@@ -75,6 +75,8 @@ bool ObjLoader::Load(SceneMain& scene, const std::string& filename)
                OnPostLoadObj(scene, *mbuf, obj_mesh);
        }
 
+       scene.RefreshObjectIndex();
+
        geom->m_Name       = FileUtil::GetFileTitle(filename);
        geom->m_FileFormat = GeomFileFormat::Obj;
        geom->m_FilePath   = filename;
index 4319125..26be0f5 100644 (file)
@@ -17,6 +17,8 @@ bool PlyLoader::Load(SceneMain& scene, const std::string& filename)
 
        GeomObject* geom = scene.CreateNewGeometry();
        MeshBuf* mbuf = geom->CreateNewMeshBuf();
+       scene.RefreshObjectIndex();
+
        lib_geo::BaseMesh& mesh_dst = mbuf->m_Mesh;
 
        ply_mesh.ConvertToBaseMesh(mesh_dst);
index 0925f04..9cf99fe 100644 (file)
@@ -22,6 +22,7 @@ bool PmdLoader::Load(SceneMain& scene, const std::string& filename)
 
        GeomObject* geom = scene.CreateNewGeometry();
        MeshBuf* mbuf = geom->CreateNewMeshBuf();
+       scene.RefreshObjectIndex();
 
        lib_geo::BaseMesh& m = mbuf->m_Mesh;
        m.m_Verts.reserve(pm.vertices.size());
index 4ca4171..3d554b6 100644 (file)
@@ -13,6 +13,7 @@ bool StlLoader::Load(SceneMain& scene, const std::string& filename)
 {
        GeomObject* geom = scene.CreateNewGeometry();
        MeshBuf* mbuf = geom->CreateNewMeshBuf();
+       scene.RefreshObjectIndex();
        lib_geo::BaseMesh& mesh_dst = mbuf->m_Mesh;
 
        lib_geo::StlMesh stl_mesh;
index 6f19318..680afb6 100644 (file)
@@ -45,6 +45,11 @@ public:
 
        bool IsInChild(const MeshBuf* mbuf) const;
 
+       void SetObjectIndex(int idx)
+       {
+               m_ObjectIndex = idx;
+       }
+
        int GetObjectIndex(void) const
        {
                return m_ObjectIndex;
index cb1756c..a5676ff 100644 (file)
@@ -72,8 +72,9 @@ class MeshBuf
 {
 public:
        MeshBuf(GeomObject* parent = NULL) :
-               m_Parent(parent),
                m_MBufIdx(-1),
+               m_WholeIndex(-1),
+               m_Parent(parent),
                m_Visible(true)
        {
        }
@@ -154,6 +155,8 @@ private:
 
 public:
        int m_MBufIdx;
+       int m_WholeIndex;
+
        bool m_Visible;
        std::string m_Name;
 
index 71dd811..f92d26c 100644 (file)
@@ -369,15 +369,18 @@ void SceneMain::CreateSampleTexture(SampleTextureBuilder::TextureType tex_type)
 
 void SceneMain::RefreshObjectIndex(void)
 {
+       size_t io = 0;
        for (size_t i = 0; i < m_Objects.size(); ++i)
        {
                GeomObject& o = m_Objects[i];
-               o.m_ObjectIndex = (int)i;
+               o.SetObjectIndex((int)i);
                for (size_t j = 0; j < o.m_MeshAry.size(); ++j)
                {
                        MeshBuf& m = o.m_MeshAry[j];
                        m.m_MBufIdx = (int)j;
+                       m.m_WholeIndex = (int)(j + io);
                }
+               io += o.m_MeshAry.size();
        }
 }
 
index 0fc7a47..a2d1596 100644 (file)
@@ -68,7 +68,7 @@ void CrossSectionRender::DrawAllGeomCsConvexHull(std::vector<geom::MeshBuf*>& me
 
                        lib_graph::color4f c;
                        if (cs_config.m_MultiColor)
-                               c = IndexColor::GetColor(obj->GetObjectIndex());
+                               c = IndexColor::GetColor(mbuf->m_WholeIndex);
                        else
                                c.set(1.0, 0.0, 0.0, 1.0);
 
index a48d5aa..0300dcd 100644 (file)
@@ -106,6 +106,7 @@ void FormVertexBuilder::CreateVertex(SceneMain& scene)
 
        GeomObject* obj = scene.CreateNewGeometry();
        MeshBuf* mbuf = obj->CreateNewMeshBuf();
+       scene.RefreshObjectIndex();
 
        obj->m_Name = "vertscript";
        obj->m_VertexOnlyMode = true;
index 388308e..3f7229c 100644 (file)
@@ -142,7 +142,7 @@ void GeometryRender::DrawGeomHighlight(MeshBuf& mbuf, SceneMain& scene)
        if (scene.m_Sels.IsMBufSelected())
                glStencilFunc(GL_NOTEQUAL, mbuf.GetDecWholeIdx() + 1, ~0);
        else
-               glStencilFunc(GL_NOTEQUAL, mbuf.GetParent()->m_ObjectIndex + 1, ~0);
+               glStencilFunc(GL_NOTEQUAL, mbuf.GetParent()->GetObjectIndex() + 1, ~0);
 
        glColor3d(1, 0.5, 0);
        glLineWidth(3.0f);
@@ -191,7 +191,7 @@ void GeometryRender::DrawMeshFaceMain(SceneMain& scene, ShaderInterface* shader,
                if (scene.m_Sels.IsMBufSelected())
                        glStencilFunc(GL_ALWAYS, m_Mesh->GetDecWholeIdx() + 1, ~0);
                else
-                       glStencilFunc(GL_ALWAYS, m_Mesh->GetParent()->m_ObjectIndex + 1, ~0);
+                       glStencilFunc(GL_ALWAYS, m_Mesh->GetParent()->GetObjectIndex() + 1, ~0);
 
                glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
        }
@@ -536,7 +536,7 @@ const lib_graph::Material* GeometryRender::GetFaceMaterial(SceneMain& scene, con
                        mat_initialized = true;
                }
 
-               return &index_mats[mbuf.GetParent()->GetObjectIndex() % 6];
+               return &index_mats[mbuf.m_WholeIndex % 6];
        }
 
        if (m_Config->m_UseFixMaterial)
index a120431..6d8a32b 100644 (file)
@@ -12,6 +12,7 @@ void SampleShapeBuilder::CreateSphere(SceneMain& scene)
 {
        GeomObject* geom = scene.CreateNewGeometry();
        MeshBuf* mbuf = geom->CreateNewMeshBuf();
+       scene.RefreshObjectIndex();
 
        lib_geo::BaseMeshGen::GenSphere( mbuf->m_Mesh , 1.0f , 20 , 20 );
 
@@ -27,6 +28,7 @@ void SampleShapeBuilder::CreateGroundPlane(SceneMain& scene)
 {
        GeomObject* geom = scene.CreateNewGeometry();
        MeshBuf* mbuf = geom->CreateNewMeshBuf();
+       scene.RefreshObjectIndex();
 
        int slice = 32;
        float width = 10.0f;
index f9abdcb..dc99e20 100644 (file)
@@ -1139,7 +1139,7 @@ void View3D::DrawPolylineHighlight(MeshBuf& mbuf)
        if (m_Scene->m_Sels.IsMBufSelected())
                glStencilFunc(GL_NOTEQUAL, mbuf.GetDecWholeIdx() + 1, ~0);
        else
-               glStencilFunc(GL_NOTEQUAL, mbuf.GetParent()->m_ObjectIndex + 1, ~0);
+               glStencilFunc(GL_NOTEQUAL, mbuf.GetParent()->GetObjectIndex() + 1, ~0);
 
        glColor3d(1, 0.5, 0);
        glLineWidth(3.0f);
@@ -1360,7 +1360,7 @@ void View3D::DrawAllGeomCrossSectionLine(void)
        {
                GeomObject* obj = mbuf->GetParent();
                if (cs_config.m_MultiColor)
-                       glColor4fv(IndexColor::GetColorRev(obj->GetObjectIndex()).v());
+                       glColor4fv(IndexColor::GetColorRev(mbuf->m_WholeIndex).v());
                else
                        glColor3d(1, 0, 0);
 
@@ -2066,7 +2066,7 @@ void View3D::TestOnCursorColseElement(void)
                new_midx = f.m_MatIdx;
        }
 
-       emit SelectedObjectChanged(close_mbuf->GetParent()->m_ObjectIndex, close_mbuf->m_MBufIdx);
+       emit SelectedObjectChanged(close_mbuf->GetParent()->GetObjectIndex(), close_mbuf->m_MBufIdx);
        if (new_midx != -1)
                emit SelectedMatChanged(new_midx);
 }