diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 795fd75e5e6b978570587ea4df0c7eb1335d4aee..95f996d319e53128d3186f2c16a3a367965a889a 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.449 2006-08-24 01:14:56 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.450 2006-08-25 23:52:56 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -925,22 +925,22 @@ void general_options_rotation_center_select_cb(CALLBACK_ARGS) std::vector<GFace*> faces; std::vector<GRegion*> regions; - opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); - Draw(); - - Msg(ONSCREEN, "Select point\n[Press 'q' to abort]"); - char ib = SelectEntity(ENT_POINT, vertices, edges, faces, regions); + Msg(ONSCREEN, "Select entity\n[Press 'q' to abort]"); + char ib = SelectEntity(ENT_ALL, vertices, edges, faces, regions); if(ib == 'l') { - // This would bypass the "Apply" button... Not necessarily bad, - // but it's not consistent with the rest of the GUI. - //opt_general_rotation_center0(0, GMSH_SET|GMSH_GUI, v->x()); - //opt_general_rotation_center1(0, GMSH_SET|GMSH_GUI, v->y()); - //opt_general_rotation_center2(0, GMSH_SET|GMSH_GUI, v->z()); - - // This is more conform to the way we do things elsewhere: - WID->gen_value[8]->value(vertices[0]->x()); - WID->gen_value[9]->value(vertices[0]->y()); - WID->gen_value[10]->value(vertices[0]->z()); + SPoint3 pc(0., 0., 0.); + if(vertices.size()) + pc.setPosition(vertices[0]->x(), vertices[0]->y(), vertices[0]->z()); + else if(edges.size()) + pc = edges[0]->bounds().center(); + else if(faces.size()) + pc = faces[0]->bounds().center(); + else if(regions.size()) + pc = regions[0]->bounds().center(); + opt_general_rotation_center_cg(0, GMSH_SET, WID->gen_butt[15]->value()); + opt_general_rotation_center0(0, GMSH_SET|GMSH_GUI, pc.x()); + opt_general_rotation_center1(0, GMSH_SET|GMSH_GUI, pc.y()); + opt_general_rotation_center2(0, GMSH_SET|GMSH_GUI, pc.z()); } ZeroHighlight(); Draw(); diff --git a/Fltk/Opengl_Window.cpp b/Fltk/Opengl_Window.cpp index da374fba140056a01bcb3f582944f94538af026d..5d0380b5e1d78c8c9325a2218ae92cbf78c4067a 100644 --- a/Fltk/Opengl_Window.cpp +++ b/Fltk/Opengl_Window.cpp @@ -1,4 +1,4 @@ -// $Id: Opengl_Window.cpp,v 1.68 2006-08-20 14:12:40 geuzaine Exp $ +// $Id: Opengl_Window.cpp,v 1.69 2006-08-25 23:52:56 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -364,11 +364,12 @@ int Opengl_Window::handle(int event) std::vector<GEdge*> edges; std::vector<GFace*> faces; std::vector<GRegion*> regions; - ProcessSelectionBuffer(WID->selection, false, - CTX.enable_mouse_selection > 1, - (int)curr.win[0], (int)curr.win[1], 5, 5, - vertices, edges, faces, regions); - if((WID->selection == ENT_POINT && vertices.size()) || + bool something = ProcessSelectionBuffer(WID->selection, false, + CTX.enable_mouse_selection > 1, + (int)curr.win[0], (int)curr.win[1], 5, 5, + vertices, edges, faces, regions); + if((WID->selection == ENT_ALL && something) || + (WID->selection == ENT_POINT && vertices.size()) || (WID->selection == ENT_LINE && edges.size()) || (WID->selection == ENT_SURFACE && faces.size()) || (WID->selection == ENT_VOLUME && regions.size()))