OSDN Git Service

形状データ再読み込み処理の整理
[qtgeoviewer/QtGeoViewer.git] / Src / LibQtGeoViewerCore / SceneMain.cpp
index f03a0ea..ea8fb05 100644 (file)
@@ -16,6 +16,7 @@
 #include <boost/algorithm/string.hpp>
 
 #include "Format/GeomReaderBuilder.h"
+#include "Format/AssimpReader.h"
 
 
 
@@ -27,15 +28,13 @@ SceneMain::SceneMain(void)
 
 void SceneMain::Initialize(void)
 {
-       m_DefaultMaterial = lib_graph::MaterialSamples::GetSilver();
+       m_DefaultMaterial = lgr::MaterialSamples::GetSilver();
 
        m_DefaultAlphaMaterial = m_DefaultMaterial;
        m_DefaultAlphaMaterial.SetAlphaAll( 0.75f );
 
        m_DefaultTexture.InitializeTexture();
 
-       ClearObjects();
-
        m_EnvImg.InitEnvMap();
 }
 
@@ -85,7 +84,12 @@ bool SceneMain::ImportFile(const std::string& filename, geom::GeomFileFormat fmt
 
        RefreshObjectIndex();
 
-       return reader->Load(*this, filename);
+       if (!reader->Load(*this, filename))
+               return false;
+
+       UpdateCrossSectionIfRequire(false);
+
+       return true;
 }
 
 GeomObject* SceneMain::CreateNewGeometry(void)
@@ -101,11 +105,14 @@ GeomObject* SceneMain::CreateNewGeometry(void)
 void SceneMain::SetFrame(int frame)
 {
        m_CurFrame = frame;
+
        for (GeomObject& g : m_Objects)
        {
-               g.SetFrame(frame);
+               g.SetFrameShape(frame);
        }
 
+       m_Camera.SetFrame(frame);
+
        UpdateTransform();
 }
 
@@ -392,7 +399,7 @@ void SceneMain::RefreshObjectIndex(void)
 
 bool SceneMain::ReloadObject(GeomObject* obj)
 {
-       if(!obj->IsFileObject())
+       if (!obj->IsFileObject())
                return false;
 
        int idx = FindObjectIdx(obj);
@@ -402,19 +409,42 @@ bool SceneMain::ReloadObject(GeomObject* obj)
                return false;
        }
 
+       if (obj->IsInChild(m_Cursor3d.CloseFaceMBuf))
+               m_Cursor3d.ResetCloseFace();
+
        geom::GeomFileFormat fmt = obj->m_FileFormat;
        const std::string filename = obj->m_FilePath;
 
-       RemoveItem(idx);
+       boost::ptr_vector<GeomObject>::iterator i;
+       i = m_Objects.begin();
+       i += idx;
+       m_Objects.erase(i);
+
+       m_Sels.ClearSelect();
+
+       std::auto_ptr<GeomFileReader> reader;
+       reader.reset(GeomReaderBuilder::Create(fmt));
+       if (reader.get() == NULL)
+       {
+               assert(false);
+               return false;
+       }
+
+       RefreshObjectIndex();
+
+       if (!reader->Load(*this, filename))
+               return false;
+
+       UpdateCrossSectionIfRequire(false);
 
-       return ImportFile(filename, fmt);
+       return true;
 }
 
 int SceneMain::FindObjectIdx(const GeomObject* obj) const
 {
        for (const GeomObject& o : m_Objects)
        {
-               if(&o == obj)
+               if (&o == obj)
                        return o.GetObjectIndex();
        }
 
@@ -549,9 +579,11 @@ int SceneMain::GetKeyframeMax(void) const
        int kf = 0;
        for (const GeomObject& obj : m_Objects)
        {
-               kf = (std::max)(kf, obj.m_Nodes.GetKeyframeMax());
+               kf = (std::max)(kf, obj.m_GTree.GetKeyframeMax());
        }
 
+       kf = (std::max)(kf, m_Camera.m_SeqTrans.GetNumframes());
+
        return kf;
 }
 
@@ -583,3 +615,9 @@ bool SceneMain::IsOutOfSphereClip(const lm::range3f& scene_bb, const lm::vec3f&
 
        return false;
 }
+
+bool SceneMain::LoadCameraSeq(const char* filename)
+{
+       AssimpReader reader;
+       return reader.LoadCamera(*this, filename);
+}