OSDN Git Service

テクスチャサンプリング形式指定機能の間違いを修正
[qtgeoviewer/QtGeoViewer.git] / Src / QtGeoViewer / FormMain.cpp
index 9e2a475..c8ee49c 100644 (file)
@@ -327,7 +327,7 @@ void FormMain::InitializeTexStateMenu(void)
 
 void FormMain::on_actionTextureMipmap_toggled(bool b)
 {
-       SyncTexConfigToData();
+       m_Scene.m_TexConfig.m_SampleMode = gl::TexSampleMode::Mipmap;
        updateView_All();
 }
 
@@ -420,7 +420,7 @@ void FormMain::InitializeCursorMenu(void)
        dbmap.AddBinder(new MenuBinder( ui.actionCursorToDepth     , &cursor.CursorDepth    ));
        dbmap.AddBinder(new MenuBinder( ui.actionCursorCoord       , &cursor.ShowCoord      ));
        dbmap.AddBinder(new MenuBinder( ui.actionCheckBaryCoord    , &cursor.CheckBaryCoord ));
-       dbmap.AddBinder(new MenuBinder( ui.actionSelectCloseMat    , &cursor.SelCloseVert   ));
+       dbmap.AddBinder(new MenuBinder( ui.actionSelectCloseMat    , &cursor.SelCloseMat    ));
        dbmap.AddBinder(new MenuBinder( ui.actionCursorAxis        , &cursor.ShowAxis       ));
        dbmap.AddBinder(new MenuBinder( ui.actionMeasure           , &cursor.ShowMeasure    ));
        dbmap.AddBinder(new MenuBinder( ui.actionMeasureLen        , &cursor.ShowMeasureLen ));
@@ -1474,7 +1474,7 @@ void FormMain::dropEvent(QDropEvent* e)
 
                        if (IsSupportedTextureExt(path))
                        {
-                               OpenFixTextureFile(path);
+                               DropTextureFile(path, e->pos());
                                continue;
                        }
 
@@ -1495,14 +1495,44 @@ bool FormMain::IsResetSceneOnBeforeLoadFile(void) const
        return false;
 }
 
-//! \83I\83u\83W\83F\83N\83g\82Ì\83}\83e\83\8a\83A\83\8b\82É\90Ý\92è\82³\82ê\82½\82à\82Ì\82Æ\82Í\95Ê\82Ì\83e\83N\83X\83`\83\83\82ð\8ew\92è\82·\82é.
-void FormMain::OpenFixTextureFile(const QString& path)
+//! \83I\83u\83W\83F\83N\83g\82É\89æ\91\9c\82ð\83h\83\8d\83b\83v\82³\82ê\82½\8fê\8d\87\82Í\82»\82Ì\83}\83e\83\8a\83A\83\8b\82Ì\83J\83\89\81[\83e\83N\83X\83`\83\83\82ð\83Z\83b\83g
+//! \89½\82à\96³\82¢\8fê\8f\8a\82É\83h\83\8d\83b\83v\82³\82ê\82é\82Æ\83f\83t\83H\83\8b\83g\83e\83N\83X\83`\83\83\82ð\83Z\83b\83g
+void FormMain::DropTextureFile(const QString& path, const QPoint& pos)
 {
        std::string fname = path.toLocal8Bit().data();
 
-       m_ContextShare.BeginDrawTop();
-       m_Scene.LoadDefaultMatTexture(fname);
-       m_ContextShare.EndDrawTop();
+       QPoint pl = ui.GLWidgetMain->mapFrom(this, pos);
+
+       PickedMeshSubface picked;
+       m_View3d.BeginRender();
+       bool suc = m_View3d.PickFace2D(picked, pl.x(), pl.y());
+       m_View3d.EndRender();
+
+       if (suc)
+       {
+               m_View3d.BeginRender();
+               MeshBuf* mbuf = picked.mbuf;
+               lib_geo::BaseFace& f = mbuf->m_Mesh.m_Faces[picked.subf.fid];
+               GeomTextureSet* ts = mbuf->GetTexture(f.m_MatIdx);
+               if (ts != NULL)
+               {
+                       std::string fp = path.toLocal8Bit().data();
+
+                       QString name_qs = QFileInfo(path).fileName();
+                       std::string name = name_qs.toLocal8Bit().data();
+
+                       mbuf->ReleaseTextureUnit(ts, TextureType::Color);
+                       gl::GlTexture* tex = mbuf->GetInitTexture(fp, name, m_Scene.m_TexConfig);
+                       ts->SetTextureUnit(TextureType::Color, tex);
+               }
+               m_View3d.EndRender();
+       }
+       else
+       {
+               m_ContextShare.BeginDrawTop();
+               m_Scene.LoadDefaultMatTexture(fname);
+               m_ContextShare.EndDrawTop();
+       }
 
        updateView_All();
 }
@@ -2779,6 +2809,17 @@ void FormMain::on_sliderEnvReflection_valueChanged(int value)
        float r = GetSliderNormalizedPos(ui.sliderEnvReflection);
        m_Scene.m_EnvImg.m_EnvReflection = r;
 
+       ui.labelEnvReflection->setText(QString::number(r, 'f', 2));
+
+       updateView_All();
+}
+
+void FormMain::on_sliderEnvRefract_valueChanged(int value)
+{
+       float r = ui.sliderEnvRefract->value() / 1000.0;
+       m_Scene.m_EnvImg.m_EnvRefract = r;
+
+       ui.labelEnvRefract->setText(QString::number(r, 'f', 2));
        updateView_All();
 }
 
@@ -3414,9 +3455,8 @@ void FormMain::CreateRecentFilesMenu(const std::vector<QString>& path)
 void FormMain::CreateRecentFilesFromMenu(std::vector<QString>& path)
 {
        QMenu* recents = ui.menuOpenRecent;
-       for (int i = 0; i < recents->actions().size(); ++i)
+       for (QAction* a : recents->actions())
        {
-               QAction* a = recents->actions().at(i);
                path.push_back(a->text());
        }
 }
@@ -3429,9 +3469,8 @@ void FormMain::AddRecentFile(const QString& path)
 
        QMenu* recents = ui.menuOpenRecent;
 
-       for (int i = 0; i < recents->actions().size(); ++i)
+       for (QAction* a : recents->actions())
        {
-               QAction* a = recents->actions().at(i);
                if (a->text() == path_local)
                {
                        recents->removeAction(a);
@@ -3665,70 +3704,163 @@ void FormMain::MatPresetDlg_OnMatChanged()
        updateView_All();
 }
 
-void FormMain::on_sliderIndexRangeTop_valueChanged(int value)
+void FormMain::on_buttonLoadCameraSeq_clicked()
 {
-       QSlider* st = ui.sliderIndexRangeTop;
-       QSlider* se = ui.sliderIndexRangeEnd;
-       m_Scene.m_IndexVisrange.beginRatio = (double)st->value() / (double)st->maximum();
+       FileDlgFilterList exts;
+       exts.Add("Collada", "dae");
+
+       QString filter = FileDlgUtil::ExtListToDlgFilter("Geometry", exts);
+       QString title = "Open Camera seq by collada";
+       QString path = GetFilePathFromOpenDlg("", filter);
 
-       if (se->value() < st->value())
-               se->setValue(st->value());
+       if (path.isEmpty())
+               return;
+
+       m_Scene.LoadCameraSeq(path.toLocal8Bit().data());
+
+       ResetSequenceSliderRange();
 
-       m_View3d.ReleaseAllIndexList();
        updateView_All();
 }
 
-void FormMain::on_sliderIndexRangeEnd_valueChanged(int value)
+void FormMain::on_buttonClearCameraSeq_clicked()
+{
+       m_Scene.m_Camera.m_SeqTrans.Clear();
+       ResetSequenceSliderRange();
+}
+
+void FormMain::on_checkEnableCamerSeq_toggled(bool checked)
 {
-       QSlider* st = ui.sliderIndexRangeTop;
-       QSlider* se = ui.sliderIndexRangeEnd;
-       m_Scene.m_IndexVisrange.endRatio = (double)se->value() / (double)se->maximum();
+       m_Scene.m_Camera.m_EnableSeqence = checked;
+}
 
-       if (se->value() < st->value())
-               st->setValue(se->value());
+void FormMain::on_checkEnableIndexRange_toggled(bool checked)
+{
+       IndexRangeConfig& ir = m_Scene.m_IndexVisrange;
+       ir.enableRange = checked;
 
        m_View3d.ReleaseAllIndexList();
        updateView_All();
 }
 
-void FormMain::on_buttonResetIndexRangeTop_clicked()
+void FormMain::on_editIndexLimitOffset_textChanged(const QString &arg1)
+{
+       IndexRangeConfig& ir = m_Scene.m_IndexVisrange;
+
+       bool b;
+       int i = arg1.toInt(&b);
+       if (!b)
+               return;
+
+       ir.beginIdx = i;
+
+       if (ir.enableRange)
+       {
+               m_View3d.ReleaseAllIndexList();
+               updateView_All();
+       }
+}
+
+void FormMain::on_editIndexLimitLen_textChanged(const QString &arg1)
 {
-       QSlider* s = ui.sliderIndexRangeTop;
-       s->setValue(s->minimum());
+       IndexRangeConfig& ir = m_Scene.m_IndexVisrange;
+
+       bool b;
+       int i = arg1.toInt(&b);
+       if (!b)
+               return;
+
+       ir.idxLen = i;
+
+       if (ir.enableRange)
+       {
+               m_View3d.ReleaseAllIndexList();
+               updateView_All();
+       }
 }
 
-void FormMain::on_buttonResetIndexRangeEnd_clicked()
+void FormMain::on_fscrollIndexLimitOffset_onScroll(int step)
 {
-       QSlider* s = ui.sliderIndexRangeEnd;
-       s->setValue(s->maximum());
+       IndexRangeConfig& ir = m_Scene.m_IndexVisrange;
+
+       int n = ir.beginIdx + step;
+       n = (std::max)(n, 0);
+       ui.editIndexLimitOffset->setText(QString::number(n));
 }
 
-void FormMain::on_buttonLoadCameraSeq_clicked()
+void FormMain::on_fscrollIndexLimitOffset_onReset()
 {
-       FileDlgFilterList exts;
-       exts.Add("Collada", "dae");
+       ui.editIndexLimitOffset->setText("0");
+}
 
-       QString filter = FileDlgUtil::ExtListToDlgFilter("Geometry", exts);
-       QString title = "Open Camera seq by collada";
-       QString path = GetFilePathFromOpenDlg("", filter);
+void FormMain::on_fscrollIndexLimitLen_onScroll(int step)
+{
+       IndexRangeConfig& ir = m_Scene.m_IndexVisrange;
 
-       if (path.isEmpty())
-               return;
+       int n = ir.idxLen + step;
+       n = (std::max)(n, 1);
+       ui.editIndexLimitLen->setText(QString::number(n));
+}
 
-       m_Scene.LoadCameraSeq(path.toLocal8Bit().data());
+void FormMain::on_fscrollIndexLimitLen_onReset()
+{
+       ui.editIndexLimitLen->setText("1");
+}
 
-       ResetSequenceSliderRange();
+void FormMain::on_buttonTextureScaleDiv10_clicked()
+{
+       MulTexScaleMain(1.0 / 10.0);
+}
+
+void FormMain::on_buttonTextureScaleMul10_clicked()
+{
+       MulTexScaleMain(10.0);
+}
+
+void FormMain::on_fscrollTextureScale_onScroll(int step)
+{
+       double s = pow(2.0, (double)step / 100.0);
+       MulTexScaleMain(s);
+}
 
+void FormMain::MulTexScaleMain(double s)
+{
+       m_Scene.m_TextureTransform.m_TexScale *= s;
+       float ts = m_Scene.m_TextureTransform.m_TexScale;
+       SetTextSilent(ui.editTextureScale, QString::number(ts));
        updateView_All();
 }
 
-void FormMain::on_buttonClearCameraSeq_clicked()
+void FormMain::on_fscrollTextureScale_onReset()
 {
-       m_Scene.m_Camera.m_SeqTrans.Clear();
-       ResetSequenceSliderRange();
+       ui.editTextureScale->setText("1.0");
 }
 
-void FormMain::on_checkEnableCamerSeq_toggled(bool checked)
+void FormMain::on_editTextureScale_textChanged(const QString &arg1)
 {
-       m_Scene.m_Camera.m_EnableSeqence = checked;
+       bool b;
+       double d = arg1.toDouble(&b);
+       if (!b)
+               return;
+
+       m_Scene.m_TextureTransform.m_TexScale = d;
+
+       updateView_All();
+}
+
+void FormMain::SetTextSilent(QLineEdit* edit, const QString& text)
+{
+       edit->blockSignals(true);
+       edit->setText(text);
+       edit->blockSignals(false);
+}
+
+void FormMain::on_sliderMatcapRate_valueChanged(int value)
+{
+       float r = GetSliderNormalizedPos(ui.sliderMatcapRate);
+       m_Scene.m_MatcapImg.m_BlendRate = r;
+
+       ui.labelMatcapRate->setText(QString::number(r, 'f', 2));
+
+       updateView_All();
 }