From 8b187bb3528051a0f98a15761bca27ce7eef0c1a Mon Sep 17 00:00:00 2001 From: eap Date: Mon, 29 Aug 2016 19:14:55 +0300 Subject: [PATCH] Allow local size on any face and solid --- .../images/netgen3d_local_size.png | Bin 18500 -> 14408 bytes .../NETGENPLUGIN/input/netgen_2d_3d_hypo.doc | 13 +++--- src/GUI/NETGENPluginGUI_HypothesisCreator.cxx | 9 ++++ src/GUI/NETGENPluginGUI_HypothesisCreator.h | 1 + src/GUI/NETGENPlugin_msg_en.ts | 6 ++- src/GUI/NETGENPlugin_msg_fr.ts | 6 ++- src/NETGENPlugin/NETGENPlugin_Mesher.cxx | 39 +++++++++++++++--- 7 files changed, 61 insertions(+), 13 deletions(-) diff --git a/doc/salome/gui/NETGENPLUGIN/images/netgen3d_local_size.png b/doc/salome/gui/NETGENPLUGIN/images/netgen3d_local_size.png index b93e4b0d070039e77972fe2dd6b2a6b8e07f423e..1bac778f08f44cd07152b28c491d7eb31ef020eb 100644 GIT binary patch literal 14408 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 literal 18500 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 TiVZf?Kp^i$r9}$h+Ft($xlKJZ diff --git a/doc/salome/gui/NETGENPLUGIN/input/netgen_2d_3d_hypo.doc b/doc/salome/gui/NETGENPLUGIN/input/netgen_2d_3d_hypo.doc index fc69e0c..30ea993 100644 --- a/doc/salome/gui/NETGENPLUGIN/input/netgen_2d_3d_hypo.doc +++ b/doc/salome/gui/NETGENPLUGIN/input/netgen_2d_3d_hypo.doc @@ -59,12 +59,13 @@ but are topologically different. \image html netgen3d_local_size.png - Local sizes - allows to define size of elements on and -around specified geometrical edges and vertices. To define the local -size it is necessary to select a geometrical edge or vertex in the -object browser or in the viewer, and to click On Edge or On -Vertex correspondingly. Name of the geometrical object and -a default Value will be added in the table where the -Value can be changed. +around specified geometrical objects. To define the local +size it is necessary to select a geometrical objects in the +object browser or in the viewer, and to click a button corresponding +to the type of the geometrical objects: On Vertex, On + Edge etc. Name of the geometrical object and a +default Value will be added in the table where the Value +can be changed. - Remove - deletes a selected row from the table. \image html netgen2d3d_simple.png diff --git a/src/GUI/NETGENPluginGUI_HypothesisCreator.cxx b/src/GUI/NETGENPluginGUI_HypothesisCreator.cxx index 8d5924e..f2c685f 100644 --- a/src/GUI/NETGENPluginGUI_HypothesisCreator.cxx +++ b/src/GUI/NETGENPluginGUI_HypothesisCreator.cxx @@ -80,6 +80,7 @@ enum { LSZ_VERTEX_BTN, LSZ_EDGE_BTN, LSZ_FACE_BTN, + LSZ_SOLID_BTN, LSZ_SEPARATOR2, LSZ_REMOVE_BTN }; @@ -262,6 +263,8 @@ QFrame* NETGENPluginGUI_HypothesisCreator::buildFrame() localSizeLayout->addWidget(addEdgeButton, LSZ_EDGE_BTN, 1, 1, 1); QPushButton* addFaceButton = new QPushButton(tr("NETGEN_LSZ_FACE"), localSizeGroup); localSizeLayout->addWidget(addFaceButton, LSZ_FACE_BTN, 1, 1, 1); + QPushButton* addSolidButton = new QPushButton(tr("NETGEN_LSZ_SOLID"), localSizeGroup); + localSizeLayout->addWidget(addSolidButton, LSZ_SOLID_BTN, 1, 1, 1); QFrame *line2 = new QFrame(localSizeGroup); line2->setFrameShape(QFrame::HLine); @@ -274,6 +277,7 @@ QFrame* NETGENPluginGUI_HypothesisCreator::buildFrame() connect( addVertexButton, SIGNAL(clicked()), this, SLOT(onAddLocalSizeOnVertex())); connect( addEdgeButton, SIGNAL(clicked()), this, SLOT(onAddLocalSizeOnEdge())); connect( addFaceButton, SIGNAL(clicked()), this, SLOT(onAddLocalSizeOnFace())); + connect( addSolidButton, SIGNAL(clicked()), this, SLOT(onAddLocalSizeOnSolid())); connect( removeButton, SIGNAL(clicked()), this, SLOT(onRemoveLocalSizeOnShape())); connect( myLocalSizeTable, SIGNAL(cellChanged(int, int)), this, SLOT(onSetLocalSize(int, int))); @@ -638,6 +642,11 @@ void NETGENPluginGUI_HypothesisCreator::onAddLocalSizeOnFace() addLocalSizeOnShape(TopAbs_FACE); } +void NETGENPluginGUI_HypothesisCreator::onAddLocalSizeOnSolid() +{ + addLocalSizeOnShape(TopAbs_SOLID); +} + void NETGENPluginGUI_HypothesisCreator::addLocalSizeOnShape(TopAbs_ShapeEnum typeShapeAsked) { NETGENPlugin::NETGENPlugin_Hypothesis_var h = NETGENPlugin::NETGENPlugin_Hypothesis::_narrow(initParamsHypothesis()); diff --git a/src/GUI/NETGENPluginGUI_HypothesisCreator.h b/src/GUI/NETGENPluginGUI_HypothesisCreator.h index cb7bd63..24ca59c 100644 --- a/src/GUI/NETGENPluginGUI_HypothesisCreator.h +++ b/src/GUI/NETGENPluginGUI_HypothesisCreator.h @@ -80,6 +80,7 @@ protected slots: virtual void onAddLocalSizeOnVertex(); virtual void onAddLocalSizeOnEdge(); virtual void onAddLocalSizeOnFace(); + virtual void onAddLocalSizeOnSolid(); virtual void onRemoveLocalSizeOnShape(); virtual void onSetLocalSize(int,int); diff --git a/src/GUI/NETGENPlugin_msg_en.ts b/src/GUI/NETGENPlugin_msg_en.ts index 0f0d221..d7263d5 100644 --- a/src/GUI/NETGENPlugin_msg_en.ts +++ b/src/GUI/NETGENPlugin_msg_en.ts @@ -137,7 +137,11 @@ NETGEN_LSZ_FACE - On Sub-Face + On Face + + + NETGEN_LSZ_SOLID + On Solid NETGEN_LSZ_REMOVE diff --git a/src/GUI/NETGENPlugin_msg_fr.ts b/src/GUI/NETGENPlugin_msg_fr.ts index f505467..80206f1 100755 --- a/src/GUI/NETGENPlugin_msg_fr.ts +++ b/src/GUI/NETGENPlugin_msg_fr.ts @@ -137,7 +137,11 @@ NETGEN_LSZ_FACE - Sur une sous-face + Sur une face + + + NETGEN_LSZ_SOLID + Sur une solide NETGEN_LSZ_REMOVE diff --git a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx index a148202..9f56231 100644 --- a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx +++ b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -120,6 +121,7 @@ TopTools_IndexedMapOfShape ShapesWithLocalSize; std::map VertexId2LocalSize; std::map EdgeId2LocalSize; std::map FaceId2LocalSize; +std::map SolidId2LocalSize; //============================================================================= /*! @@ -149,6 +151,7 @@ NETGENPlugin_Mesher::NETGENPlugin_Mesher (SMESH_Mesh* mesh, VertexId2LocalSize.clear(); EdgeId2LocalSize.clear(); FaceId2LocalSize.clear(); + SolidId2LocalSize.clear(); } //================================================================================ @@ -240,6 +243,8 @@ void SetLocalSize(TopoDS_Shape GeomShape, double LocalSize) EdgeId2LocalSize[key] = LocalSize; } else if (GeomType == TopAbs_FACE) { FaceId2LocalSize[key] = LocalSize; + } else if (GeomType == TopAbs_SOLID) { + SolidId2LocalSize[key] = LocalSize; } } @@ -2555,16 +2560,40 @@ bool NETGENPlugin_Mesher::Compute() gp_Pnt p = BRep_Tool::Pnt(v); NETGENPlugin_Mesher::RestrictLocalSize( *_ngMesh, p.XYZ(), hi ); } - for(map::const_iterator it=FaceId2LocalSize.begin(); - it!=FaceId2LocalSize.end(); it++) + for(map::const_iterator it=FaceId2LocalSize.begin(); it!=FaceId2LocalSize.end(); it++) { int key = (*it).first; double val = (*it).second; const TopoDS_Shape& shape = ShapesWithLocalSize.FindKey(key); int faceNgID = occgeo.fmap.FindIndex(shape); - occgeo.SetFaceMaxH(faceNgID, val); - for ( TopExp_Explorer edgeExp( shape, TopAbs_EDGE ); edgeExp.More(); edgeExp.Next() ) - setLocalSize( TopoDS::Edge( edgeExp.Current() ), val, *_ngMesh ); + if ( faceNgID >= 1 ) + { + occgeo.SetFaceMaxH(faceNgID, val); + for ( TopExp_Explorer edgeExp( shape, TopAbs_EDGE ); edgeExp.More(); edgeExp.Next() ) + setLocalSize( TopoDS::Edge( edgeExp.Current() ), val, *_ngMesh ); + } + else + { + std::vector pnt; + SMESHUtils::createPointsSampleFromFace( TopoDS::Face( shape ), val, pnt ); + if ( !pnt.empty() ) + NETGENPlugin_Mesher::RestrictLocalSize( *_ngMesh, pnt[0].XYZ(), val ); + for ( size_t i = 1; i < pnt.size(); ++i ) + _ngMesh->RestrictLocalH( netgen::Point3d( pnt[i].X(), pnt[i].Y(), pnt[i].Z() ), val ); + } + } + for(map::const_iterator it=SolidId2LocalSize.begin(); it!=SolidId2LocalSize.end(); it++) + { + int key = (*it).first; + double val = (*it).second; + const TopoDS_Shape& shape = ShapesWithLocalSize.FindKey(key); + + std::vector pnt; + SMESHUtils::createPointsSampleFromSolid( TopoDS::Solid( shape ), val, pnt ); + if ( !pnt.empty() ) + NETGENPlugin_Mesher::RestrictLocalSize( *_ngMesh, pnt[0].XYZ(), val ); + for ( size_t i = 1; i < pnt.size(); ++i ) + _ngMesh->RestrictLocalH( netgen::Point3d( pnt[i].X(), pnt[i].Y(), pnt[i].Z() ), val ); } }