From 0324249154e8c3b1471d48697ee180f778106a96 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Fri, 17 Aug 2007 17:51:27 +0000 Subject: [PATCH] more fm work --- Common/Context.h | 2 +- Common/DefaultOptions.h | 3 +++ Common/Options.cpp | 13 ++++++++++++- Common/Options.h | 1 + Fltk/GUI_Projection.cpp | 34 +++++++++++++++++++++++++++++++++- Fltk/GUI_Projection.h | 2 ++ Graphics/Geom.cpp | 4 ++-- 7 files changed, 54 insertions(+), 5 deletions(-) diff --git a/Common/Context.h b/Common/Context.h index 10f61f2151..b7a21401b7 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -230,7 +230,7 @@ public : unsigned int ambient_light[6], diffuse_light[6], specular_light[6]; struct{ unsigned int point, line, surface, volume; - unsigned int selection, highlight[3]; + unsigned int selection, highlight[3], projection; unsigned int tangents, normals; } geom; struct{ diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index b5eaa3edf9..07016438a7 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -1472,6 +1472,9 @@ StringXColor GeometryOptions_Color[] = { { F|O, "Normals" , opt_geometry_color_normals , {255, 0, 0, 255}, {255, 0, 0, 255}, {0, 0, 0, 255}, "Normal geometry vectors color" }, + { F|O, "Projection" , opt_geometry_color_projection , + {0, 255, 0, 255}, {0, 255, 0, 255}, {0, 0, 0, 255}, + "Projection surface color" }, { 0, NULL , NULL , {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , NULL } } ; diff --git a/Common/Options.cpp b/Common/Options.cpp index 82d5a3664f..350456004c 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.348 2007-08-03 00:44:28 geuzaine Exp $ +// $Id: Options.cpp,v 1.349 2007-08-17 17:51:26 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -7306,6 +7306,17 @@ unsigned int opt_geometry_color_normals(OPT_ARGS_COL) return CTX.color.geom.normals; } +unsigned int opt_geometry_color_projection(OPT_ARGS_COL) +{ + if(action & GMSH_SET){ + CTX.color.geom.projection = val; + } +#if defined(HAVE_FLTK) + CCC(CTX.color.geom.projection, WID->geo_col[10]); +#endif + return CTX.color.geom.projection; +} + unsigned int opt_mesh_color_points(OPT_ARGS_COL) { if(action & GMSH_SET) { diff --git a/Common/Options.h b/Common/Options.h index bfad509042..1b6992b9ab 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -672,6 +672,7 @@ unsigned int opt_geometry_color_highlight1(OPT_ARGS_COL); unsigned int opt_geometry_color_highlight2(OPT_ARGS_COL); unsigned int opt_geometry_color_tangents(OPT_ARGS_COL); unsigned int opt_geometry_color_normals(OPT_ARGS_COL); +unsigned int opt_geometry_color_projection(OPT_ARGS_COL); unsigned int opt_mesh_color_points(OPT_ARGS_COL); unsigned int opt_mesh_color_points_sup(OPT_ARGS_COL); unsigned int opt_mesh_color_lines(OPT_ARGS_COL); diff --git a/Fltk/GUI_Projection.cpp b/Fltk/GUI_Projection.cpp index 3d07e958d0..d1191ede0b 100644 --- a/Fltk/GUI_Projection.cpp +++ b/Fltk/GUI_Projection.cpp @@ -160,6 +160,9 @@ projection::projection(FProjectionFace *f, int x, int y, int w, int h, int BB, i parameters.push_back(v3); v3->maximum(1.); v3->minimum(-1.); v3->step(0.01); v3->value(1.); v3->label("Normal"); + Fl_Button *b = new Fl_Button(x + w - BB / 3, y + 4 * BH, BB / 8, BH, "-"); + b->callback(invert_normal_cb, e); + b->tooltip("Invert normal"); } { // rotation is stored in parameters[6] Fl_Value_Input *v = new Fl_Value_Input(x, y + 5 * BH, BB, BH, "Rotation"); @@ -419,6 +422,35 @@ void project_point(FM::ProjectionSurface *ps, double x, double y, double z, } } +void invert_normal_cb(Fl_Widget *w, void *data) +{ + projectionEditor *e = (projectionEditor*)data; + projection *p = e->getCurrentProjection(); + if(p){ + p->parameters[3]->value(-p->parameters[3]->value()); + p->parameters[4]->value(-p->parameters[4]->value()); + p->parameters[5]->value(-p->parameters[5]->value()); + update_cb(0, data); + } +} + +void translate_cb(Fl_Widget *w, void *data) +{ + projectionEditor *e = (projectionEditor*)data; + projection *p = e->getCurrentProjection(); + if(p){ + // add widgets so that we can translate along the principal + // directions, and change the origin's position accordingly + double x = p->parameters[0]->value(); + double y = p->parameters[1]->value(); + double z = p->parameters[2]->value(); + p->parameters[0]->value(x); + p->parameters[1]->value(y); + p->parameters[2]->value(z); + update_cb(0, data); + } +} + void set_position_cb(Fl_Widget *w, void *data) { projectionEditor *e = (projectionEditor*)data; @@ -452,8 +484,8 @@ void set_position_cb(Fl_Widget *w, void *data) } } ((Fl_Toggle_Button*)w)->value(0); + update_cb(0, data); } - update_cb(0, data); } void getTangents(const SVector3 n, SVector3 &t1, SVector3 &t2, const double angle) diff --git a/Fltk/GUI_Projection.h b/Fltk/GUI_Projection.h index 09c6fa0454..04a7fe684c 100644 --- a/Fltk/GUI_Projection.h +++ b/Fltk/GUI_Projection.h @@ -18,6 +18,8 @@ void select_cb(Fl_Widget *w, void *data); void filter_cb(Fl_Widget *w, void *data); void browse_cb(Fl_Widget *w, void *data); void set_position_cb(Fl_Widget *w, void *data); +void invert_normal_cb(Fl_Widget *w, void *data); +void translate_cb(Fl_Widget *w, void *data); void update_cb(Fl_Widget *w, void *data); void close_cb(Fl_Widget *w, void *data); void hide_cb(Fl_Widget *w, void *data); diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp index 7f1fd4f63d..d319321e6f 100644 --- a/Graphics/Geom.cpp +++ b/Graphics/Geom.cpp @@ -1,4 +1,4 @@ -// $Id: Geom.cpp,v 1.136 2007-08-17 15:43:07 geuzaine Exp $ +// $Id: Geom.cpp,v 1.137 2007-08-17 17:51:27 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -262,7 +262,7 @@ class drawGFace { if(gr.size() != N) return; if(f->geomType() == GEntity::ProjectionFace) - glColor4ubv((GLubyte *) & CTX.color.geom.selection); + glColor4ubv((GLubyte *) & CTX.color.geom.projection); if(CTX.geom.surface_type > 0) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -- GitLab