From 99614ee8cad55cff449337bf137ce183432ea19c Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sun, 28 Feb 2016 18:11:44 +0000 Subject: [PATCH] simple coord freeze --- Fltk/contextWindow.cpp | 21 +++++++++++++++++++++ Fltk/contextWindow.h | 3 +++ Fltk/openglWindow.cpp | 24 ++++++++++-------------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/Fltk/contextWindow.cpp b/Fltk/contextWindow.cpp index 836bb882c8..784f656024 100644 --- a/Fltk/contextWindow.cpp +++ b/Fltk/contextWindow.cpp @@ -90,6 +90,10 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) input[3]->value("0"); input[4] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate"); input[4]->value("0"); + for(int i = 0; i < 3; i++) + _butt[i] = new Fl_Check_Button + (width - 2 * WB - IW, 2 * WB + (i+1) * BH, IW, BH, "Freeze"); + input[5] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Prescribed mesh element size at point"); input[5]->value("1.0"); @@ -203,6 +207,23 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize) FL_NORMAL_SIZE += deltaFontSize; } +bool elementaryContextWindow::frozenPointCoord(int coord) +{ + if(coord < 0 || coord > 2) return false; + return _butt[coord]->value() ? true : false; +} + +void elementaryContextWindow::updatePoint(double pt[3]) +{ + for(int i = 0; i < 3; i++){ + if(!frozenPointCoord(i)){ + char str[32]; + sprintf(str, "%g", pt[i]); + input[2 + i]->value(str); + } + } +} + void elementaryContextWindow::show(int pane) { for(int i = 0; i < 6; i++) diff --git a/Fltk/contextWindow.h b/Fltk/contextWindow.h index 25777d054d..d72cdd572d 100644 --- a/Fltk/contextWindow.h +++ b/Fltk/contextWindow.h @@ -20,9 +20,12 @@ class elementaryContextWindow{ Fl_Input *input[30]; Fl_Value_Input *value[10]; Fl_Group *group[10]; + Fl_Check_Button *_butt[3]; public: elementaryContextWindow(int deltaFontSize=0); void show(int pane); + void updatePoint(double pt[3]); + bool frozenPointCoord(int coord); }; class physicalContextWindow{ diff --git a/Fltk/openglWindow.cpp b/Fltk/openglWindow.cpp index 9bb13c10cd..baf3730f8d 100644 --- a/Fltk/openglWindow.cpp +++ b/Fltk/openglWindow.cpp @@ -625,22 +625,18 @@ int openglWindow::handle(int event) CTX::instance()->cg[2] - p[2]}, t; prosca(r, d, &t); for(int i = 0; i < 3; i++){ - _point[i] = p[i] + t * d[i]; - if(CTX::instance()->geom.snap[i]){ - double d = _point[i] / CTX::instance()->geom.snap[i]; - double f = floor(d); - double c = ceil(d); - double n = (d - f < c - d) ? f : c; - _point[i] = n * CTX::instance()->geom.snap[i]; + if(!FlGui::instance()->elementaryContext->frozenPointCoord(i)){ + _point[i] = p[i] + t * d[i]; + if(CTX::instance()->geom.snap[i]){ + double d = _point[i] / CTX::instance()->geom.snap[i]; + double f = floor(d); + double c = ceil(d); + double n = (d - f < c - d) ? f : c; + _point[i] = n * CTX::instance()->geom.snap[i]; + } } } - char str[32]; - sprintf(str, "%g", _point[0]); - FlGui::instance()->elementaryContext->input[2]->value(str); - sprintf(str, "%g", _point[1]); - FlGui::instance()->elementaryContext->input[3]->value(str); - sprintf(str, "%g", _point[2]); - FlGui::instance()->elementaryContext->input[4]->value(str); + FlGui::instance()->elementaryContext->updatePoint(_point); redraw(); } else{ // hover mode -- GitLab