OSDN Git Service

メッシュ、オブジェクト両方の選択中要素ハイライトに対魚
authorqw_fuku <fkhideaki@gmail.com>
Sun, 11 Jan 2015 06:01:24 +0000 (15:01 +0900)
committerqw_fuku <fkhideaki@gmail.com>
Sun, 11 Jan 2015 06:01:24 +0000 (15:01 +0900)
Src/LibQtGeoViewerCore/SceneMain.cpp
Src/LibQtGeoViewerCore/SceneMain.h
Src/QtGeoViewer/View3D.cpp

index 04d7cc2..3eea68c 100644 (file)
@@ -280,6 +280,26 @@ const GeomObject* SceneMain::GetPrimaryObject(void) const
 }
 
 
+void SceneMain::GetSelectedMeshes(std::vector<MeshBuf*>& meshes)
+{
+       GeomObject* obj = GetPrimaryObject();
+       if (obj == NULL)
+               return;
+
+       if (m_Sels.IsMBufSelected())
+       {
+               meshes.resize(1, &obj->m_MeshAry[m_Sels.GetMBufIdx()]);
+       }
+       else
+       {
+               meshes.reserve(obj->m_MeshAry.size());
+               for (MeshBuf& m : obj->m_MeshAry)
+               {
+                       meshes.push_back(&m);
+               }
+       }
+}
+
 MeshBuf* SceneMain::GetPrimaryMeshbuf(void)
 {
        GeomObject* obj = GetPrimaryObject();
index d37f05b..e8d86c9 100644 (file)
@@ -87,6 +87,7 @@ public:
        GeomObject* GetPrimaryObject(void);
        const GeomObject* GetPrimaryObject(void) const;
 
+       void GetSelectedMeshes(std::vector<MeshBuf*>& meshes);
        MeshBuf* GetPrimaryMeshbuf(void);
        const MeshBuf* GetPrimaryMeshbuf(void) const;
 
index 4812416..db3181f 100644 (file)
@@ -1155,15 +1155,22 @@ int View3D::QColorToIndex(const QColor& c) const
 
 void View3D::DrawGeomMeshHighlight(void)
 {
-       MeshBuf* mbuf = m_Scene->GetPrimaryMeshbuf();
-       if (mbuf == NULL)
-               return;
+       std::vector<MeshBuf*> meshes;
+       m_Scene->GetSelectedMeshes(meshes);
 
-       GeometryRender& render = GetRender(mbuf);
-       render.DrawGeomHighlight(*mbuf, *m_Scene);
+       for (MeshBuf* mbuf : meshes)
+       {
+               GeometryRender& render = GetRender(mbuf);
+               render.DrawGeomHighlight(*mbuf, *m_Scene);
+       }
 
        if (m_Config.m_DrawPolyline)
-               DrawPolylineHighlight(*mbuf);
+       {
+               for (MeshBuf* mbuf : meshes)
+               {
+                       DrawPolylineHighlight(*mbuf);
+               }
+       }
 }
 
 void View3D::DrawAllGeomCrossSection(void)