\page constructing_meshes_page Constructing meshes
-\n Construction of a mesh consists of:
+\n Construction of a mesh on some geometry consists of:
<ul>
-<li>Selecting a geometrical object for meshing</li>
-<li>Applying \subpage basic_meshing_algos_page "meshing algorithms" and
-\subpage about_hypo_page "hypotheses" which will be used at computation of
-this mesh.</li>
+ <li> \ref create_mesh_anchor "Creating of a mesh object"</li>
+ <li> \ref evaluate_anchor "Evaluating mesh size"</li>
+ <li> \ref preview_anchor "Previewing the mesh"</li>
+ <li> \ref submesh_order_anchor "Changing submesh priority"</li>
+ <li> \ref compute_anchor "Computing the mesh"</li>
</ul>
+Mesh can be \ref use_existing_anchor "computed using your own meshing algorithms"
+written in Python.
+
+\anchor create_mesh_anchor
+<h2>Creation of a mesh object</h2>
<em>To construct a mesh:</em>
<ol>
-<li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
-Mesh"</em> button in the toolbar.
-
-\image html image32.png
-<center><em>"Create Mesh" button</em></center>
-
-The following dialog box will appear:
-
-\image html createmesh-inv.png
-</li>
-<li>For example, you need to mesh a 3d object.
-\n First, type the name for your mesh in the "Name" box, by default,
-it is "Mesh_1". Then select the object you wish to mesh in the Object
-Browser and click the "Add" button (if name of the object not yet
-appeared in \b Geometry field).
-
-\image html image120.png
-<center><em>"Add" button</em></center>
-
-Now you can define 1d Algorithm and 1d Hypotheses, which will be
-applied to the edges of your object. (Note that any object has edges,
-even if their existence is not apparent, for example, a sphere has 4
-edges). Click the <em>"Add Hypothesis"</em> button to add a
-hypothesis.
-
-\image html image121.png
-<center><em>"Add Hypothesis" button</em></center>
+ <li>Select a geometrical object for meshing.</li>
+ <li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
+ Mesh"</em> button in the toolbar.
+
+ \image html image32.png
+ <em>"Create Mesh" button</em>
+
+ The following dialog box will appear:
+
+ \image html createmesh-inv.png
+ <br>
+ </li>
+ <li>Apply \subpage basic_meshing_algos_page "meshing algorithms" and
+ \subpage about_hypo_page "hypotheses" which will be used at computation of
+ this mesh.
+
+ For example, you need to mesh a 3D object.
+
+ First, type the name for your mesh in the \b Name box, by default,
+ it is "Mesh_1". Then select the geometrical object you wish to
+ mesh in the Object Browser and click "Select" button near \b Geometry
+ field (if name of the object not yet appeared in \b Geometry field).
+
+ \image html image120.png
+ <em>"Select" button</em>
+
+ Now you can define 3D Algorithm and 3D Hypotheses, which will be
+ applied to solids of your geometrical object. Click the <em>"Add
+ Hypothesis"</em> button to add a hypothesis.
+
+ \image html image121.png
+ <em>"Add Hypothesis" button</em>
+
+ Click the <em>"Edit Hypothesis"</em> button to change values for the
+ current hypothesis.
+
+ \image html image122.png
+ <em>"Edit Hypothesis" button</em>
+
+ Most standard 2D and 3D algorithms can work without hypotheses
+ using some default parameters. The use of additional hypotheses
+ is optional (i.e. you may leave "None" in this box).
+
+ Proceed in the same way with 2D and 1D Algorithms and Hypotheses that
+ will be used to mesh faces and edges of your geometry. (Note
+ that any object has edges, even if their existence is not
+ apparent, for example, a sphere has 4 edges). Note that the
+ choice of hypotheses and of an algorithm of lower dimension depends on
+ the algorithm.
+
+ Some algorithms generate mesh of several dimensions while others, of
+ only one dimension. In the latter case there must be one Algorithm and zero or several
+ Hypotheses for each dimension of your object, otherwise you will
+ not get any mesh at all. Of course, if you wish to mesh a face,
+ which is a 2D object, you don't need to define 3D Algorithm and
+ Hypotheses.
+
+ In the <b>Object Browser</b> the structure of the new mesh will be
+ displayed as follows:
+
+ \image html image88.jpg
+
+ It contains:
+ <ul>
+ <li>a reference to the geometrical object on the basis of
+ which the mesh has been constructed;</li>
+ <li><b>Applied hypotheses</b> folder containing the references
+ to the hypotheses applied at the construction of the mesh;</li>
+ <li><b>Applied algorithms</b> folder containing the references
+ to the algorithms applied at the construction of the mesh.</li>
+ </ul>
+
+ There is an alternative way to assign Algorithms and Hypotheses by
+ clicking <b>Assign a set of hypotheses</b> button and selecting among
+ pre-defined sets of hypotheses. In addition to the standard
+ sets of hypotheses, it is possible to create custom sets by editing
+ CustomMeshers.xml file located in the home directory. CustomMeshers.xml
+ file must describe sets of hypotheses in the
+ same way as ${SMESH_ROOT_DIR}/share/salome/resources/smesh/StdMeshers.xml
+ file does (sets of hypotheses are enclosed between <hypotheses-set-group>
+ tags).
+
+ \image html hypo_sets.png
+ List of sets of hypotheses: <em>[custom]</em>
+ automatically added to the sets defined by the user
+ </li>
+</ol>
-Click the <em>"Edit Hypothesis"</em> button to define values for the
-current hypothesis.
+Consider trying a sample script for construction of a mesh from our
+\ref tui_creating_meshes_page "TUI Scripts" section.
-\image html image122.png
-<center><em>"Edit Hypothesis" button</em></center>
+\anchor evaluate_anchor
+<h2>Evaluating mesh size</h2>
-The use of additional hypotheses is optional (i.e. you may leave
-"None" in this box).
+After the mesh object is created and all hypotheses are assigned and
+before \ref compute_anchor "Compute" operation, it is possible to
+calculate the eventual mesh size. For this, select the mesh in
+the <b>Object Browser</b> and from the \b Mesh menu select \b
+Evaluate. The result of evaluation will be displayed in the following
+information box:
-Proceed in the same way with 2d and 3d Algorithms and Hypotheses, note
-that the choice of hypotheses depends on the algorithm. There must be
-one Algorithm and zero or several Hypotheses for each dimension of your
-object (most standard 2D and 3D algorithms can work without
-hypotheses using some default parameters),
-otherwise you will not get any mesh at all. Of course, if you
-wish to mesh a face, which is a 2d object, you don't need to define 3d
-Algorithm and Hypotheses.
-\n In the <b>Object Browser</b> the structure of the new mesh will be
-displayed as follows:
+\image html mesh_evaluation_succeed.png
-\image html image88.jpg
+\anchor preview_anchor
+<h2>Previewing the mesh</h2>
-It contains:
-<ul>
-<li>a reference to the geometrical object on the basis of which the mesh has been constructed;</li>
-<li><b>Applied hypotheses</b> folder containing the references to the
-hypotheses applied to the construction of the mesh;</li>
-<li><b>Applied algorithms</b> folder containing the references to the
-algorithms applied to the construction of the mesh.</li>
-</ul>
-<br>
-There is an alternative way to create a mesh on an object simply by
-clicking <b>Assign a set of hypotheses</b> button and selecting among
-pre-defined sets of hypotheses. In addition to the standard
-sets of hypotheses, it is possible to create custom sets by editing
-CustomMeshers.xml file located in the home directory. CustomMeshers.xml
-file must describe sets of hypotheses in the
-same way as ${SMESH_ROOT_DIR}/share/salome/resources/smesh/StdMeshers.xml
-file does (sets of hypotheses are enclosed between <hypotheses-set-group>
-tags).
-\image html hypo_sets.png
-<center>List of sets of hypotheses: <em>[custom]</em> is automatically added to the sets defined
-by the user</center>
-</li>
-
-\anchor preview_mesh_anchor
-
-<li> After the mesh object is created and all hypotheses are assigned and
-before the mesh computation, it is possible to see the mesh preview.
+Before \ref compute_anchor "the mesh computation", it is also possible
+to see the mesh preview.
For this, select the mesh in the Object Browser. From the \b Mesh menu
-select \b Preview or click "Preview" button in the
-toolbar or activate "Preview" item from the pop-up menu.
+select \b Preview or click "Preview" button in the toolbar or activate
+"Preview" item from the pop-up menu.
\image html mesh_precompute.png
-<center><em>"Preview" button</em></center>
+<em>"Preview" button</em>
Select <b>1D mesh</b> or <b>2D mesh</b> preview mode in the Preview dialog.
-
\image html preview_mesh_1D.png "1D mesh preview shows nodes computed on geometry edges"
-
+<br>
\image html preview_mesh_2D.png "2D mesh preview shows edge mesh elements, computed on geometry faces"
<b>Compute</b> button computes the whole mesh.
\image html preview_tmp_data.png
-These elenents can be reused in the next mesh computation.
-</li>
-
-
-<li>It is equally possible to skip the Preview and \b Compute the mesh
-after the hypotheses are assigned. For this, select your mesh in the <b>Object
-Browser</b>. From the \b Mesh menu select \b Compute or click "Compute" button of the
-toolbar.
-
-\image html image28.png
-<center><em>"Compute" button</em></center>
-
-The Mesh Computation information box appears.
-
-\image html meshcomputationsucceed.png
-
-If the mesh computation failed, the information about the cause of the
-failure is provided.
-
-\image html meshcomputationfail.png
-
-After you select the error, <b>Show Sub-shape</b> button allows
-visualizing the geometrical entity that causes it.
-
-\image html failed_computation.png "Example of the invalid input mesh"
-
-\note Mesh Computation Information box does not appear if you set
-"Mesh computation/Show a computation result notification" preference
-to the "Never" value. This option gives the possibility to control mesh
-computation reporting. There are the following possibilities: always
-show information box, only if an error occurs or never.
-By default, the information box is always shown after mesh computation operation.
-
-<b>Publish Sub-shape</b> button publishes the sub-shape, whose meshing
-failed, in GEOM component as a child of the mesh geometry, which
-allows analyzing the problem geometry and creating a submesh on it in
-order to locally tune hypotheses.
-
-<b>NOTE</b> It is possible to define a 1D or a 2D mesh in a
-python script and then use such submeshes in the construction of a 3D
-mesh. For this, there exist two algorithms: <b>Use existing edges</b> and <b>Use
-existing faces</b>. They are not entirely usable from the GUI, so a
-mesh created using these algorithms should be exported into a python
-script, edited and then imported into the GUi.
-
-<li>It is possible to calculate the eventual mesh size
-before \b Compute operation. For this, select the mesh in the <b>Object
-Browser</b> and from the \b Mesh menu select \b Evaluate. The result of
-evaluation will be displayed in the following information box:
-
-\image html mesh_evaluation_succeed.png
+These elements can be kept in the mesh.
-</li>
+\anchor submesh_order_anchor
+<h2>Changing submesh priority</h2>
-\anchor mesh_order_anchor
-
-<li>
-If the mesh contains concurrent submeshes, it is possible to change
-the priority of their computation, i.e. to change the priority of
-applying algorithms to the shared sub-shapes of the Mesh shape.</li>
+If the mesh contains concurrent \ref constructing_submeshes_page "submeshes",
+it is possible to change the priority of their computation, i.e. to
+change the priority of applying algorithms to the shared sub-shapes of
+the Mesh shape.
<em>To change submesh priority:</em>
-<li>Choose "Change submesh priority" from the Mesh menu or a popup menu. The opened dialogue
-shows a list of submeshes in the order of their priority.
+Choose "Change submesh priority" from the Mesh menu or a pop-up
+menu. The opened dialog shows a list of submeshes in the order of
+their priority.
There is an example of submesh order modifications of the Mesh created on a Box
shape. The main Mesh object:
<ul>
-<li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=20</li>
-<li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>Max Element Area</b>
-</li>
+ <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=20</li>
+ <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>Max Element Area</b>
+ </li>
</ul>
-The first submesh object <b>Submesh_1</b> created on <b>Face_1</b>
-is:
+The first submesh object <b>Submesh_1</b> created on <b>Face_1</b> is:
<ul>
-<li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=4</li>
-<li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
+ <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=4</li>
+ <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
</ul>
-The second submesh object <b>Submesh_2</b> created on <b>Face_2</b>
-is:
+The second submesh object <b>Submesh_2</b> created on <b>Face_2</b> is:
<ul>
-<li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=8</li>
-<li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
+ <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=8</li>
+ <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
</ul>
-And the last submesh object <b>Submesh_3</b> created on <b>Face_3</b>
-is:
+And the last submesh object <b>Submesh_3</b> created on <b>Face_3</b> is:
<ul>
-<li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=12</li>
-<li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
+ <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=12</li>
+ <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
</ul>
-The submeshes become concurrent if they share sub-shapes that can be meshed
-with different algorithms (or different hypothesises).
-In the example, we have three submeshes with concurrent algorithms,
-because they have different hypotheses.
+The sub-meshes become concurrent if they share sub-shapes that can be
+meshed with different algorithms (or different hypothesises). In the
+example, we have three submeshes with concurrent algorithms, because
+they have different hypotheses.
The first mesh computation is made with:
+<center>
\image html mesh_order_123.png
-<center><em>"Mesh order SubMesh_1, SubMesh_2, SubMesh_3"</em></center>
+<em>"Mesh order SubMesh_1, SubMesh_2, SubMesh_3"</em></center>
+<center>
\image html mesh_order_123_res.png
-<center><em>"Result mesh with order SubMesh_1, SubMesh_2, SubMesh_3 "</em></center>
+<em>"Result mesh with order SubMesh_1, SubMesh_2, SubMesh_3 "</em></center>
The next mesh computation is made with:
+<center>
\image html mesh_order_213.png
-<center><em>"Mesh order SubMesh_2, SubMesh_1, SubMesh_3"</em></center>
+<em>"Mesh order SubMesh_2, SubMesh_1, SubMesh_3"</em></center>
+<center>
\image html mesh_order_213_res.png
-<center><em>"Result mesh with order SubMesh_2, SubMesh_1, SubMesh_3 "</em></center>
+<em>"Result mesh with order SubMesh_2, SubMesh_1, SubMesh_3 "</em></center>
And the last mesh computation is made with:
+<center>
\image html mesh_order_321.png
-<center><em>"Mesh order SubMesh_3, SubMesh_2, SubMesh_1"</em></center>
-\image html mesh_order_321_res.png
-<center><em>"Result mesh with order SubMesh_3, SubMesh_2, SubMesh_1 "</em></center>
+<em>"Mesh order SubMesh_3, SubMesh_2, SubMesh_1"</em></center>
+<center>\image html mesh_order_321_res.png
+<em>"Result mesh with order SubMesh_3, SubMesh_2, SubMesh_1 "</em></center>
As we can see, each mesh computation has a different number of result
elements and a different mesh discretisation on the shared edges (the edges
that are shared between <b>Face_1</b>, <b>Face_2</b> and <b>Face_3</b>)
Additionally, submesh priority (the order of applied algorithms) can
-be modified not only in a separate dialog box, but also in the
-<b>Preview</b>. This helps to preview different mesh results,
-modifying the order of submeshes.
+be modified not only in a separate dialog box, but also in
+the <b>Preview</b>. This helps to preview different mesh results,
+modifying the order of submeshes.
+<center>
\image html mesh_order_preview.png
-<center><em>"Preview with submesh priority list box"</em></center>
+<em>"Preview with submesh priority list box"</em></center>
-If there are no concurrent submeshes under the Mesh object, the user will see the
-following information.
+If there are no concurrent submeshes under the Mesh object, the user
+will see the following information.
+<center>
\image html mesh_order_no_concurrent.png
-<center><em>"No concurrent submeshes detected"</em></center>
+<em>"No concurrent submeshes detected"</em></center>
-</ol>
-Consider trying a sample script for construction of a mesh from our
-\ref tui_creating_meshes_page "TUI Scripts" section.
+\anchor compute_anchor
+<h2>Computing the mesh</h2>
+
+It is equally possible to skip \ref evaluate_anchor "the Evaluation"
+and \ref preview_anchor "the Preview" and to \b Compute the mesh after
+the hypotheses are assigned. For this, select your mesh in
+the <b>Object Browser</b>. From the \b Mesh menu select \b Compute or
+click "Compute" button of the toolbar.
+
+\image html image28.png
+<em>"Compute" button</em>
+
+The Mesh Computation information box appears.
+
+\image html meshcomputationsucceed.png
+
+If the mesh computation failed, the information about the cause of the
+failure is provided.
+
+\image html meshcomputationfail.png
+
+After you select the error, <b>Show Sub-shape</b> button allows
+visualizing in magenta the geometrical entity that causes it.
+
+\image html failed_computation.png
+<em>3D algorithm failed to compute mesh on a box shown using <b>Show
+ Sub-shape</b> button</em>
+
+
+\note Mesh Computation Information box does not appear if you set
+"Mesh computation/Show a computation result notification" preference
+to the "Never" value. This option gives the possibility to control mesh
+computation reporting. There are the following possibilities: always
+show information box, only if an error occurs or never.
+By default, the information box is always shown after mesh computation operation.
+
+<b>Publish Sub-shape</b> button publishes the sub-shape, whose meshing
+failed, in GEOM component as a child of the mesh geometry, which
+allows analyzing the problem geometry and creating a submesh on it in
+order to locally tune hypotheses.
+
+If a cause of failure is an invalid input mesh and the algorithm has
+provided information on what mesh entities are bad <b>Show bad Mesh</b>
+button appears in the dialog. Clicked, it shows bad mesh entities in
+the Viewer in magenta. Sometimes the shown mesh entities are too small
+or/and hidden by other mesh elements, to see them it can be helpful to
+switch the mesh to Wireframe visualization mode or to switch off
+visualization of faces and volumes (if any).
+
+\anchor use_existing_anchor
+<h2>"Use existing edges" and "Use existing faces" algorithms</h2>
+
+It is possible to create an 1D or a 2D mesh in a python script
+(using <em>AddNode, AddEdge</em> and <em>AddFace</em> commands) and
+then use such sub-meshes in the construction of a 2D or a 3D mesh. For
+this, there exist two algorithms: <b>Use existing edges</b> and <b>Use
+ existing faces</b>. Scenario of their usage is following. For
+example, you want to use standard algorithms to generate 1D and 3D
+meshes and to create 2D mesh by your python code. Then you
+<ul>
+ <li> create a mesh object, assign an 1D algorithm,</li>
+ <li> invoke \b Compute command, which computes an 1D mesh,</li>
+ <li> assign <b>Use existing faces</b> and a 3D algorithm,</li>
+ <li> run your python code, which creates a 2D mesh,</li>
+ <li> invoke \b Compute command, which computes a 3D mesh.</li>
+</ul>
+
+Consider trying a sample script demonstrating usage of
+\ref tui_use_existing_faces "Use existing faces" algorithm for
+construction of a 2D mesh using Python commands.
+
+\image html use_existing_face_sample_mesh.png
+<em> Mesh computed by \ref tui_use_existing_faces "the sample script"
+ shown in a Shrink mode.</em>
*/
--- /dev/null
+/*!
+
+\page tui_use_existing_faces Use existing faces
+
+This sample demonstrates how to use <b>Use existing faces</b> algorithm,
+which is actulally just a stub allowing to use your own 2D algoritm
+implemented in Python.
+
+
+\code
+import smesh, geompy
+import numpy as np
+
+# define my 2D algorithm
+def my2DMeshing( geomFace ):
+
+ # find gravity center of geomFace
+ gcXYZ = geompy.PointCoordinates( geompy.MakeCDG( geomFace ))
+
+ # define order and orientation of edges
+ sortedEdges = []
+ geomEdges = geompy.SubShapeAll( geomFace, geompy.ShapeType["EDGE"])
+ sortedEdges.append(( geomEdges.pop(0), True ))
+ while geomEdges:
+ prevEdge_rev = sortedEdges[ -1 ]
+ prevVV = geompy.SubShapeAll( prevEdge_rev[0], geompy.ShapeType["VERTEX"])
+ prevV2 = prevVV[ prevEdge_rev[1] ]
+ found = False
+ for iE in range( len( geomEdges )):
+ v1,v2 = geompy.SubShapeAll( geomEdges[ iE ], geompy.ShapeType["VERTEX"])
+ same1,same2 = [( geompy.MinDistance( prevV2, v ) < 1e-7 ) for v in [v1,v2] ]
+ if not same1 and not same2: continue
+ sortedEdges.append(( geomEdges.pop( iE ), same1 ))
+ found = True
+ break
+ assert found
+ sortedEdges.reverse()
+
+ # put nodes on edges in a right order
+ nodes = []
+ for edge, isForward in sortedEdges:
+ v1,v2 = geompy.SubShapeAll( edge, geompy.ShapeType["VERTEX"])
+ edgeNodes = mesh.GetSubMeshNodesId( v2, all=False ) + \
+ mesh.GetSubMeshNodesId( edge, all=False ) + \
+ mesh.GetSubMeshNodesId( v1, all=False )
+ if not isForward: edgeNodes.reverse()
+ nodes.extend( edgeNodes[:-1] )
+
+ # create nodes inside the geomFace
+ r1 = 0.6
+ r2 = 1 - r1
+ nodesInside = []
+ for n in nodes:
+ nXYZ = mesh.GetNodeXYZ( n )
+ newXYZ = np.add( np.multiply( r1, gcXYZ ), np.multiply( r2, nXYZ ))
+ nodesInside.append( mesh.AddNode( newXYZ[0], newXYZ[1], newXYZ[2] ))
+ mesh.SetNodeOnFace( nodesInside[-1], geomFace, 0, 0 )
+
+ # find out orientation of faces to create
+ # geomFace normal
+ faceNorm = geompy.GetNormal( geomFace )
+ v1,v2 = [ geompy.PointCoordinates( v ) \
+ for v in geompy.SubShapeAll( faceNorm, geompy.ShapeType["VERTEX"]) ]
+ faceNormXYZ = np.subtract( v2, v1 )
+ outDirXYZ = np.subtract( v1, [ 50, 50, 50 ] )
+ if np.dot( faceNormXYZ, outDirXYZ ) < 0: # reversed face
+ faceNormXYZ = np.multiply( -1., faceNormXYZ )
+ # mesh face normal
+ e1 = np.subtract( mesh.GetNodeXYZ( nodes[0] ), mesh.GetNodeXYZ( nodes[1] ))
+ e2 = np.subtract( mesh.GetNodeXYZ( nodes[0] ), mesh.GetNodeXYZ( nodesInside[0] ))
+ meshNorm = np.cross( e1, e2 )
+ # faces orientation
+ reverse = ( np.dot( faceNormXYZ, meshNorm ) < 0 )
+
+ # create mesh faces
+ iN = len( nodes )
+ while iN:
+ n1, n2, n3, n4 = nodes[iN-1], nodes[iN-2], nodesInside[iN-2], nodesInside[iN-1]
+ iN -= 1
+ if reverse:
+ f = mesh.AddFace( [n1, n2, n3, n4] )
+ else:
+ f = mesh.AddFace( [n4, n3, n2, n1] )
+ # new faces must be assigned to geometry to allow 3D algorithm finding them
+ mesh.SetMeshElementOnShape( f, geomFace )
+
+ if reverse:
+ nodesInside.reverse()
+ polygon = mesh.AddPolygonalFace( nodesInside )
+ mesh.SetMeshElementOnShape( polygon, geomFace )
+
+ return
+
+# create geometry and get faces to mesh with my2DMeshing()
+box = geompy.MakeBoxDXDYDZ( 100, 100, 100 )
+f1 = geompy.SubShapeAll( box, geompy.ShapeType["FACE"])[0]
+f2 = geompy.GetOppositeFace( box, f1 )
+geompy.addToStudy( box, "box" )
+geompy.addToStudy( f1, "f1" )
+geompy.addToStudy( f2, "f2" )
+
+# compute 1D mesh
+mesh = smesh.Mesh( box )
+mesh.Segment().NumberOfSegments( 5 )
+mesh.Compute()
+
+# compute 2D mesh
+mesh.Quadrangle()
+mesh.UseExistingFaces(f1) # UseExistingFaces() allows using my2DMeshing()
+mesh.UseExistingFaces(f2)
+my2DMeshing( f1 )
+my2DMeshing( f2 )
+assert mesh.Compute()
+
+# compute 3D mesh
+mesh.Prism()
+assert mesh.Compute()
+
+\endcode
+
+Resulting mesh:
+\image html use_existing_face_sample_mesh.png
+
+*/