From 889e031fc45738c7f23bbbb8a5ccb0a60237975e Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Mon, 7 Jan 2008 11:38:33 +0000 Subject: [PATCH] it's now possible to change the value of the curvature and normal weights in the isophotic-distance function --- src/meshlabplugins/editsegment/cutting.h | 14 ++-- .../editsegment/editsegment.cpp | 15 +++- src/meshlabplugins/editsegment/editsegment.h | 4 + .../editsegment/meshcutdialog.cpp | 7 ++ .../editsegment/meshcutdialog.h | 5 +- .../editsegment/meshcutdialog.ui | 84 ++++++++++++++++--- 6 files changed, 112 insertions(+), 17 deletions(-) diff --git a/src/meshlabplugins/editsegment/cutting.h b/src/meshlabplugins/editsegment/cutting.h index a82894a50..23cd8dd70 100644 --- a/src/meshlabplugins/editsegment/cutting.h +++ b/src/meshlabplugins/editsegment/cutting.h @@ -118,15 +118,14 @@ namespace vcg { SimpleTempData *TDCurvPtr; //TripletQueue Q; TripletHeap Q; + float _normalWeight; + float _curvatureWeight; float ImprovedIsophoticDist(VertexType * p, VertexType * q) { float dist; float kpq = 0.0f; const float e = 2.71828182845904523536; - const float W1 = 5.0f; - const float W2 = 5.0f; - Matrix33 n_nMatrix; Point3 ViVj = p->P() - q->P(); Point3 Tij; @@ -146,7 +145,7 @@ namespace vcg { if (kpq < 0) kpq = powf(e,fabs(kpq)) -1; - dist = (p->P() - q->P()).Norm() + (W1 * (p->N() - q->N()).Norm()) + (W2 * kpq); + dist = (p->P() - q->P()).Norm() + (_normalWeight * (p->N() - q->N()).Norm()) + (_curvatureWeight * kpq); assert(dist>=0.0f); return dist; @@ -213,6 +212,8 @@ namespace vcg { MeshCutting(MESH_TYPE * ms) { mesh = ms; + _normalWeight = 5.0f; + _curvatureWeight = 5.0f; TDCurvPtr = new SimpleTempData((*mesh).vert); TDCurvPtr->Start(CurvData()); } @@ -225,7 +226,10 @@ namespace vcg { v->IMark() = m; } - void MeshCut() { + void MeshCut(float NormalWeight, float CurvatureWeight) { + + _normalWeight = NormalWeight; + _curvatureWeight = CurvatureWeight; clock_t curvature_start_t; clock_t curvature_end_t; diff --git a/src/meshlabplugins/editsegment/editsegment.cpp b/src/meshlabplugins/editsegment/editsegment.cpp index 9899e59ed..91ba51dd2 100644 --- a/src/meshlabplugins/editsegment/editsegment.cpp +++ b/src/meshlabplugins/editsegment/editsegment.cpp @@ -244,6 +244,9 @@ EditSegment::EditSegment() { meshCutDialog = 0; meshcut_dock = 0; + normalWeight = 5; + curvatureWeight = 5; + selectForeground = true; doRefine = true; } @@ -302,6 +305,8 @@ void EditSegment::StartEdit(QAction * mode, MeshModel & m, GLArea * parent) { SLOT(ColorizeGaussianSlot())); QObject::connect(meshCutDialog, SIGNAL(colorizeMeanSignal()), this, SLOT(ColorizeMeanSlot())); + QObject::connect(meshCutDialog, SIGNAL(normalWeightSignal(int)),this, SLOT(changeNormalWeight(int))); + QObject::connect(meshCutDialog, SIGNAL(curvatureWeightSignal(int)),this, SLOT(changeCurvatureWeight(int))); } meshcut_dock->setVisible(true); @@ -502,7 +507,7 @@ void EditSegment::DrawXORCircle(MeshModel &m, GLArea * gla, bool doubleDraw) { void EditSegment::MeshCutSlot() { if (meshCut) { - meshCut->MeshCut(); + meshCut->MeshCut(normalWeight,curvatureWeight); meshCut->Colorize(selectForeground, doRefine); } glarea->update(); @@ -516,6 +521,14 @@ void EditSegment::doRefineSlot(bool value) { doRefine = value; } +void EditSegment::changeCurvatureWeight(int value) { + curvatureWeight = value; +} + +void EditSegment::changeNormalWeight(int value) { + normalWeight = value; +} + void EditSegment::ColorizeGaussianSlot() { if (meshCut) { meshCut->ColorizeCurvature(true); diff --git a/src/meshlabplugins/editsegment/editsegment.h b/src/meshlabplugins/editsegment/editsegment.h index 3748fc7f7..bf55b89cd 100644 --- a/src/meshlabplugins/editsegment/editsegment.h +++ b/src/meshlabplugins/editsegment/editsegment.h @@ -38,6 +38,8 @@ private: bool selectForeground; bool doRefine; + float curvatureWeight; + float normalWeight; QPoint current_point; QPoint previous_point; @@ -87,6 +89,8 @@ public slots: void MeshCutSlot(); void SelectForegroundSlot(bool); void doRefineSlot(bool); + void changeNormalWeight(int); + void changeCurvatureWeight(int); void ColorizeGaussianSlot(); void ColorizeMeanSlot(); diff --git a/src/meshlabplugins/editsegment/meshcutdialog.cpp b/src/meshlabplugins/editsegment/meshcutdialog.cpp index d35cdb9f3..c9cfabb47 100644 --- a/src/meshlabplugins/editsegment/meshcutdialog.cpp +++ b/src/meshlabplugins/editsegment/meshcutdialog.cpp @@ -31,6 +31,13 @@ void MeshCutDialog::on_refineCheckBox_clicked() { emit doRefineSignal(ui.refineCheckBox->isChecked()); } +void MeshCutDialog::on_normalWeightSlider_valueChanged() { + emit normalWeightSignal(ui.normalWeightSlider->value()); +} +void MeshCutDialog::on_curvatureWeightSlider_valueChanged() { + emit curvatureWeightSignal(ui.curvatureWeightSlider->value()); +} + //debug function void MeshCutDialog::on_gaussianButton_clicked() { diff --git a/src/meshlabplugins/editsegment/meshcutdialog.h b/src/meshlabplugins/editsegment/meshcutdialog.h index dc618a9a0..38b30a1db 100644 --- a/src/meshlabplugins/editsegment/meshcutdialog.h +++ b/src/meshlabplugins/editsegment/meshcutdialog.h @@ -31,12 +31,15 @@ private: void on_meanButton_clicked(); void on_resetButton_clicked(); - + void on_normalWeightSlider_valueChanged(); + void on_curvatureWeightSlider_valueChanged(); signals: void meshCutSignal(); void selectForegroundSignal(bool); void doRefineSignal(bool); + void normalWeightSignal(int); + void curvatureWeightSignal(int); void colorizeGaussianSignal(); void colorizeMeanSignal(); diff --git a/src/meshlabplugins/editsegment/meshcutdialog.ui b/src/meshlabplugins/editsegment/meshcutdialog.ui index 7c06d5b5b..79f81c5c2 100644 --- a/src/meshlabplugins/editsegment/meshcutdialog.ui +++ b/src/meshlabplugins/editsegment/meshcutdialog.ui @@ -5,8 +5,8 @@ 0 0 - 137 - 171 + 138 + 237 @@ -17,8 +17,8 @@ 0 0 - 151 - 251 + 141 + 241 @@ -31,10 +31,10 @@ - 12 - 12 - 116 - 104 + 10 + 13 + 114 + 198 @@ -71,6 +71,70 @@ + + + + + + + + Normal Weight + + + + + + + 10 + + + 2 + + + 5 + + + Qt::Horizontal + + + 1 + + + + + + + + + + + Curvature Weight + + + + + + + 10 + + + 2 + + + 5 + + + Qt::Horizontal + + + 1 + + + + + + + @@ -92,13 +156,13 @@ Advanced - + 1 11 132 - 126 + 129