OSDN Git Service

インデックス表示の範囲を制限する機能を追加
authorqw_fuku <fkhideaki@gmail.com>
Sun, 2 Aug 2015 09:12:05 +0000 (18:12 +0900)
committerqw_fuku <fkhideaki@gmail.com>
Sun, 2 Aug 2015 09:12:05 +0000 (18:12 +0900)
Src/LibQtGeoViewerCore/SceneMain.h
Src/QtGeoViewer/FormMain.cpp
Src/QtGeoViewer/FormMain.h
Src/QtGeoViewer/FormMain.ui
Src/QtGeoViewer/GeometryRender.cpp
Src/QtGeoViewer/GeometryRender.h
Src/QtGeoViewer/View3D.cpp
Src/QtGeoViewer/View3D.h

index 5c0f8ff..40ec80d 100644 (file)
@@ -73,6 +73,20 @@ public:
 };
 
 
+class IndexRangeConfig
+{
+public:
+       IndexRangeConfig(void) :
+               beginRatio(0.0),
+               endRatio(1.0)
+       {
+       }
+
+public:
+       double beginRatio;
+       double endRatio;
+};
+
 class SceneMain
 {
 public:
@@ -186,6 +200,8 @@ public:
 
        int m_CurFrame;
 
+       IndexRangeConfig m_IndexVisrange;
+
 private:
        std::vector<SceneObserver*> m_Observers;
 };
index 83319ab..29abe5b 100644 (file)
@@ -3555,3 +3555,41 @@ void FormMain::MatPresetDlg_OnMatChanged()
        OnChangedSelectedMaterial();
        updateView_All();
 }
+
+void FormMain::on_sliderIndexRangeTop_valueChanged(int value)
+{
+       QSlider* st = ui.sliderIndexRangeTop;
+       QSlider* se = ui.sliderIndexRangeEnd;
+       m_Scene.m_IndexVisrange.beginRatio = (double)st->value() / (double)st->maximum();
+
+       if (se->value() < st->value())
+               se->setValue(st->value());
+
+       m_View3d.ReleaseAllIndexList();
+       updateView_All();
+}
+
+void FormMain::on_sliderIndexRangeEnd_valueChanged(int value)
+{
+       QSlider* st = ui.sliderIndexRangeTop;
+       QSlider* se = ui.sliderIndexRangeEnd;
+       m_Scene.m_IndexVisrange.endRatio = (double)se->value() / (double)se->maximum();
+
+       if (se->value() < st->value())
+               st->setValue(se->value());
+
+       m_View3d.ReleaseAllIndexList();
+       updateView_All();
+}
+
+void FormMain::on_buttonResetIndexRangeTop_clicked()
+{
+       QSlider* s = ui.sliderIndexRangeTop;
+       s->setValue(s->minimum());
+}
+
+void FormMain::on_buttonResetIndexRangeEnd_clicked()
+{
+       QSlider* s = ui.sliderIndexRangeEnd;
+       s->setValue(s->maximum());
+}
index f2a3465..bdf5467 100644 (file)
@@ -464,6 +464,11 @@ private slots:
        void on_buttonMatPreset_clicked();
        void MatPresetDlg_OnMatChanged();
 
+       void on_sliderIndexRangeTop_valueChanged(int value);
+       void on_sliderIndexRangeEnd_valueChanged(int value);
+       void on_buttonResetIndexRangeTop_clicked();
+       void on_buttonResetIndexRangeEnd_clicked();
+
 private:
        Ui::FormMainClass ui;
 
index 2a50e0d..557ff25 100644 (file)
@@ -80,6 +80,7 @@
             <property name="focusPolicy">
              <enum>Qt::StrongFocus</enum>
             </property>
+            <zorder>sliderDOFPint_4</zorder>
            </widget>
           </item>
          </layout>
@@ -1226,9 +1227,9 @@ border: 1px solid black;
         <property name="geometry">
          <rect>
           <x>0</x>
-          <y>0</y>
+          <y>-116</y>
           <width>232</width>
-          <height>462</height>
+          <height>534</height>
          </rect>
         </property>
         <layout class="QVBoxLayout" name="verticalLayout_5">
@@ -1677,6 +1678,73 @@ border: 1px solid black;
           </layout>
          </item>
          <item>
+          <widget class="QLabel" name="labelIndexRange">
+           <property name="text">
+            <string>IndexRange</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_15">
+           <property name="topMargin">
+            <number>0</number>
+           </property>
+           <item>
+            <widget class="QSlider" name="sliderIndexRangeTop">
+             <property name="maximum">
+              <number>5000</number>
+             </property>
+             <property name="value">
+              <number>0</number>
+             </property>
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QToolButton" name="buttonResetIndexRangeTop">
+             <property name="toolTip">
+              <string>Reset</string>
+             </property>
+             <property name="text">
+              <string>&lt;</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_17">
+           <property name="topMargin">
+            <number>0</number>
+           </property>
+           <item>
+            <widget class="QSlider" name="sliderIndexRangeEnd">
+             <property name="maximum">
+              <number>5000</number>
+             </property>
+             <property name="value">
+              <number>5000</number>
+             </property>
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QToolButton" name="buttonResetIndexRangeEnd">
+             <property name="toolTip">
+              <string>Reset</string>
+             </property>
+             <property name="text">
+              <string>&lt;</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
           <widget class="QWidget" name="widget_6" native="true">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
@@ -1718,7 +1786,9 @@ border: 1px solid black;
       </widget>
      </item>
      <item>
-      <widget class="QWidget" name="widget_2" native="true"/>
+      <widget class="QWidget" name="widget_2" native="true">
+       <zorder>scrollArea</zorder>
+      </widget>
      </item>
     </layout>
    </widget>
index e847a70..d378dcd 100644 (file)
@@ -54,6 +54,12 @@ void GeometryRender::ReleaseAccBuffer(void)
        m_FaceGroupVBO.clear();
 }
 
+void GeometryRender::ReleaseIndexDispList(void)
+{
+       m_DispList_Vid.ReleaseList();
+       m_DispList_Fid.ReleaseList();
+}
+
 
 void GeometryRender::DrawSelVertAll(void)
 {
@@ -651,7 +657,10 @@ void GeometryRender::DrawMeshFid(lib_geo::BaseMesh& mesh)
        disp_list.GenerateList();
        disp_list.BeginCompieAndExecute();
 
-       for (size_t i = 0; i < mesh.m_Faces.size(); ++i)
+       const IndexRangeConfig& vr = m_Scene->m_IndexVisrange;
+       size_t vt = mesh.m_Faces.size() * vr.beginRatio;
+       size_t ve = mesh.m_Faces.size() * vr.endRatio;
+       for (size_t i = vt; i < ve; ++i)
        {
                const lib_geo::BaseFace& f = mesh.m_Faces[i];
                lm::vec3f c = mesh.GetFaceCenter(f);
@@ -751,7 +760,10 @@ void GeometryRender::DrawVertVid(MeshBuf& mbuf)
        if (m_Scene->m_Cursor3d.IsCircleClipActive())
                scene_bb = m_Scene->GetSceneBBox();
 
-       for (size_t i = 0; i < m.m_Verts.size(); ++i)
+       const IndexRangeConfig& vr = m_Scene->m_IndexVisrange;
+       size_t vt = m.m_Verts.size() * vr.beginRatio;
+       size_t ve = m.m_Verts.size() * vr.endRatio;
+       for (size_t i = vt; i < ve; ++i)
        {
                const lm::vec3f& v0 = m.m_Verts[i];
                const lm::vec3f& n = m.m_VertAdj[i].m_NormalAvg;
index 1c2b79c..353c20f 100644 (file)
@@ -29,6 +29,7 @@ public:
        void InitializeGeoRender(View3DConfig* config, ShaderLibrary* shaders, SceneMain* scene);
 
        void ReleaseAccBuffer(void);
+       void ReleaseIndexDispList(void);
 
        void DrawGeomVertPick(MeshBuf& mbuf, SceneMain& scene);
        void DrawGeomHighlight(MeshBuf& mbuf, SceneMain& scene);
index 1968027..93bbe63 100644 (file)
@@ -70,10 +70,10 @@ bool View3D::InitializeView(MyGLWidget* ParentWidget)
        m_Camera.Reset();
        emit CameraMoved();
 
-       m_ControlLight.SetLightIndex( GL_LIGHT0 );
-       m_ControlLight.m_Position.set( -1 , 1 , 1 );
+       m_ControlLight.SetLightIndex(GL_LIGHT0);
+       m_ControlLight.m_Position.set(-1, 1, 1);
 
-       m_HeadLight.SetLightIndex( GL_LIGHT1 );
+       m_HeadLight.SetLightIndex(GL_LIGHT1);
        m_HeadLight.m_IsDirectional = false;
 
        SetLightStrengthByStdRatio(1.0f);
@@ -83,9 +83,7 @@ bool View3D::InitializeView(MyGLWidget* ParentWidget)
        BeginRender();
 
        if (glewInit() == GLEW_OK)
-       {
                m_GlewInitialized = true;
-       }
 
        GLUtil::TraceVersion();
 
@@ -2866,7 +2864,7 @@ void View3D::MoveLookPosToOrigin(void)
 void View3D::AdjustCameraDistAuto(void)
 {
        lm::range3f r = m_Scene->GetSceneTransformedBBox();
-       if(!r.is_valid())
+       if (!r.is_valid())
                r.expand(lm::vec3f(0.0f, 0.0f, 0.0f));
 
        m_Camera.ResetViewKeepAngle( r );
@@ -2874,3 +2872,16 @@ void View3D::AdjustCameraDistAuto(void)
        emit CameraMoved();
        RepaintParent();
 }
+
+void View3D::ReleaseAllIndexList(void)
+{
+       BeginRender();
+
+       for (auto r = m_RenderMap.begin(); r != m_RenderMap.end(); ++r)
+       {
+               GeometryRender* render = r->second;
+               render->ReleaseIndexDispList();
+       }
+
+       EndRender();
+}
index eb43e59..0d0aac3 100644 (file)
@@ -117,6 +117,8 @@ public:
        void MoveLookPosToOrigin(void);
        void AdjustCameraDistAuto(void);
 
+       void ReleaseAllIndexList(void);
+
 protected:
        void PaintMain(bool showOnlyGeom);
        void Render3D(Camera& camera, bool showOnlyGeom);