diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 93aa0dc773f8473a654b07e54773f64c2935c902..a5705a38d7cc7739c7c47a006b1360486fb1437a 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.468 2006-11-04 00:17:07 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.469 2006-11-04 14:14:12 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -3616,6 +3616,63 @@ void mesh_parameterize_cb(CALLBACK_ARGS) printf("LAUNCH REPARAMETERIZATION WINDOW!\n"); } +void mesh_inspect_cb(CALLBACK_ARGS) +{ + char *str = (char*)data; + + std::vector<GVertex*> vertices; + std::vector<GEdge*> edges; + std::vector<GFace*> faces; + std::vector<GRegion*> regions; + std::vector<MElement*> elements; + MElement *ele = 0; + + CTX.pick_elements = 1; + CTX.mesh.changed = ENT_ALL; + Draw(); + + while(1) { + Msg(ONSCREEN, "Select element\n[Press 'q' to abort]"); + char ib = SelectEntity(ENT_ALL, vertices, edges, faces, regions, elements); + if(ib == 'l') { + if(ele) ele->setVisibility(1); + if(elements.size()){ + ele = elements[0]; + ele->setVisibility(2); + Msg(DIRECT, "Element %d:", ele->getNum()); + Msg(DIRECT, " Type: %d", ele->getTypeForMSH()); + Msg(DIRECT, " Dimension: %d", ele->getDim()); + Msg(DIRECT, " Order: %d", ele->getPolynomialOrder()); + Msg(DIRECT, " Partition: %d", ele->getPartition()); + char tmp1[256], tmp2[256]; + sprintf(tmp2, " Vertices:"); + for(int i = 0; i < ele->getNumVertices(); i++){ + sprintf(tmp1, " %d", ele->getVertex(i)->getNum()); + strcat(tmp2, tmp1); + } + Msg(DIRECT, tmp2); + SPoint3 pt = ele->barycenter(); + Msg(DIRECT, " Barycenter: (%g,%g,%g)", pt[0], pt[1], pt[2]); + Msg(DIRECT, " Rho: %g", ele->rhoShapeMeasure()); + Msg(DIRECT, " Gamma: %g", ele->gammaShapeMeasure()); + Msg(DIRECT, " Eta: %g", ele->etaShapeMeasure()); + CTX.mesh.changed = ENT_ALL; + Draw(); + WID->create_message_window(); + } + } + if(ib == 'q') { + if(ele) ele->setVisibility(1); + break; + } + } + + CTX.pick_elements = 0; + CTX.mesh.changed = ENT_ALL; + Draw(); + Msg(ONSCREEN, ""); +} + void mesh_degree_cb(CALLBACK_ARGS) { if((long)data == 2) diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h index ba2a26a9d0f880d6b0fe75785c58ec67879edf9a..5f853b50495d2a640c01aa4813ee7626e4bbf404 100644 --- a/Fltk/Callbacks.h +++ b/Fltk/Callbacks.h @@ -273,6 +273,7 @@ void mesh_3d_cb(CALLBACK_ARGS); void mesh_edit_cb(CALLBACK_ARGS); void mesh_delete_cb(CALLBACK_ARGS); void mesh_delete_parts_cb(CALLBACK_ARGS); +void mesh_inspect_cb(CALLBACK_ARGS); void mesh_remesh_cb(CALLBACK_ARGS); void mesh_update_edges_cb(CALLBACK_ARGS); void mesh_parameterize_cb(CALLBACK_ARGS); diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 1a0241a7164e3c70f63510810c7122bd132d0777..f299f5a7e4bd280281a6fd634ac6870c21358189 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.557 2006-11-02 18:55:45 geuzaine Exp $ +// $Id: GUI.cpp,v 1.558 2006-11-04 14:14:12 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -322,6 +322,7 @@ Context_Item menu_geometry[] = { Context_Item menu_mesh[] = { {"1Mesh", NULL} , {"Define", (Fl_Callback *)mesh_define_cb} , + {"Inspect", (Fl_Callback *)mesh_inspect_cb} , {"Edit", (Fl_Callback *)mesh_edit_cb} , {"1D", (Fl_Callback *)mesh_1d_cb} , {"2D", (Fl_Callback *)mesh_2d_cb} , diff --git a/Fltk/Opengl_Window.cpp b/Fltk/Opengl_Window.cpp index 1ae4bd1eddbdb1375561ddb56588d848be52e176..a815cbee15aa204a13d1f969f57cd865e215f500 100644 --- a/Fltk/Opengl_Window.cpp +++ b/Fltk/Opengl_Window.cpp @@ -1,4 +1,4 @@ -// $Id: Opengl_Window.cpp,v 1.75 2006-11-04 00:17:08 geuzaine Exp $ +// $Id: Opengl_Window.cpp,v 1.76 2006-11-04 14:14:13 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -301,8 +301,16 @@ int Opengl_Window::handle(int event) redraw(); } else { - if(Fl::event_button() == 1 && - !Fl::event_state(FL_SHIFT) && !Fl::event_state(FL_ALT)) { + if(Fl::event_state(FL_META)) { + // will try to select or unselect entities on the fly + WID->try_selection = Fl::event_state(FL_SHIFT) ? -1 : 1; + WID->try_selection_xywh[0] = (int)curr.win[0]; + WID->try_selection_xywh[1] = (int)curr.win[1]; + WID->try_selection_xywh[2] = 5; + WID->try_selection_xywh[3] = 5; + } + else if(Fl::event_button() == 1 && + !Fl::event_state(FL_SHIFT) && !Fl::event_state(FL_ALT)) { if(CTX.useTrackball) CTX.addQuaternion((2. * prev.win[0] - w()) / w(), (h() - 2. * prev.win[1]) / h(),