From 022f9184124121aeabddae43c8af11ddf641bde5 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 19 Nov 2010 16:47:06 +0000 Subject: [PATCH] 0020944: EDF 1464 SMESH: detection of over-constrained elements + FT_OverConstrainedVolume, + FT_OverConstrainedFace, + class OverConstrainedVolume: public Predicate + class OverConstrainedFace: public Predicate --- .../SMESH/images/over_constrained_faces.png | Bin 0 -> 6599 bytes .../SMESH/images/over_constrained_volumes.png | Bin 0 -> 8184 bytes .../SMESH/input/about_quality_controls.doc | 2 + .../SMESH/input/over_constrained_faces.doc | 14 ++++ .../SMESH/input/over_constrained_volumes.doc | 14 ++++ .../SMESH/input/selection_filter_library.doc | 8 ++ .../gui/SMESH/input/tui_quality_controls.doc | 36 +++++++++ idl/SMESH_Filter.idl | 17 +++- src/SMESHGUI/SMESHGUI_FilterDlg.cxx | 32 +++++--- src/SMESHGUI/SMESH_images.ts | 8 ++ src/SMESHGUI/SMESH_msg_en.ts | 32 ++++++++ src/SMESH_I/SMESH_DumpPython.cxx | 76 +++++++++--------- src/SMESH_I/SMESH_Filter_i.hxx | 32 +++++++- src/SMESH_SWIG/smeshDC.py | 5 +- 14 files changed, 220 insertions(+), 56 deletions(-) create mode 100644 doc/salome/gui/SMESH/images/over_constrained_faces.png create mode 100644 doc/salome/gui/SMESH/images/over_constrained_volumes.png create mode 100644 doc/salome/gui/SMESH/input/over_constrained_faces.doc create mode 100644 doc/salome/gui/SMESH/input/over_constrained_volumes.doc diff --git a/doc/salome/gui/SMESH/images/over_constrained_faces.png b/doc/salome/gui/SMESH/images/over_constrained_faces.png new file mode 100644 index 0000000000000000000000000000000000000000..9d584e8ac08257e4d354be8cdeb209110d854930 GIT binary patch literal 6599 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/over_constrained_volumes.png b/doc/salome/gui/SMESH/images/over_constrained_volumes.png new file mode 100644 index 0000000000000000000000000000000000000000..761144382c7140950b71a664885556b86018fd12 GIT binary patch literal 8184 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
  • \subpage free_faces_page "Free faces"
  • \subpage bare_border_faces_page "Bare border faces"
  • +
  • \subpage over_constrained_faces_page "Over-constrained faces"
  • \subpage length_2d_page "Length 2D"
  • \subpage borders_at_multi_connection_2d_page "Borders at multi-connection 2D"
  • \subpage area_page "Area"
  • @@ -50,6 +51,7 @@ Volume quality controls:
  • \subpage volume_page "Volume"
  • \subpage max_element_length_3d_page "Max element length 3D"
  • \subpage bare_border_volumes_page "Bare border volumes"
  • +
  • \subpage over_constrained_volumes_page "Over-constrained volumes"
  • */ diff --git a/doc/salome/gui/SMESH/input/over_constrained_faces.doc b/doc/salome/gui/SMESH/input/over_constrained_faces.doc new file mode 100644 index 000000000..26ad944f7 --- /dev/null +++ b/doc/salome/gui/SMESH/input/over_constrained_faces.doc @@ -0,0 +1,14 @@ +/*! + +\page over_constrained_faces_page Over-constrained faces + +\n This mesh quality control highlights faces sharing only one of its borders with other faces. + +\image html over_constrained_faces.png + +In this picture the over-constrained face is displayed in red. + +
    See Also a sample TUI Script of a +\ref tui_over_constrained_faces "Over-constrained faces" filter. + +*/ diff --git a/doc/salome/gui/SMESH/input/over_constrained_volumes.doc b/doc/salome/gui/SMESH/input/over_constrained_volumes.doc new file mode 100644 index 000000000..1519e0ae6 --- /dev/null +++ b/doc/salome/gui/SMESH/input/over_constrained_volumes.doc @@ -0,0 +1,14 @@ +/*! + +\page over_constrained_volumes_page Over-constrained volumes + +\n This mesh quality control highlights volumes sharing only one of its borders with other volumes. + +\image html over_constrained_volumes.png + +In this picture the over-constrained volume is displayed in red. + +
    See Also a sample TUI Script of a +\ref tui_over_constrained_volumes "Over-constrained volumes" filter. + +*/ \ No newline at end of file diff --git a/doc/salome/gui/SMESH/input/selection_filter_library.doc b/doc/salome/gui/SMESH/input/selection_filter_library.doc index 29c740c65..80aedc6ba 100644 --- a/doc/salome/gui/SMESH/input/selection_filter_library.doc +++ b/doc/salome/gui/SMESH/input/selection_filter_library.doc @@ -149,6 +149,10 @@ one element of mesh only. See also a Faces with bare border selects 2D mesh elements having a free border without an edge on it. See also \ref bare_border_faces_page "Bare border faces quality control".
  • +Over-constrained faces selects 2D mesh elements having only one border shared +with other 2D elements. +See also \ref over_constrained_faces_page "Over-constrained faces quality control". +
  • Borders at Multi-Connections 2D selects cells consisting of edges belonging to several elements of mesh. The number of mesh elements should be more, less or equal (within a given Tolerance) to the predefined Threshold Value. @@ -185,6 +189,10 @@ diagonals with a value of length, which is more, less or equal Bad oriented volume selects mesh volumes, which are incorrectly oriented from the point of view of MED convention.
  • +Over-constrained volumes selects mesh volumes having only one border shared +with other volumes. +See also \ref over_constrained_volumes_page "Over-constrained volumes quality control". +
  • Volumes with bare border selects 3D mesh elements having a free border without a face on it. See also \ref bare_border_volumes_page "Bare border volumes quality control".
  • diff --git a/doc/salome/gui/SMESH/input/tui_quality_controls.doc b/doc/salome/gui/SMESH/input/tui_quality_controls.doc index 18370b7b5..143ee1039 100644 --- a/doc/salome/gui/SMESH/input/tui_quality_controls.doc +++ b/doc/salome/gui/SMESH/input/tui_quality_controls.doc @@ -357,6 +357,42 @@ bareGroup = mesh.MakeGroup("bare volumes", VOLUME, FT_BareBorderVolume) assert(bareGroup.Size() == len( faceToRemove)) \endcode +\section tui_over_constrained_faces Over-constrained faces +\code +from smesh import * +SetCurrentStudy(salome.myStudy) + +mesh = Mesh() +faceFilter = GetFilter(FACE,FT_OverConstrainedFace) + +#make an edge +n1 = mesh.AddNode(0,0,0) +n2 = mesh.AddNode(10,0,0) +edge = mesh.AddEdge([n1,n2]) +assert( not mesh.GetIdsFromFilter( faceFilter )) + +# make faces +mesh.ExtrusionSweep([edge], MakeDirStruct(0,7,0), 5) +assert( 2 == len( mesh.GetIdsFromFilter( faceFilter ))) +\endcode + +\section tui_over_constrained_volumes Over-constrained volumes +\code +from smesh import * +SetCurrentStudy(salome.myStudy) + +mesh = Mesh() +volumeFilter = GetFilter(VOLUME,FT_OverConstrainedVolume) + +# make volumes by extrusion of one face +n1 = mesh.AddNode(0,0,0) +n2 = mesh.AddNode(10,0,0) +edge = mesh.AddEdge([n1,n2]) +mesh.ExtrusionSweep([edge], MakeDirStruct(0,7,0), 1) +mesh.ExtrusionSweep( mesh.GetElementsByType(FACE), MakeDirStruct(0,0,5), 7) +assert( 2 == len( mesh.GetIdsFromFilter( volumeFilter ))) +\endcode + \section tui_length_2d Length 2D \code diff --git a/idl/SMESH_Filter.idl b/idl/SMESH_Filter.idl index 488356bd8..3bcefbd49 100644 --- a/idl/SMESH_Filter.idl +++ b/idl/SMESH_Filter.idl @@ -66,6 +66,8 @@ module SMESH FT_BadOrientedVolume, FT_BareBorderVolume, FT_BareBorderFace, + FT_OverConstrainedVolume, + FT_OverConstrainedFace, FT_LinearOrQuadratic, FT_GroupColor, FT_ElemGeomType, @@ -168,7 +170,7 @@ module SMESH interface BadOrientedVolume: Predicate {}; /*! - * Logical functor (predicate) "Volumes with bare border" and "Faces with bare border". + * Logical functor (predicate) "Volumes with bare border". * Verify whether a mesh volume has a free facet without a mesh face on it */ interface BareBorderVolume: Predicate {}; @@ -179,6 +181,17 @@ module SMESH */ interface BareBorderFace: Predicate {}; + /*! + * Logical functor (predicate) "Over-constrained Volume" + * Verify whether a mesh volume has only one facet shared with other volumes + */ + interface OverConstrainedVolume: Predicate {}; + /*! + * Logical functor (predicate) "Over-constrained Face". + * Verify whether a mesh face has only one border shared with other faces + */ + interface OverConstrainedFace: Predicate {}; + /*! * Logical functor (predicate) "Belong To Geometry". * Verify whether mesh element or node belong to pointed Geom Object @@ -508,6 +521,8 @@ module SMESH BadOrientedVolume CreateBadOrientedVolume(); BareBorderVolume CreateBareBorderVolume(); BareBorderFace CreateBareBorderFace(); + OverConstrainedVolume CreateOverConstrainedVolume(); + OverConstrainedFace CreateOverConstrainedFace(); LinearOrQuadratic CreateLinearOrQuadratic(); GroupColor CreateGroupColor(); diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx index 7e5030f4a..b867bdc43 100755 --- a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx @@ -1172,6 +1172,8 @@ void SMESHGUI_FilterTable::SetCriterion (const int theRow, theCriterion.Type != SMESH::FT_BadOrientedVolume && theCriterion.Type != SMESH::FT_BareBorderFace && theCriterion.Type != SMESH::FT_BareBorderVolume && + theCriterion.Type != SMESH::FT_OverConstrainedFace && + theCriterion.Type != SMESH::FT_OverConstrainedVolume && theCriterion.Type != SMESH::FT_LinearOrQuadratic) aTable->item( theRow, 2 )->setText(QString("%1").arg(theCriterion.Threshold, 0, 'g', 15)); else @@ -1332,7 +1334,9 @@ void SMESHGUI_FilterTable::updateAdditionalWidget() aCriterion != SMESH::FT_FreeFaces && aCriterion != SMESH::FT_BadOrientedVolume && aCriterion != SMESH::FT_BareBorderFace && - aCriterion != SMESH::FT_BareBorderVolume); + aCriterion != SMESH::FT_BareBorderVolume && + aCriterion != SMESH::FT_OverConstrainedFace && + aCriterion != SMESH::FT_OverConstrainedVolume); if (!myAddWidgets.contains(anItem)) { @@ -1509,9 +1513,11 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con if (aType == SMESH::NODE && aCriterionType == SMESH::FT_FreeNodes || aType == SMESH::EDGE && aCriterionType == SMESH::FT_FreeBorders || aType == SMESH::FACE && (aCriterionType == SMESH::FT_BareBorderFace || + aCriterionType == SMESH::FT_OverConstrainedFace || aCriterionType == SMESH::FT_FreeEdges || aCriterionType == SMESH::FT_FreeFaces) || aType == SMESH::VOLUME && (aCriterionType == SMESH::FT_BadOrientedVolume || + aCriterionType == SMESH::FT_OverConstrainedVolume || aCriterionType == SMESH::FT_BareBorderVolume) || aCriterionType == SMESH::FT_LinearOrQuadratic || aCriterionType == SMESH::FT_GroupColor || @@ -1796,6 +1802,7 @@ const QMap& SMESHGUI_FilterTable::getCriteria (const int theType) aCriteria[ SMESH::FT_MultiConnection2D ] = tr("MULTI2D_BORDERS"); aCriteria[ SMESH::FT_FreeFaces ] = tr("FREE_FACES"); aCriteria[ SMESH::FT_BareBorderFace ] = tr("BARE_BORDER_FACE"); + aCriteria[ SMESH::FT_OverConstrainedFace] = tr("OVER_CONSTRAINED_FACE"); aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR"); aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR"); aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE"); @@ -1807,17 +1814,18 @@ const QMap& SMESHGUI_FilterTable::getCriteria (const int theType) static QMap aCriteria; if (aCriteria.isEmpty()) { - aCriteria[ SMESH::FT_AspectRatio3D ] = tr("ASPECT_RATIO_3D"); - aCriteria[ SMESH::FT_RangeOfIds ] = tr("RANGE_OF_IDS"); - aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM"); - aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM"); - aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME"); - aCriteria[ SMESH::FT_BareBorderVolume ] = tr("BARE_BORDER_VOLUME"); - aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D"); - aCriteria[ SMESH::FT_MaxElementLength3D ] = tr("MAX_ELEMENT_LENGTH_3D"); - aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR"); - aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR"); - aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE"); + aCriteria[ SMESH::FT_AspectRatio3D ] = tr("ASPECT_RATIO_3D"); + aCriteria[ SMESH::FT_RangeOfIds ] = tr("RANGE_OF_IDS"); + aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM"); + aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM"); + aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME"); + aCriteria[ SMESH::FT_BareBorderVolume ] = tr("BARE_BORDER_VOLUME"); + aCriteria[ SMESH::FT_OverConstrainedVolume] = tr("OVER_CONSTRAINED_VOLUME"); + aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D"); + aCriteria[ SMESH::FT_MaxElementLength3D ] = tr("MAX_ELEMENT_LENGTH_3D"); + aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR"); + aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR"); + aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE"); } return aCriteria; } diff --git a/src/SMESHGUI/SMESH_images.ts b/src/SMESHGUI/SMESH_images.ts index d7373ad92..7558fb793 100644 --- a/src/SMESHGUI/SMESH_images.ts +++ b/src/SMESHGUI/SMESH_images.ts @@ -465,6 +465,14 @@ ICON_BARE_BORDER_FACE bare_border_face.png + + ICON_OVER_CONSTRAINED_VOLUME + over_constrained_volume.png + + + ICON_OVER_CONSTRAINED_FACE + over_constrained_face.png + ICON_WARP mesh_wrap.png diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index ce8bed27b..0336c7406 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -399,6 +399,14 @@ MEN_BARE_BORDER_FACE Faces with bare border + + MEN_OVER_CONSTRAINED_VOLUME + Over-constrained volumes + + + MEN_OVER_CONSTRAINED_FACE + Over-constrained faces + MEN_FREE_BORDER Free Borders @@ -2440,6 +2448,14 @@ Consider saving your work before application crash STB_BARE_BORDER_FACE Faces with bare border + + STB_OVER_CONSTRAINED_VOLUME + Over-constrained volumes + + + STB_OVER_CONSTRAINED_FACE + Over-constrained faces + STB_FREE_BORDER Free Borders @@ -2984,6 +3000,14 @@ Consider saving your work before application crash TOP_BARE_BORDER_FACE Faces with bare border + + TOP_OVER_CONSTRAINED_VOLUME + Over-constrained volumes + + + TOP_OVER_CONSTRAINED_FACE + Over-constrained faces + TOP_FREE_BORDER Free Borders @@ -4331,6 +4355,14 @@ Please check input data and try again BARE_BORDER_FACE Faces with bare border + + OVER_CONSTRAINED_VOLUME + Over-constrained volumes + + + OVER_CONSTRAINED_FACE + Over-constrained faces + BELONG_TO_CYLINDER Belong to Cylinder diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index db27571db..4615dece9 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -266,44 +266,46 @@ namespace SMESH if ( theArg ) { FunctorType aFunctorType = theArg->GetFunctorType(); switch(aFunctorType){ - case FT_AspectRatio: myStream<< "anAspectRatio"; break; - case FT_AspectRatio3D: myStream<< "anAspectRatio3D"; break; - case FT_Warping: myStream<< "aWarping"; break; - case FT_MinimumAngle: myStream<< "aMinimumAngle"; break; - case FT_Taper: myStream<< "aTaper"; break; - case FT_Skew: myStream<< "aSkew"; break; - case FT_Area: myStream<< "aArea"; break; - case FT_Volume3D: myStream<< "aVolume3D"; break; - case FT_MaxElementLength2D:myStream<< "aMaxElementLength2D";break; - case FT_MaxElementLength3D:myStream<< "aMaxElementLength3D";break; - case FT_FreeBorders: myStream<< "aFreeBorders"; break; - case FT_FreeEdges: myStream<< "aFreeEdges"; break; - case FT_FreeNodes: myStream<< "aFreeNodes"; break; - case FT_FreeFaces: myStream<< "aFreeFaces"; break; - case FT_MultiConnection: myStream<< "aMultiConnection"; break; - case FT_MultiConnection2D:myStream<< "aMultiConnection2D";break; - case FT_Length: myStream<< "aLength"; break; - case FT_Length2D: myStream<< "aLength"; break; - case FT_BelongToGeom: myStream<< "aBelongToGeom"; break; - case FT_BelongToPlane: myStream<< "aBelongToPlane"; break; - case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break; - case FT_BelongToGenSurface:myStream<<"aBelongToGenSurface";break; - case FT_LyingOnGeom: myStream<< "aLyingOnGeom"; break; - case FT_RangeOfIds: myStream<< "aRangeOfIds"; break; - case FT_BadOrientedVolume:myStream<< "aBadOrientedVolume";break; - case FT_BareBorderVolume: myStream<< "aBareBorderVolume"; break; - case FT_BareBorderFace: myStream<< "aBareBorderFace"; break; - case FT_LinearOrQuadratic:myStream<< "aLinearOrQuadratic";break; - case FT_GroupColor: myStream<< "aGroupColor"; break; - case FT_ElemGeomType: myStream<< "anElemGeomType"; break; - case FT_LessThan: myStream<< "aLessThan"; break; - case FT_MoreThan: myStream<< "aMoreThan"; break; - case FT_EqualTo: myStream<< "anEqualTo"; break; - case FT_LogicalNOT: myStream<< "aLogicalNOT"; break; - case FT_LogicalAND: myStream<< "aLogicalAND"; break; - case FT_LogicalOR: myStream<< "aLogicalOR"; break; + case FT_AspectRatio: myStream<< "anAspectRatio"; break; + case FT_AspectRatio3D: myStream<< "anAspectRatio3D"; break; + case FT_Warping: myStream<< "aWarping"; break; + case FT_MinimumAngle: myStream<< "aMinimumAngle"; break; + case FT_Taper: myStream<< "aTaper"; break; + case FT_Skew: myStream<< "aSkew"; break; + case FT_Area: myStream<< "aArea"; break; + case FT_Volume3D: myStream<< "aVolume3D"; break; + case FT_MaxElementLength2D: myStream<< "aMaxElementLength2D"; break; + case FT_MaxElementLength3D: myStream<< "aMaxElementLength3D"; break; + case FT_FreeBorders: myStream<< "aFreeBorders"; break; + case FT_FreeEdges: myStream<< "aFreeEdges"; break; + case FT_FreeNodes: myStream<< "aFreeNodes"; break; + case FT_FreeFaces: myStream<< "aFreeFaces"; break; + case FT_MultiConnection: myStream<< "aMultiConnection"; break; + case FT_MultiConnection2D: myStream<< "aMultiConnection2D"; break; + case FT_Length: myStream<< "aLength"; break; + case FT_Length2D: myStream<< "aLength"; break; + case FT_BelongToGeom: myStream<< "aBelongToGeom"; break; + case FT_BelongToPlane: myStream<< "aBelongToPlane"; break; + case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break; + case FT_BelongToGenSurface: myStream<<"aBelongToGenSurface"; break; + case FT_LyingOnGeom: myStream<< "aLyingOnGeom"; break; + case FT_RangeOfIds: myStream<< "aRangeOfIds"; break; + case FT_BadOrientedVolume: myStream<< "aBadOrientedVolume"; break; + case FT_BareBorderVolume: myStream<< "aBareBorderVolume"; break; + case FT_BareBorderFace: myStream<< "aBareBorderFace"; break; + case FT_OverConstrainedVolume: myStream<< "aOverConstrainedVolume"; break; + case FT_OverConstrainedFace: myStream<< "aOverConstrainedFace"; break; + case FT_LinearOrQuadratic: myStream<< "aLinearOrQuadratic"; break; + case FT_GroupColor: myStream<< "aGroupColor"; break; + case FT_ElemGeomType: myStream<< "anElemGeomType"; break; + case FT_LessThan: myStream<< "aLessThan"; break; + case FT_MoreThan: myStream<< "aMoreThan"; break; + case FT_EqualTo: myStream<< "anEqualTo"; break; + case FT_LogicalNOT: myStream<< "aLogicalNOT"; break; + case FT_LogicalAND: myStream<< "aLogicalAND"; break; + case FT_LogicalOR: myStream<< "aLogicalOR"; break; case FT_Undefined: - default: myStream<< "anUndefined"; break; + default: myStream<< "anUndefined"; break; } myStream<