OSDN Git Service

obj読み込み時のグループ分割形式の自動認識機能を追加
authorqw_fuku <fkhideaki@gmail.com>
Sun, 11 Jan 2015 11:28:57 +0000 (20:28 +0900)
committerqw_fuku <fkhideaki@gmail.com>
Sun, 11 Jan 2015 11:28:57 +0000 (20:28 +0900)
Src/LibQtGeoViewerCore/Format/ObjLoader.cpp
Src/LibQtGeoViewerCore/SceneMain.cpp
Src/LibQtGeoViewerCore/SceneMain.h
Src/LibQtGeoViewerCore/Selection3D.cpp
Src/LibQtGeoViewerCore/Selection3D.h
Src/QtGeoViewer/FormMain.cpp
Src/QtGeoViewer/FormMain.ui

index d73d3de..a8eaab7 100644 (file)
 
 bool ObjLoader::Load(SceneMain& scene, const std::string& filename)
 {
-       ObjSplitConfig split_config = scene.m_ObjSplitMode;
-
        lib_geo::ObjMesh obj_mesh;
        if (!obj_mesh.Load(filename))
                return false;
 
+       bool split_obj = false;
+       bool split_group = false;
        std::vector<lib_geo::BaseMesh> mesh_ary;
-       if (split_config == ObjSplitConfig::ObjSplit_Object)
-       {
-               obj_mesh.ConvertToBaseMeshEachObject(mesh_ary);
-               if (mesh_ary.empty())
-                       return true;
-       }
-       else if (split_config == ObjSplitConfig::ObjSplit_Group)
+       if (scene.m_ObjSplit)
        {
-               obj_mesh.ConvertToBaseMeshEachGroup(mesh_ary);
-               if (mesh_ary.empty())
-                       return true;
+               if (!obj_mesh.m_Objects.empty())
+               {
+                       split_obj = true;
+                       obj_mesh.ConvertToBaseMeshEachObject(mesh_ary);
+
+                       if (mesh_ary.empty())
+                               return true;
+               }
+               else if (!obj_mesh.m_Groups.empty())
+               {
+                       split_group = true;
+                       obj_mesh.ConvertToBaseMeshEachGroup(mesh_ary);
+
+                       if (mesh_ary.empty())
+                               return true;
+               }
        }
 
        GeomObject* geom = scene.CreateNewGeometry();
@@ -48,9 +55,9 @@ bool ObjLoader::Load(SceneMain& scene, const std::string& filename)
                        OnPostLoadObj(scene, *mbuf, obj_mesh);
 
                        std::string object_name;
-                       if (split_config == ObjSplitConfig::ObjSplit_Object)
+                       if (split_obj)
                                object_name = obj_mesh.m_Objects[i].m_Name;
-                       else if (split_config == ObjSplitConfig::ObjSplit_Group)
+                       else if (split_group)
                                object_name = obj_mesh.m_Groups[i].m_Name;
 
                        if (object_name.empty())
index 1a0845a..aaf7684 100644 (file)
@@ -369,12 +369,12 @@ void SceneMain::RemoveItem(int sel_idx)
        i += sel_idx;
 
        if (i->IsInChild(m_Cursor3d.CloseFaceMBuf))
-       {
                m_Cursor3d.ResetCloseFace();
-       }
 
        m_Objects.erase(i);
 
+       m_Sels.ClearSelect();
+
        RefreshObjectIndex();
 }
 
index e8d86c9..3682dfd 100644 (file)
@@ -142,7 +142,7 @@ public:
 
        gl::TextureConfig    m_TexConfig;
 
-       ObjSplitConfig       m_ObjSplitMode;
+       bool                 m_ObjSplit;
 
        gl::EnvImage         m_EnvImg;
        gl::MatcapImage      m_MatcapImg;
index b97bd40..af27185 100644 (file)
@@ -11,6 +11,13 @@ Selection3D::Selection3D(void)
        m_SelMatIdx = -1;
 }
 
+void Selection3D::ClearSelect(void)
+{
+       m_SelObjectIdx = -1;
+       m_SelMeshIdx = -1;
+       m_SelMatIdx = -1;
+}
+
 bool Selection3D::IsObjectSelected(void) const
 {
        return m_SelObjectIdx != -1;
index 39bc850..6b2b69e 100644 (file)
@@ -12,6 +12,8 @@ class Selection3D
 public:
        Selection3D(void);
 
+       void ClearSelect(void);
+
        bool IsObjectSelected(void) const;
        int GetSelObjectIdx(void) const;
 
index 7410442..86aa436 100644 (file)
@@ -1199,12 +1199,7 @@ void FormMain::OpenFixTextureFile(const QString& path)
 
 bool FormMain::OpenGeomFile(const QString& path)
 {
-       if (ui.checkSplitObject->isChecked())
-               m_Scene.m_ObjSplitMode = ObjSplitConfig::ObjSplit_Object;
-       else if (ui.checkSplitGroup->isChecked())
-               m_Scene.m_ObjSplitMode = ObjSplitConfig::ObjSplit_Group;
-       else
-               m_Scene.m_ObjSplitMode = ObjSplitConfig::ObjSplit_None;
+       m_Scene.m_ObjSplit = ui.checkSplitOBJ->isChecked();
 
        m_ContextShare.BeginDrawTop();
 
@@ -1471,7 +1466,9 @@ void FormMain::OnDoneAddGeom(void)
        obj_tree->setCurrentItem(NULL);
        obj_tree->blockSignals(true);
 
-       PushbackTreeNode(obj_tree, CreateObjectTreeNode(obj));
+       QTreeWidgetItem* n = CreateObjectTreeNode(obj);
+       PushbackTreeNode(obj_tree, n);
+       n->setExpanded(true);
 
        SetPrimayrSelectObjectFromScene();
 
@@ -1620,6 +1617,9 @@ void FormMain::DeleteSelectedObject()
 {
        QTreeWidget* obj_tree = ui.treeObjects;
        QTreeWidgetItem* ti = obj_tree->currentItem();
+       if (ti == NULL)
+               return;
+
        QTreeWidgetItem* pn = ti->parent();
 
        int sel_idx;
@@ -1639,6 +1639,7 @@ void FormMain::DeleteSelectedObject()
 
        m_View3d.ClearRenderMap();
 
+       obj_tree->setCurrentItem(NULL);
        obj_tree->takeTopLevelItem(sel_idx);
 
        ResizeTreeColumns(obj_tree, 4);
index 282172f..9bd245f 100644 (file)
       <number>1</number>
      </property>
      <item>
-      <widget class="QCheckBox" name="checkSplitObject">
+      <widget class="QCheckBox" name="checkSplitOBJ">
        <property name="text">
         <string>SplitObject</string>
        </property>
       </widget>
      </item>
      <item>
-      <widget class="QCheckBox" name="checkSplitGroup">
-       <property name="text">
-        <string>SplitGroup</string>
-       </property>
-      </widget>
-     </item>
-     <item>
       <widget class="QCheckBox" name="checkShowOnlySelect">
        <property name="text">
         <string>ShowOnlySelect</string>
  </customwidgets>
  <tabstops>
   <tabstop>listMaterial</tabstop>
-  <tabstop>checkSplitObject</tabstop>
-  <tabstop>checkSplitGroup</tabstop>
+  <tabstop>checkSplitOBJ</tabstop>
   <tabstop>pushDeleteSelectedObject</tabstop>
   <tabstop>buttonClearAllGeoms</tabstop>
   <tabstop>pushButtonAddCameraRecord</tabstop>