filters_ex31.py
filters_ex33.py
filters_ex34.py
+ filters_ex35.py
filters_ex36.py
+ filters_ex37.py
+ filters_ex38.py
+ filters_ex39.py
filters_belong2group.py
grouping_elements_ex01.py
grouping_elements_ex02.py
box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
geompy.addToStudy(box, "Box")
-# 1. Create a hexahedral mesh on the box
+# Create a hexahedral mesh on the box
hexa = smesh.Mesh(box, "Box : hexahedrical mesh")
# create a Regular 1D algorithm for edges
f1 = faces[2]
f2 = faces[0]
# face opposite to f2
-f2opp = faces[1]
+f2opp = geompy.GetOppositeFace( box, f2 )
# Get vertices used to specify how to associate sides of faces at projection
[v1F1, v2F1] = geompy.SubShapeAll(f1, geompy.ShapeType["VERTEX"])[:2]
src_mesh.Segment().NumberOfSegments(9,10)
src_mesh.Quadrangle()
src_mesh.Hexahedron()
-src_mesh.Triangle(f1) # triangular sumbesh
+src_mesh.Triangle(f1) # triangular sub-mesh
src_mesh.Compute()
geompy.addToStudyInFather( box, Face_1, 'Face_1' )
geompy.addToStudyInFather( box, Face_2, 'Face_2' )
-# Make the source mesh with Netgem2D
+
+# Make the source mesh triangulated by MEFISTO
src_mesh = smesh.Mesh(Face_1, "Source mesh")
src_mesh.Segment().NumberOfSegments(15)
src_mesh.Triangle()
# Create face from the wire and add to study
Face = geompy.MakeSketcher("Sketcher:F 0 0:TT 20 0:R 90:C 20 90:WF", [0, 0, 0, 1, 0, 0, 0, 0, 1])
geompy.addToStudy(Face,"Face")
-edges = geompy.SubShapeAllSorted(Face, geompy.ShapeType["EDGE"])
-circle, radius1, radius2 = edges
+circle, radius1, radius2 = geompy.SubShapeAllSorted(Face, geompy.ShapeType["EDGE"])
geompy.addToStudyInFather(Face, radius1,"radius1")
geompy.addToStudyInFather(Face, radius2,"radius2")
geompy.addToStudyInFather(Face, circle,"circle")
# create mesh
from SMESH_mechanic import *
+print
# create a group of all faces (quadrangles) generated on sub_face3
-faces_on_face3 = mesh.MakeGroup("faces_on_face3", SMESH.FACE, SMESH.FT_BelongToGeom,'=',sub_face3)
-print "There are %s quadrangles generated on '%s' and included in the group '%s'" % ( faces_on_face3.Size(), sub_face3.GetName(), faces_on_face3.GetName() )
+quads_on_face3 = mesh.MakeGroup("quads_on_face3", SMESH.FACE, SMESH.FT_BelongToGeom,'=',sub_face3)
+print "There are %s quadrangles generated on '%s' and included in the group '%s'" % ( quads_on_face3.Size(), sub_face3.GetName(), quads_on_face3.GetName() )
# create a group of all the rest quadrangles, generated on other faces by combining 2 criteria:
-# - negated FT_BelongToMeshGroup to select elements not included in faces_on_face3
+# - negated FT_BelongToMeshGroup to select elements not included in quads_on_face3
# - FT_ElemGeomType to select quadrangles
-not_on_face3 = smesh.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=',faces_on_face3, SMESH.FT_LogicalNOT )
+not_on_face3 = smesh.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=',quads_on_face3, SMESH.FT_LogicalNOT )
quadrangles = smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_QUADRANGLE )
rest_quads = mesh.MakeGroupByCriteria("rest_quads", [ not_on_face3, quadrangles ])
# create mesh
from SMESH_mechanic import *
-# get faces with aspect ratio > 1.5
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 1.5)
+# get faces with aspect ratio > 2.5
+filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 2.5)
ids = mesh.GetIdsFromFilter(filter)
+print "Number of faces with aspect ratio > 2.5:", len(ids)
+
+# get faces with aspect ratio > 1.5
+filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, '>', 1.5, mesh=mesh)
+ids = filter.GetIDs()
print "Number of faces with aspect ratio > 1.5:", len(ids)
# copy the faces with aspect ratio > 1.5 to another mesh;
# this demostrates that a filter can be used where usually a group or sub-mesh is acceptable
-filter.SetMesh( mesh.GetMesh() )
+filter.SetMesh( mesh.GetMesh() ) # - actually non necessary as mesh is set at filter creation
mesh2 = smesh.CopyMesh( filter, "AR > 1.5" )
print "Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces()
--- /dev/null
+# Entity type
+
+# create a mesh
+from SMESH_mechanic import *
+
+# make the mesh quadratic
+mesh.ConvertToQuadratic()
+# make some elements bi-quadratic
+for face in SubFaceL[: len(SubFaceL)/2]:
+ mesh.ConvertToQuadratic( theSubMesh=mesh.Group( face ), theToBiQuad=True )
+
+# get triangles with 7 nodes
+filter_tri = smesh.GetFilter(SMESH.FACE, SMESH.FT_EntityType,'=', SMESH.Entity_BiQuad_Triangle )
+ids_tri = mesh.GetIdsFromFilter(filter_tri)
+print "Number of bi-quadratic triangles:", len(ids_tri)
--- /dev/null
+# Ball diameter
+
+# create a mesh
+from SMESH_mechanic import *
+
+# create several balls with increasing diameter
+for i in range(1,10):
+ diameter = float( i )
+ mesh.AddBall( i, diameter )
+ pass
+
+# get balls with diameter > 5.
+diam_filter = smesh.GetFilter(SMESH.BALL, SMESH.FT_BallDiameter,'>', 5. )
+ids = mesh.GetIdsFromFilter( diam_filter )
+print "Number of balls with diameter > 5:", len(ids)
--- /dev/null
+# Elements of a domain
+
+import salome, SMESH
+salome.salome_init()
+from salome.geom import geomBuilder
+geompy = geomBuilder.New(salome.myStudy)
+from salome.smesh import smeshBuilder
+smesh = smeshBuilder.New(salome.myStudy)
+
+# create two boxes to have two domains in the mesh
+
+box1 = geompy.MakeBoxDXDYDZ( 100,100,100 )
+box2 = geompy.MakeTranslation( box1, 200, 0, 0 )
+boxes = geompy.MakeCompound( [box1, box2] )
+box1, box2 = geompy.SubShapeAll( boxes, geompy.ShapeType["SHAPE"], "box")
+
+vertex = geompy.SubShape( box1, geompy.ShapeType["VERTEX"], [1] )
+
+# create a mesh
+
+mesh = smesh.Mesh( boxes )
+mesh.Segment(box1).NumberOfSegments( 5 ) # to have different nb of elements on the boxes
+mesh.Segment(box2).NumberOfSegments( 10 )
+mesh.Quadrangle()
+mesh.Hexahedron()
+mesh.Compute()
+
+# Create filters with FT_ConnectedElements criterion by pointing a domain in different ways:
+
+# using point coordinates in box_1
+nodeFilter = smesh.GetFilter( SMESH.NODE, SMESH.FT_ConnectedElements, "=", "1.,2,10", mesh=mesh )
+print "Nb. nodes in box_1:", len( nodeFilter.GetIDs())
+
+# using point coordinates in box_2
+edgeFilter = smesh.GetFilter( SMESH.EDGE, SMESH.FT_ConnectedElements, "=", [202,1,1 ], mesh=mesh )
+print "Nb. segments in box_2:", len( edgeFilter.GetIDs())
+
+# using a geom vertex of box_1
+faceFilter = smesh.GetFilter( SMESH.FACE, SMESH.FT_ConnectedElements, "=", vertex, mesh=mesh )
+print "Nb. faces in box_1:", len( edgeFilter.GetIDs())
+
+# using node ID in box_2
+voluFilter = smesh.GetFilter( SMESH.VOLUME, SMESH.FT_ConnectedElements, "=", 10, mesh=mesh )
+print "Nb. volumes in box_2:", len( voluFilter.GetIDs())
+
organization:<ol>
<li><b>Standalone group</b> is a static set of mesh entities. Its
contents can be explicitly controlled by the user. Upon removal of
- the entities included into the group, the group becomes empty and
- its content can be restored only manually. Hence it is
- reasonable to create standalone groups when the mesh generation is
- finished and mesh quality is verified.
+ the entities included into the group, e.g. due to modification of
+ meshing parameter, the group becomes empty and its content can be
+ restored only manually. Hence it is reasonable to create standalone
+ groups when the mesh generation is finished and mesh quality is
+ verified.
\warning Creation and edition of large standalone groups in
\ref creating_groups_page "Create group" dialog using manual edition
is problematic due to poor performance of the dialog.</li>
established at group construction and cannot be changed. The group
contents are always updated automatically, hence the
group can be created even before mesh elements generation.</li>
-<li><b>Group on filter</b> encapsulates a filter, which is used to
- select mesh entities composing the group from the whole
- mesh. Criteria of the filter can be changed at any time. The
- group contents are always updated automatically, hence
- the group can be created even before mesh elements generation.</li>
+<li><b>Group on filter</b> encapsulates a \ref filters_page "filter",
+ which is used to select mesh entities composing the group from the
+ whole mesh. Criteria of the filter can be changed at any time. The
+ group contents are always updated automatically, hence the group can
+ be created even before mesh elements generation.</li>
</ol>
The group on geometry and group on filter can be converted to
a standalone group.
filters mesh entities (nodes or elements) included in a mesh group
defined by threshold value:
-- element type can be any entity type, from \a SMESH.NODE to \a SMESH.VOLUME
+- element type can be any, from \a SMESH.NODE to \a SMESH.BALL
- functor type should be \a SMESH.FT_BelongToMeshGroup
- threshold is mesh group object
filters mesh entities (nodes or elements) which all nodes lie on the
shape defined by threshold value:
-- element type can be any entity type, from \a SMESH.NODE to \a SMESH.VOLUME
+- element type can be any, from \a SMESH.NODE to \a SMESH.BALL
- functor type should be \a SMESH.FT_BelongToGeom
- threshold is geometrical object
- tolerance is a distance between a node and the geometrical object;
filters mesh entities (nodes or elements) at least one node of which lies on the
shape defined by threshold value:
-- element type can be any entity type, from \a SMESH.NODE to \a SMESH.VOLUME
+- element type can be any, from \a SMESH.NODE to \a SMESH.BALL
- functor type should be \a SMESH.FT_LyingOnGeom
- threshold is geometrical object
- tolerance is a distance between a node and the geometrical object;
filters mesh entities (nodes or elements) which all nodes belong to the
plane defined by threshold value with the given tolerance:
-- element type can be: \a SMESH.NODE, \a SMESH.EDGE, \a SMESH.FACE
+- element type can be any except \a SMESH.VOLUME
- functor type should be \a SMESH.FT_BelongToPlane
- threshold is geometrical object (plane)
- default tolerance is 1.0e-7
filters mesh entities (nodes or elements) which all nodes belong to the
cylindrical face defined by threshold value with the given tolerance:
-- element type can be: \a , \a SMESH.EDGE, \a SMESH.FACE
+- element type can be any except \a SMESH.VOLUME
- functor type should be \a SMESH.FT_BelongToCylinder
- threshold is geometrical object (cylindrical face)
- default tolerance is 1.0e-7
filters mesh entities (nodes or elements) which all nodes belong to the
arbitrary surface defined by threshold value with the given tolerance:
-- element type can be: \a SMESH.NODE, \a SMESH.EDGE, \a SMESH.FACE
+- element type can be any except \a SMESH.VOLUME
- functor type should be \a SMESH.FT_BelongToGenSurface
- threshold is geometrical object (arbitrary surface)
- default tolerance is 1.0e-7
filters mesh entities elements (nodes or elements) according to the
specified identifiers range:
-- element type can be any entity type, from \a SMESH.NODE to \a SMESH.VOLUME
+- element type can be any, from \a SMESH.NODE to \a SMESH.BALL
- functor type is \a SMESH.FT_RangeOfIds
- threshold is string listing required IDs and/or ranges of IDs, e.g."1,2,3,50-60,63,67,70-78"
\section filter_linear_or_quadratic Linear / quadratic
filters linear / quadratic mesh elements:
-- element type should be any element type, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME
+- element type should be either \a SMESH.EDGE, \a SMESH.FACE or \a SMESH.VOLUME
- functor type is \a SMESH.FT_LinearOrQuadratic
- threshold is not required
- if unary operator is set to SMESH.FT_LogicalNOT, the quadratic
\section filter_group_color Group color
filters mesh entities, belonging to the group with the color defined by the threshold value.
-- element type can be any entity type, from \a SMESH.NODE to \a SMESH.VOLUME
+- element type can be any, from \a SMESH.NODE to \a SMESH.BALL
- functor type is \a SMESH.FT_GroupColor
- threshold should be of SALOMEDS.Color type
filters mesh elements by the geometric type defined with the threshold
value. The list of available geometric types depends on the element
entity type.
-- element type should be any element type, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME
+- element type can be any, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME, etc.
- functor type should be \a SMESH.FT_ElemGeomType
-- threshold is of smesh.GeometryType value
+- threshold is either of smesh.GeometryType values. Type \a SMESH.GeometryType._items in the Python Console to see all geometric types.
\tui_script{filters_ex35.py}
+\section filter_entity_type Entity type
+
+filters mesh elements by the geometric type and number of nodes.
+- element type can be any, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME, etc.
+- functor type should be \a SMESH.FT_EntityType
+- threshold is either of SMESH.EntityType values. Type \a SMESH.EntityType._items in the Python Console to see all entity types.
+
+\tui_script{filters_ex37.py}
+
+\section filter_ball_diam Ball diameter
+
+filters ball elements by diameter.
+- element type should be \a SMESH.BALL
+- functor type should be \a SMESH.FT_BallDiameter
+- threshold is floating point value (ball diameter)
+
+\tui_script{filters_ex38.py}
+
+\section filter_domain Elements of a domain
+
+filters elements of a specified domain.
+- element type can be any, e.g.: \a SMESH.EDGE, \a SMESH.FACE, \a SMESH.VOLUME, etc.
+- functor type should be \a SMESH.FT_ConnectedElements
+- threshold is either (1) node ID or (2) geometrical vertex or (3) 3 coordinates of a point.
+
+\tui_script{filters_ex39.py}
+
\section combining_filters How to combine several criteria into a filter?
Several criteria can be combined into a filter.
// =========================================================================================
SMESHGUI_MeshOrderDlg::SMESHGUI_MeshOrderDlg(QWidget* theParent)
-: SMESHGUI_Dialog( theParent, false, false, OK | Cancel | Help )
+: SMESHGUI_Dialog( theParent, true, false, OK | Cancel | Help )
{
setWindowTitle( tr( "SMESH_MESHORDER_TITLE") );
QFrame* main = mainFrame();
{
// set SMESH.GeometryType instead of a numerical Threshold
const int nbTypes = SMESH::Geom_LAST;
- const char* types[nbTypes] = {
+ const char* types[] = {
"Geom_POINT", "Geom_EDGE", "Geom_TRIANGLE", "Geom_QUADRANGLE", "Geom_POLYGON",
"Geom_TETRA", "Geom_PYRAMID", "Geom_HEXA", "Geom_PENTA", "Geom_HEXAGONAL_PRISM",
"Geom_POLYHEDRA", "Geom_BALL" };
{
// set SMESH.EntityType instead of a numerical Threshold
const int nbTypes = SMESH::Entity_Last;
- const char* types[nbTypes] = {
+ const char* types[] = {
"Entity_Node", "Entity_0D", "Entity_Edge", "Entity_Quad_Edge",
"Entity_Triangle", "Entity_Quad_Triangle", "Entity_BiQuad_Triangle",
"Entity_Quadrangle", "Entity_Quad_Quadrangle", "Entity_BiQuad_Quadrangle",