-// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File : SMESH_MeshEditor.idl
-//
#ifndef _SMESH_MESHEDITOR_IDL_
#define _SMESH_MESHEDITOR_IDL_
module SMESH
{
+ enum Bnd_Dimension { BND_2DFROM3D, BND_1DFROM3D, BND_1DFROM2D };
+
/*!
* This interface makes modifications on the Mesh - removing elements and nodes etc.
*/
interface NumericalFunctor;
interface SMESH_MeshEditor
{
+ /*!
+ * \brief Wrap a sequence of ids in a SMESH_IDSource
+ * \param IDsOfElements list of mesh elements identifiers
+ * \return new ID source object
+ */
+ SMESH_IDSource MakeIDSource(in long_array IDsOfElements, in ElementType type);
+
+ /*!
+ * \brief Remove mesh elements specified by their identifiers.
+ * \param IDsOfElements list of mesh elements identifiers
+ * \return \c true if elements are correctly removed or \c false otherwise
+ */
boolean RemoveElements(in long_array IDsOfElements);
+ /*!
+ * \brief Remove mesh nodes specified by their identifiers.
+ * \param IDsOfNodes list of mesh nodes identifiers
+ * \return \c true if nodes are correctly removed or \c false otherwise
+ */
boolean RemoveNodes(in long_array IDsOfNodes);
+ /*!
+ * \brief Remove all orphan nodes.
+ * \return number of removed nodes
+ */
+ long RemoveOrphanNodes();
+
+ /*!
+ * \brief Add new node.
+ * \param x X coordinate of new node
+ * \param y Y coordinate of new node
+ * \param z Z coordinate of new node
+ * \return integer identifier of new node
+ */
long AddNode(in double x, in double y, in double z);
/*!
* \return TRUE in case of success, FALSE otherwise.
*/
boolean TriToQuad (in long_array IDsOfElements,
- in NumericalFunctor Criterion,
- in double MaxAngle);
+ in NumericalFunctor Criterion,
+ in double MaxAngle);
/*!
* \brief Fuse neighbour triangles into quadrangles.
* Behaves like the above method, taking list of elements from \a theObject
*/
boolean TriToQuadObject (in SMESH_IDSource theObject,
- in NumericalFunctor Criterion,
- in double MaxAngle);
+ in NumericalFunctor Criterion,
+ in double MaxAngle);
/*!
* \brief Split quadrangles into triangles.
* \return TRUE in case of success, FALSE otherwise.
*/
boolean QuadToTri (in long_array IDsOfElements,
- in NumericalFunctor Criterion);
+ in NumericalFunctor Criterion);
/*!
* \brief Split quadrangles into triangles.
* Behaves like the above method, taking list of elements from \a theObject
*/
boolean QuadToTriObject (in SMESH_IDSource theObject,
- in NumericalFunctor Criterion);
+ in NumericalFunctor Criterion);
/*!
* \brief Split quadrangles into triangles.
* \return TRUE in case of success, FALSE otherwise.
*/
boolean SplitQuad (in long_array IDsOfElements,
- in boolean Diag13);
+ in boolean Diag13);
/*!
* \brief Split quadrangles into triangles.
* Behaves like the above method, taking list of elements from \a theObject
*/
boolean SplitQuadObject (in SMESH_IDSource theObject,
- in boolean Diag13);
+ in boolean Diag13);
/*!
* Find better splitting of the given quadrangle.
* diagonal is better, 0 if error occurs.
*/
long BestSplit (in long IDOfQuad,
- in NumericalFunctor Criterion);
+ in NumericalFunctor Criterion);
+
+ /*!
+ * \brief Split volumic elements into tetrahedrons
+ * \param elems - elements to split
+ * \param methodFlags - flags passing splitting method:
+ * 1 - split the hexahedron into 5 tetrahedrons
+ * 2 - split the hexahedron into 6 tetrahedrons
+ * 3 - split the hexahedron into 24 tetrahedrons
+ */
+ void SplitVolumesIntoTetra(in SMESH_IDSource elems, in short methodFlags)
+ raises (SALOME::SALOME_Exception);
+
enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
in Smooth_Method Method);
boolean SmoothObject(in SMESH_IDSource theObject,
- in long_array IDsOfFixedNodes,
- in long MaxNbOfIterations,
- in double MaxAspectRatio,
- in Smooth_Method Method);
+ in long_array IDsOfFixedNodes,
+ in long MaxNbOfIterations,
+ in double MaxAspectRatio,
+ in Smooth_Method Method);
boolean SmoothParametric(in long_array IDsOfElements,
in long_array IDsOfFixedNodes,
boolean ConvertFromQuadratic();
+ void ConvertToQuadraticObject(in boolean theForce3d,
+ in SMESH_IDSource theObject)
+ raises (SALOME::SALOME_Exception);
+
+ void ConvertFromQuadraticObject(in SMESH_IDSource theObject)
+ raises (SALOME::SALOME_Exception);
+
void RenumberNodes();
void RenumberElements();
* \param NbOfSteps - number of elements to generate from one element
*/
void RotationSweepObject(in SMESH_IDSource theObject,
- in AxisStruct Axix,
- in double AngleInRadians,
- in long NbOfSteps,
- in double Tolerance);
+ in AxisStruct Axix,
+ in double AngleInRadians,
+ in long NbOfSteps,
+ in double Tolerance);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
* \param NbOfSteps - number of elements to generate from one element
*/
void RotationSweepObject1D(in SMESH_IDSource theObject,
- in AxisStruct Axix,
- in double AngleInRadians,
- in long NbOfSteps,
- in double Tolerance);
+ in AxisStruct Axix,
+ in double AngleInRadians,
+ in long NbOfSteps,
+ in double Tolerance);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
*/
ListOfGroups RotationSweepObject1DMakeGroups(in SMESH_IDSource theObject,
- in AxisStruct Axix,
- in double AngleInRadians,
- in long NbOfSteps,
- in double Tolerance);
+ in AxisStruct Axix,
+ in double AngleInRadians,
+ in long NbOfSteps,
+ in double Tolerance);
/*!
* \brief Genarate dim+1 elements by rotation of the object around axis
* \param theObject - object containing elements to ratate
* \param NbOfSteps - number of elements to generate from one element
*/
void RotationSweepObject2D(in SMESH_IDSource theObject,
- in AxisStruct Axix,
- in double AngleInRadians,
- in long NbOfSteps,
- in double Tolerance);
+ in AxisStruct Axix,
+ in double AngleInRadians,
+ in long NbOfSteps,
+ in double Tolerance);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
*/
ListOfGroups RotationSweepObject2DMakeGroups(in SMESH_IDSource theObject,
- in AxisStruct Axix,
- in double AngleInRadians,
- in long NbOfSteps,
- in double Tolerance);
+ in AxisStruct Axix,
+ in double AngleInRadians,
+ in long NbOfSteps,
+ in double Tolerance);
/*!
* \brief Genarate dim+1 elements by extrusion of elements along vector
* \param IDsOfElements - elements to sweep
in DirStruct StepVector,
in long NbOfSteps);
/*!
- * Generate new elements by extrusion of theElements
+ * Generate new elements by extrusion of theElements
* by StepVector by NbOfSteps
* param ExtrFlags set flags for performing extrusion
* param SewTolerance - uses for comparing locations of nodes if flag
void AdvancedExtrusion(in long_array IDsOfElements,
in DirStruct StepVector,
in long NbOfSteps,
- in long ExtrFlags,
- in double SewTolerance);
+ in long ExtrFlags,
+ in double SewTolerance);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
in double SewTolerance);
void ExtrusionSweepObject(in SMESH_IDSource theObject,
- in DirStruct StepVector,
- in long NbOfSteps);
+ in DirStruct StepVector,
+ in long NbOfSteps);
ListOfGroups ExtrusionSweepObjectMakeGroups(in SMESH_IDSource theObject,
in DirStruct StepVector,
in long NbOfSteps);
void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
- in DirStruct StepVector,
- in long NbOfSteps);
+ in DirStruct StepVector,
+ in long NbOfSteps);
ListOfGroups ExtrusionSweepObject1DMakeGroups(in SMESH_IDSource theObject,
in DirStruct StepVector,
in long NbOfSteps);
void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
- in DirStruct StepVector,
- in long NbOfSteps);
+ in DirStruct StepVector,
+ in long NbOfSteps);
ListOfGroups ExtrusionSweepObject2DMakeGroups(in SMESH_IDSource theObject,
in DirStruct StepVector,
in long NbOfSteps);
};
ListOfGroups ExtrusionAlongPathX(in long_array IDsOfElements,
- in SMESH_IDSource Path,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean LinearVariation,
- in boolean HasRefPoint,
- in PointStruct RefPoint,
- in boolean MakeGroups,
- in ElementType ElemType,
- out Extrusion_Error Error);
+ in SMESH_IDSource Path,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean LinearVariation,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint,
+ in boolean MakeGroups,
+ in ElementType ElemType,
+ out Extrusion_Error Error);
ListOfGroups ExtrusionAlongPathObjX(in SMESH_IDSource theObject,
- in SMESH_IDSource Path,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean LinearVariation,
- in boolean HasRefPoint,
- in PointStruct RefPoint,
- in boolean MakeGroups,
- in ElementType ElemType,
- out Extrusion_Error Error);
+ in SMESH_IDSource Path,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean LinearVariation,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint,
+ in boolean MakeGroups,
+ in ElementType ElemType,
+ out Extrusion_Error Error);
Extrusion_Error ExtrusionAlongPath(in long_array IDsOfElements,
- in SMESH_Mesh PathMesh,
- in GEOM::GEOM_Object PathShape,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in SMESH_Mesh PathMesh,
+ in GEOM::GEOM_Object PathShape,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint);
ListOfGroups ExtrusionAlongPathMakeGroups(in long_array IDsOfElements,
in SMESH_Mesh PathMesh,
in GEOM::GEOM_Object PathShape,
out Extrusion_Error Error);
Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource theObject,
- in SMESH_Mesh PathMesh,
- in GEOM::GEOM_Object PathShape,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in SMESH_Mesh PathMesh,
+ in GEOM::GEOM_Object PathShape,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint);
ListOfGroups ExtrusionAlongPathObjectMakeGroups(in SMESH_IDSource theObject,
in SMESH_Mesh PathMesh,
in GEOM::GEOM_Object PathShape,
out Extrusion_Error Error);
Extrusion_Error ExtrusionAlongPathObject1D(in SMESH_IDSource theObject,
- in SMESH_Mesh PathMesh,
- in GEOM::GEOM_Object PathShape,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in SMESH_Mesh PathMesh,
+ in GEOM::GEOM_Object PathShape,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint);
ListOfGroups ExtrusionAlongPathObject1DMakeGroups(in SMESH_IDSource theObject,
- in SMESH_Mesh PathMesh,
- in GEOM::GEOM_Object PathShape,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean HasRefPoint,
- in PointStruct RefPoint,
- out Extrusion_Error Error);
+ in SMESH_Mesh PathMesh,
+ in GEOM::GEOM_Object PathShape,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint,
+ out Extrusion_Error Error);
Extrusion_Error ExtrusionAlongPathObject2D(in SMESH_IDSource theObject,
- in SMESH_Mesh PathMesh,
- in GEOM::GEOM_Object PathShape,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in SMESH_Mesh PathMesh,
+ in GEOM::GEOM_Object PathShape,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint);
ListOfGroups ExtrusionAlongPathObject2DMakeGroups(in SMESH_IDSource theObject,
- in SMESH_Mesh PathMesh,
- in GEOM::GEOM_Object PathShape,
- in long NodeStart,
- in boolean HasAngles,
- in double_array Angles,
- in boolean HasRefPoint,
- in PointStruct RefPoint,
- out Extrusion_Error Error);
+ in SMESH_Mesh PathMesh,
+ in GEOM::GEOM_Object PathShape,
+ in long NodeStart,
+ in boolean HasAngles,
+ in double_array Angles,
+ in boolean HasRefPoint,
+ in PointStruct RefPoint,
+ out Extrusion_Error Error);
/*!
* Compute rotation angles for ExtrusionAlongPath as linear variation
* of given angles along path steps
- * param PathMesh mesh containing a 1D sub-mesh on the edge, along
+ * param PathMesh mesh containing a 1D sub-mesh on the edge, along
* which proceeds the extrusion
- * param PathShape is shape(edge); as the mesh can be complex, the edge
+ * param PathShape is shape(edge); as the mesh can be complex, the edge
* is used to define the sub-mesh for the path
*/
double_array LinearAnglesVariation(in SMESH_Mesh PathMesh,
in string MeshName);
void MirrorObject (in SMESH_IDSource theObject,
- in AxisStruct Mirror,
- in MirrorType Type,
- in boolean Copy);
+ in AxisStruct Mirror,
+ in MirrorType Type,
+ in boolean Copy);
ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject,
in AxisStruct Mirror,
in MirrorType Type);
in string MeshName);
void TranslateObject (in SMESH_IDSource theObject,
- in DirStruct Vector,
- in boolean Copy);
+ in DirStruct Vector,
+ in boolean Copy);
ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject,
in DirStruct Vector);
SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
in boolean CopyGroups,
in string MeshName);
+ void Scale (in SMESH_IDSource theObject,
+ in PointStruct thePoint,
+ in double_array theScaleFact,
+ in boolean Copy);
+ ListOfGroups ScaleMakeGroups (in SMESH_IDSource theObject,
+ in PointStruct thePoint,
+ in double_array theScaleFact);
+ SMESH_Mesh ScaleMakeMesh (in SMESH_IDSource theObject,
+ in PointStruct thePoint,
+ in double_array theScaleFact,
+ in boolean CopyGroups,
+ in string MeshName);
+
void Rotate (in long_array IDsOfElements,
in AxisStruct Axis,
in double AngleInRadians,
in string MeshName);
void RotateObject (in SMESH_IDSource theObject,
- in AxisStruct Axis,
- in double AngleInRadians,
- in boolean Copy);
+ in AxisStruct Axis,
+ in double AngleInRadians,
+ in boolean Copy);
ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject,
in AxisStruct Axis,
in double AngleInRadians);
out array_of_long_array GroupsOfNodes);
void FindCoincidentNodesOnPart (in SMESH_IDSource SubMeshOrGroup,
- in double Tolerance,
- out array_of_long_array GroupsOfNodes);
+ in double Tolerance,
+ out array_of_long_array GroupsOfNodes);
+
+ void FindCoincidentNodesOnPartBut (in SMESH_IDSource SubMeshOrGroup,
+ in double Tolerance,
+ out array_of_long_array GroupsOfNodes,
+ in ListOfIDSources ExceptSubMeshOrGroups);
void MergeNodes (in array_of_long_array GroupsOfNodes);
* \return List of groups of equal elements.
*/
void FindEqualElements (in SMESH_IDSource MeshOrSubMeshOrGroup,
- out array_of_long_array GroupsOfElementsID);
+ out array_of_long_array GroupsOfElementsID);
/*!
* \brief Merge elements in each given group.
* \brief Merge equal elements in the whole mesh.
*/
void MergeEqualElements();
-
+
/*!
* If the given ID is a valid node ID (nodeID > 0), just move this node, else
* move the node closest to the point to point's location and return ID of the node
*/
long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type);
+ /*!
+ * Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
+ * TopAbs_UNKNOWN state means that either mesh is wrong or the analysis fails.
+ */
+ short GetPointState(in double x, in double y, in double z);
+
enum Sew_Error {
SEW_OK,
SEW_BORDER1_NOT_FOUND,
in long FirstNodeID2,
in long SecondNodeID2,
in long LastNodeID2,
- in boolean CreatePolygons,
- in boolean CreatePolyedrs);
+ in boolean CreatePolygons,
+ in boolean CreatePolyedrs);
Sew_Error SewConformFreeBorders (in long FirstNodeID1,
in long SecondNodeID1,
in long LastNodeIDOnFreeBorder,
in long FirstNodeIDOnSide,
in long LastNodeIDOnSide,
- in boolean CreatePolygons,
- in boolean CreatePolyedrs);
+ in boolean CreatePolygons,
+ in boolean CreatePolyedrs);
Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
in long_array IDsOfSide2Elements,
boolean ChangeElemNodes(in long ide, in long_array newIDs);
/*!
- * Return data of mesh edition preview which is computed provided
+ * Return data of mesh edition preview which is computed provided
* that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
*/
MeshPreviewStruct GetPreviewData();
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
* \param theNodes - identifiers of nodes to be doubled
- * \param theModifiedElems - identifiers of elements to be updated by the new (doubled)
- * nodes. If list of element identifiers is empty then nodes are doubled but
+ * \param theModifiedElems - identifiers of elements to be updated by the new (doubled)
+ * nodes. If list of element identifiers is empty then nodes are doubled but
* they not assigned to elements
* \return TRUE if operation has been completed successfully, FALSE otherwise
* \sa DoubleNode(), DoubleNodeGroup(), DoubleNodeGroups()
- */
- boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems );
+ */
+ boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems );
/*!
- * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
- * This method provided for convenience works as DoubleNodes() described above.
- * \param theNodeId - identifier of node to be doubled.
- * \param theModifiedElems - identifiers of elements to be updated.
- * \return TRUE if operation has been completed successfully, FALSE otherwise
- * \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups()
- */
- boolean DoubleNode( in long theNodeId, in long_array theModifiedElems );
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+ * This method provided for convenience works as DoubleNodes() described above.
+ * \param theNodeId - identifier of node to be doubled.
+ * \param theModifiedElems - identifiers of elements to be updated.
+ * \return TRUE if operation has been completed successfully, FALSE otherwise
+ * \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups()
+ */
+ boolean DoubleNode( in long theNodeId, in long_array theModifiedElems );
/*!
- * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
- * This method provided for convenience works as DoubleNodes() described above.
- * \param theNodes - group of nodes to be doubled.
- * \param theModifiedElems - group of elements to be updated.
- * \return TRUE if operation has been completed successfully, FALSE otherwise
- * \sa DoubleNode(), DoubleNodes(), DoubleNodeGroups()
- */
- boolean DoubleNodeGroup( in SMESH_GroupBase theNodes,
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+ * This method provided for convenience works as DoubleNodes() described above.
+ * \param theNodes - group of nodes to be doubled.
+ * \param theModifiedElems - group of elements to be updated.
+ * \return TRUE if operation has been completed successfully, FALSE otherwise
+ * \sa DoubleNode(), DoubleNodes(), DoubleNodeGroups(), DoubleNodeGroupNew()
+ */
+ boolean DoubleNodeGroup( in SMESH_GroupBase theNodes,
in SMESH_GroupBase theModifiedElems );
/*!
- \brief Creates a hole in a mesh by doubling the nodes of some particular elements
- This method provided for convenience works as DoubleNodes() described above.
- \param theNodes - list of groups of nodes to be doubled
- \param theModifiedElems - list of groups of elements to be updated.
- \return TRUE if operation has been completed successfully, FALSE otherwise
- \sa DoubleNode(), DoubleNodeGroup(), DoubleNodes()
- */
- boolean DoubleNodeGroups( in ListOfGroups theNodes,
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
+ * Works as DoubleNodeGroup() described above, but returns a new group with
+ * newly created nodes.
+ * \param theNodes - group of nodes to be doubled.
+ * \param theModifiedElems - group of elements to be updated.
+ * \return a new group with newly created nodes
+ * \sa DoubleNodeGroup()
+ */
+ SMESH_Group DoubleNodeGroupNew( in SMESH_GroupBase theNodes,
+ in SMESH_GroupBase theModifiedElems );
+
+ /*!
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+ * This method provided for convenience works as DoubleNodes() described above.
+ * \param theNodes - list of groups of nodes to be doubled
+ * \param theModifiedElems - list of groups of elements to be updated.
+ * \return TRUE if operation has been completed successfully, FALSE otherwise
+ * \sa DoubleNode(), DoubleNodeGroup(), DoubleNodes()
+ */
+ boolean DoubleNodeGroups( in ListOfGroups theNodes,
in ListOfGroups theModifiedElems );
-
+
+ /*!
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+ * Works as DoubleNodeGroups() described above, but returns a new group with
+ * newly created nodes.
+ * \param theNodes - list of groups of nodes to be doubled
+ * \param theModifiedElems - list of groups of elements to be updated.
+ * \return a new group with newly created nodes
+ * \sa DoubleNodeGroups()
+ */
+ SMESH_Group DoubleNodeGroupsNew( in ListOfGroups theNodes,
+ in ListOfGroups theModifiedElems );
+
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
* \param theElems - the list of elements (edges or faces) to be replicated
* The nodes for duplication could be found from these elements
* \param theNodesNot - list of nodes to NOT replicate
- * \param theAffectedElems - the list of elements (cells and edges) to which the
+ * \param theAffectedElems - the list of elements (cells and edges) to which the
* replicated nodes should be associated to.
* \return TRUE if operation has been completed successfully, FALSE otherwise
* \sa DoubleNodeGroup(), DoubleNodeGroups()
- */
+ */
boolean DoubleNodeElem( in long_array theElems,
in long_array theNodesNot,
- in long_array theAffectedElems );
+ in long_array theAffectedElems );
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
* The replicated nodes should be associated to affected elements.
* \return TRUE if operation has been completed successfully, FALSE otherwise
* \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion()
- */
+ */
boolean DoubleNodeElemInRegion( in long_array theElems,
in long_array theNodesNot,
in GEOM::GEOM_Object theShape );
* \param theAffectedElems - group of elements to which the replicated nodes
* should be associated to.
* \return TRUE if operation has been completed successfully, FALSE otherwise
- * \sa DoubleNodes(), DoubleNodeGroups()
- */
- boolean DoubleNodeElemGroup( in SMESH_GroupBase theElems,
+ * \sa DoubleNodes(), DoubleNodeGroups(), DoubleNodeElemGroupNew()
+ */
+ boolean DoubleNodeElemGroup( in SMESH_GroupBase theElems,
in SMESH_GroupBase theNodesNot,
in SMESH_GroupBase theAffectedElems );
+ /*!
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
+ * Works as DoubleNodeElemGroup() described above, but returns a new group with
+ * newly created elements.
+ * \param theElems - group of of elements (edges or faces) to be replicated
+ * \param theNodesNot - group of nodes not to replicated
+ * \param theAffectedElems - group of elements to which the replicated nodes
+ * should be associated to.
+ * \return a new group with newly created elements
+ * \sa DoubleNodeElemGroup()
+ */
+ SMESH_Group DoubleNodeElemGroupNew( in SMESH_GroupBase theElems,
+ in SMESH_GroupBase theNodesNot,
+ in SMESH_GroupBase theAffectedElems );
+
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
* This method provided for convenience works as DoubleNodes() described above.
* The replicated nodes should be associated to affected elements.
* \return TRUE if operation has been completed successfully, FALSE otherwise
* \sa DoubleNodesInRegion(), DoubleNodeGroupsInRegion()
- */
- boolean DoubleNodeElemGroupInRegion( in SMESH_GroupBase theElems,
+ */
+ boolean DoubleNodeElemGroupInRegion( in SMESH_GroupBase theElems,
in SMESH_GroupBase theNodesNot,
in GEOM::GEOM_Object theShape );
* \param theAffectedElems - group of elements to which the replicated nodes
* should be associated to.
* \return TRUE if operation has been completed successfully, FALSE otherwise
- * \sa DoubleNodeGroup(), DoubleNodes()
- */
+ * \sa DoubleNodeGroup(), DoubleNodes(), DoubleNodeElemGroupsNew()
+ */
boolean DoubleNodeElemGroups( in ListOfGroups theElems,
in ListOfGroups theNodesNot,
in ListOfGroups theAffectedElems );
+ /*!
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
+ * Works as DoubleNodeElemGroups() described above, but returns a new group with
+ * newly created elements.
+ * \param theElems - list of groups of elements (edges or faces) to be replicated
+ * \param theNodesNot - list of groups of nodes not to replicated
+ * \param theAffectedElems - group of elements to which the replicated nodes
+ * should be associated to.
+ * \return a new group with newly created elements
+ * \sa DoubleNodeElemGroups()
+ */
+ SMESH_Group DoubleNodeElemGroupsNew( in ListOfGroups theElems,
+ in ListOfGroups theNodesNot,
+ in ListOfGroups theAffectedElems );
+
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
* This method provided for convenience works as DoubleNodes() described above.
* The replicated nodes should be associated to affected elements.
* \return TRUE if operation has been completed successfully, FALSE otherwise
* \sa DoubleNodeGroupInRegion(), DoubleNodesInRegion()
- */
+ */
boolean DoubleNodeElemGroupsInRegion( in ListOfGroups theElems,
in ListOfGroups theNodesNot,
in GEOM::GEOM_Object theShape );
/*!
- * \brief Generated skin mesh (containing 2D cells) from 3D mesh
+ * \brief Generates skin mesh (containing 2D cells) from 3D mesh
* The created 2D mesh elements based on nodes of free faces of boundary volumes
* \return TRUE if operation has been completed successfully, FALSE otherwise
*/
boolean Make2DMeshFrom3D();
+ /*!
+ * \brief Creates missing boundary elements
+ * \param elements - elements whose boundary is to be checked
+ * \param dimension - defines type of boundary elements to create
+ * BND_1DFROM3D creates mesh edges on all borders of free facets of 3D elements.
+ * \param groupName - a name of group to store created boundary elements in,
+ * "" means not to create the group
+ * \param meshName - a name of new mesh to store created boundary elements in,
+ * "" means not to create the new mesh
+ * \param toCopyElements - if true, the checked elements will be copied into the new mesh
+ * else only boundary elements will be copied into the new mesh
+ * \param toCopyExistingBondary - if true, not only new but also pre-existing
+ * boundary elements will be copied into the new mesh
+ * \param group - returns the create group, if any
+ * \retval SMESH::SMESH_Mesh - the mesh where elements were added to
+ */
+ SMESH_Mesh MakeBoundaryMesh(in SMESH_IDSource elements,
+ in Bnd_Dimension dimension,
+ in string groupName,
+ in string meshName,
+ in boolean toCopyElements,
+ in boolean toCopyExistingBondary,
+ out SMESH_Group group);
+ /*!
+ * \brief Creates missing boundary elements around either the whole mesh or
+ * groups of 2D elements
+ * \param dimension - defines type of boundary elements to create
+ * \param groupName - a name of group to store all boundary elements in,
+ * "" means not to create the group
+ * \param meshName - a name of a new mesh, which is a copy of the initial
+ * mesh + created boundary elements; "" means not to create the new mesh
+ * \param toCopyAll - if true, the whole initial mesh will be copied into
+ * the new mesh else only boundary elements will be copied into the new mesh
+ * \param groups - optional groups of 2D elements to make boundary around
+ * \param mesh - returns the mesh where elements were added to
+ * \param group - returns the created group, if any
+ * \retval long - number of added boundary elements
+ */
+ long MakeBoundaryElements(in Bnd_Dimension dimension,
+ in string groupName,
+ in string meshName,
+ in boolean toCopyAll,
+ in ListOfIDSources groups,
+ out SMESH_Mesh mesh,
+ out SMESH_Group group) raises (SALOME::SALOME_Exception);
+
+ /*!
+ * \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
+ * The list of groups must describe a partition of the mesh volumes.
+ * The nodes of the internal faces at the boundaries of the groups are doubled.
+ * In option, the internal faces are replaced by flat elements.
+ * Triangles are transformed in prisms, and quadrangles in hexahedrons.
+ * \param theDomains - list of groups of volumes
+ * \param createJointElems - if TRUE, create the elements
+ * \return TRUE if operation has been completed successfully, FALSE otherwise
+ */
+ boolean DoubleNodesOnGroupBoundaries( in ListOfGroups theDomains,
+ in boolean createJointElems );
+
};
};