};
+class IndexRangeConfig
+{
+public:
+ IndexRangeConfig(void) :
+ beginRatio(0.0),
+ endRatio(1.0)
+ {
+ }
+
+public:
+ double beginRatio;
+ double endRatio;
+};
+
class SceneMain
{
public:
int m_CurFrame;
+ IndexRangeConfig m_IndexVisrange;
+
private:
std::vector<SceneObserver*> m_Observers;
};
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());
+}
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;
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
+ <zorder>sliderDOFPint_4</zorder>
</widget>
</item>
</layout>
<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">
</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><</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><</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<widget class="QWidget" name="widget_6" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
</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>
m_FaceGroupVBO.clear();
}
+void GeometryRender::ReleaseIndexDispList(void)
+{
+ m_DispList_Vid.ReleaseList();
+ m_DispList_Fid.ReleaseList();
+}
+
void GeometryRender::DrawSelVertAll(void)
{
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);
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;
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);
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);
BeginRender();
if (glewInit() == GLEW_OK)
- {
m_GlewInitialized = true;
- }
GLUtil::TraceVersion();
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 );
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();
+}
void MoveLookPosToOrigin(void);
void AdjustCameraDistAuto(void);
+ void ReleaseAllIndexList(void);
+
protected:
void PaintMain(bool showOnlyGeom);
void Render3D(Camera& camera, bool showOnlyGeom);