void FormMain::on_actionTextureMipmap_toggled(bool b)
{
- SyncTexConfigToData();
+ m_Scene.m_TexConfig.m_SampleMode = gl::TexSampleMode::Mipmap;
updateView_All();
}
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 ));
if (IsSupportedTextureExt(path))
{
- OpenFixTextureFile(path);
+ DropTextureFile(path, e->pos());
continue;
}
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();
}
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();
}
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());
}
}
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);
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();
}