diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index 7ca7271c420eab59e5a46a6cf1dae5905b872866..05951d252b481446aa1252f2ac04bc6f7f3dff79 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 bfff11196e26188c263f7635341b1064ee66fa12..f6c3d3ee312196caf849ef5ac4e30bdf8ff3b970 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 f9feaf6a8812e7824ba5a95e933dd087ed4a8907..a3171417f5d676799c7a424ffa0a5b27ab7542dc 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 20e13713149de94b2551b2f6b83bb18e727818b5..5cc2a666fc71e3fc0ebb14488b113125706bbccd 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 34b4862290180a0c879fad284e9ed7ab718f9d37..da1021ae1900e3d21edb10810ae5674513cc4a1b 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 2305a2fcd7e4dd2146e3f31ad4a3abd2e3e46eef..8f758b8ece0512efb0c4d3bbdf816134ef1371c3 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 65e3a029afc50679558e3039b2d945ef26e47519..41d47c5271cd1afa011daa4607051d10afcbad84 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 ac3c920e8ef320dce961aeba79a782b9f19bf6dc..98879ec12519eda8bdd56d29254ddf369518c0b3 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];