From 408e9282034d1d8ca31f6d3c4404c27254bbd148 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Mon, 25 Oct 2004 19:19:30 +0000 Subject: [PATCH] new option to draw the arrows with a fixed size --- Common/DefaultOptions.h | 2 ++ Common/Options.cpp | 15 ++++++++++++++- Common/Options.h | 1 + Common/Views.cpp | 3 ++- Common/Views.h | 2 +- Fltk/Callbacks.cpp | 7 ++++++- Fltk/GUI.cpp | 8 +++++++- Graphics/PostElement.cpp | 8 +++++--- 8 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index 7ca7271c42..05951d252b 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -974,6 +974,8 @@ StringXNumber ViewOptions_Number[] = { "Arrow location (1=cog, 2=node)" }, { F|O, "ArrowSize" , opt_view_arrow_size , 60. , "Display size of arrows (in pixels)" }, + { F|O, "ArrowSizeProportional" , opt_view_arrow_size_proportional , 1. , + "Scale the arrows according to the norm of the vector" }, { F|O, "ArrowStemLength" , opt_view_arrow_stem_length , 0.56 , "Relative length of arrow stem" }, { F|O, "ArrowStemRadius" , opt_view_arrow_stem_radius , 0.02 , diff --git a/Common/Options.cpp b/Common/Options.cpp index bfff11196e..f6c3d3ee31 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.193 2004-10-25 00:45:47 geuzaine Exp $ +// $Id: Options.cpp,v 1.194 2004-10-25 19:19:29 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -4494,6 +4494,19 @@ double opt_view_arrow_size(OPT_ARGS_NUM) return v->ArrowSize; } +double opt_view_arrow_size_proportional(OPT_ARGS_NUM) +{ + GET_VIEW(0.); + if(action & GMSH_SET) { + v->ArrowSizeProportional = (int)val; + } +#if defined(HAVE_FLTK) + if(_gui_action_valid(action, num)) + WID->view_butt[0]->value(v->ArrowSizeProportional); +#endif + return v->ArrowSizeProportional; +} + double opt_view_arrow_head_radius(OPT_ARGS_NUM) { GET_VIEW(0.); diff --git a/Common/Options.h b/Common/Options.h index f9feaf6a88..a3171417f5 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -463,6 +463,7 @@ double opt_view_raise0(OPT_ARGS_NUM); double opt_view_raise1(OPT_ARGS_NUM); double opt_view_raise2(OPT_ARGS_NUM); double opt_view_arrow_size(OPT_ARGS_NUM); +double opt_view_arrow_size_proportional(OPT_ARGS_NUM); double opt_view_arrow_head_radius(OPT_ARGS_NUM); double opt_view_arrow_stem_length(OPT_ARGS_NUM); double opt_view_arrow_stem_radius(OPT_ARGS_NUM); diff --git a/Common/Views.cpp b/Common/Views.cpp index 20e1371314..5cc2a666fc 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -// $Id: Views.cpp,v 1.141 2004-10-21 17:02:25 geuzaine Exp $ +// $Id: Views.cpp,v 1.142 2004-10-25 19:19:29 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -620,6 +620,7 @@ void CopyViewOptions(Post_View * src, Post_View * dest) dest->Raise[1] = src->Raise[1]; dest->Raise[2] = src->Raise[2]; dest->ArrowSize = src->ArrowSize; + dest->ArrowSizeProportional = src->ArrowSizeProportional; dest->ArrowRelHeadRadius = src->ArrowRelHeadRadius; dest->ArrowRelStemLength = src->ArrowRelStemLength; dest->ArrowRelStemRadius = src->ArrowRelStemRadius; diff --git a/Common/Views.h b/Common/Views.h index 34b4862290..da1021ae19 100644 --- a/Common/Views.h +++ b/Common/Views.h @@ -150,7 +150,7 @@ class Post_View{ double CustomMin, CustomMax; double Offset[3], Raise[3], DisplacementFactor, Explode; double ArrowSize, ArrowRelHeadRadius, ArrowRelStemRadius, ArrowRelStemLength; - int Visible, IntervalsType, NbIso, NbAbscissa; + int Visible, IntervalsType, NbIso, NbAbscissa, ArrowSizeProportional; int Light, LightTwoSide, SmoothNormals; double AngleSmoothNormals, AlphaChannel; int SaturateValues; diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 2305a2fcd7..8f758b8ece 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.288 2004-10-25 00:45:47 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.289 2004-10-25 19:19:30 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -3468,6 +3468,7 @@ void view_options_ok_cb(CALLBACK_ARGS) double raise2 = opt_view_raise2(current, GMSH_GET, 0); double timestep = opt_view_timestep(current, GMSH_GET, 0); double arrow_size = opt_view_arrow_size(current, GMSH_GET, 0); + double arrow_size_proportional = opt_view_arrow_size_proportional(current, GMSH_GET, 0); double displacement_factor = opt_view_displacement_factor(current, GMSH_GET, 0); double raised_view = opt_view_raised_view(current, GMSH_GET, 0); double point_size = opt_view_point_size(current, GMSH_GET, 0); @@ -3610,6 +3611,10 @@ void view_options_ok_cb(CALLBACK_ARGS) // view_butts + val = WID->view_butt[0]->value(); + if(force || (val != arrow_size_proportional)) + opt_view_arrow_size_proportional(i, GMSH_SET, val); + val = WID->view_butt[1]->value() ? DRAW_POST_3D : WID->view_butt[2]->value() ? DRAW_POST_2D_SPACE : DRAW_POST_2D_TIME; if(force || (val != type)) diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 65e3a029af..41d47c5271 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.367 2004-10-21 17:02:25 geuzaine Exp $ +// $Id: GUI.cpp,v 1.368 2004-10-25 19:19:30 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -2627,6 +2627,11 @@ void GUI::create_option_window() view_value[60]->step(1); view_value[60]->align(FL_ALIGN_RIGHT); + view_butt[0] = new Fl_Check_Button(L + 2 * IW - 2 * WB, 2 * WB + 7 * BH, (int)(1.5*BB), BH, "Proportional"); + view_butt[0]->type(FL_TOGGLE_BUTTON); + view_butt[0]->down_box(TOGGLE_BOX); + view_butt[0]->selection_color(TOGGLE_COLOR); + view_value[63] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Displacement factor"); view_value[63]->minimum(0.); view_value[63]->maximum(1.); @@ -2844,6 +2849,7 @@ void GUI::update_view_window(int num) opt_view_line_type(num, GMSH_GUI, 0); opt_view_vector_type(num, GMSH_GUI, 0); opt_view_arrow_size(num, GMSH_GUI, 0); + opt_view_arrow_size_proportional(num, GMSH_GUI, 0); opt_view_displacement_factor(num, GMSH_GUI, 0); double val3 = 2. * CTX.lc / maxval; diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp index ac3c920e8e..98879ec125 100644 --- a/Graphics/PostElement.cpp +++ b/Graphics/PostElement.cpp @@ -1,4 +1,4 @@ -// $Id: PostElement.cpp,v 1.47 2004-10-21 23:42:50 geuzaine Exp $ +// $Id: PostElement.cpp,v 1.48 2004-10-25 19:19:30 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -1162,7 +1162,8 @@ void Draw_VectorElement(int type, Post_View * View, int preproNormals, Draw_String(Num); } else { - fact = CTX.pixel_equiv_x / CTX.s[0] * View->ArrowSize / ValMax; + fact = CTX.pixel_equiv_x / CTX.s[0] * View->ArrowSize / + (View->ArrowSizeProportional ? ValMax : dd); if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin > 0) { dx /= dd; dy /= dd; @@ -1187,7 +1188,8 @@ void Draw_VectorElement(int type, Post_View * View, int preproNormals, else PaletteDiscrete(View, View->NbIso, View->GIFV(ValMin, ValMax, View->NbIso, norm[k])); - fact = CTX.pixel_equiv_x / CTX.s[0] * View->ArrowSize / ValMax; + fact = CTX.pixel_equiv_x / CTX.s[0] * View->ArrowSize / + (View->ArrowSizeProportional ? ValMax : norm[k]); if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin > 0) { Val[k][0] /= norm[k]; Val[k][1] /= norm[k]; -- GitLab