X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=idl%2FSMESH_MeshEditor.idl;h=26e73dfafb7c152e32b7611c9b204d375b3cfc7f;hp=956e871c8a66b756c1b42a1b97cb86af858e2a4f;hb=HEAD;hpb=7aebb99e42c6b0c3c056a5eecb0f29033db2231a diff --git a/idl/SMESH_MeshEditor.idl b/idl/SMESH_MeshEditor.idl index 956e871c8..44366e66d 100644 --- a/idl/SMESH_MeshEditor.idl +++ b/idl/SMESH_MeshEditor.idl @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -26,40 +26,109 @@ #include "SMESH_Mesh.idl" #include "SMESH_Gen.idl" +#include "SMESH_smIdType.idl" module SMESH { + interface NumericalFunctor; + enum Bnd_Dimension { BND_2DFROM3D, BND_1DFROM3D, BND_1DFROM2D }; + + struct FreeBorder + { + SMESH::smIdType_array nodeIDs; // all nodes defining a free border + // 1st and last node is same in a closed border + }; + struct FreeBorderPart + { + short border; // border index within a sequence + long node1; // node index within the border-th FreeBorder + long node2; + long nodeLast; + }; + typedef sequence ListOfFreeBorders; + typedef sequence FreeBordersGroup; + typedef sequence ListOfFreeBorderGroups; + + struct CoincidentFreeBorders + { + ListOfFreeBorders borders; // nodes of all free borders + ListOfFreeBorderGroups coincidentGroups; // groups of coincident parts of borders + }; + + + // structure used in MakePolyLine() to define a cutting plane + struct PolySegment + { + // a point is defined as follows: + // ( node*ID1 > 0 && node*ID2 > 0 ) ==> point is in the middle of an edge defined by two nodes + // ( node*ID1 > 0 && node*ID2 <=0 ) ==> point is at node*ID1 + // else ==> point is at xyz* + + // point 1 + smIdType node1ID1; + smIdType node1ID2; + PointStruct xyz1; + + // point 2 + smIdType node2ID1; + smIdType node2ID2; + PointStruct xyz2; + + // vector on the plane; to use a default plane set vector = (0,0,0) + DirStruct vector; + }; + typedef sequence ListOfPolySegments; + + // face edge defined by two nodes + optional medium node + struct FaceEdge + { + smIdType node1; + smIdType node2; + smIdType medium; + }; + typedef sequence ListOfEdges; + + /*! * This interface makes modifications on the Mesh - removing elements and nodes etc. + * Also provides some analysis functions. */ - interface NumericalFunctor; - interface SMESH_MeshEditor { + /*! + * Returns a mesh subject to edition + */ + SMESH_Mesh GetMesh(); + /*! * Return data of mesh edition preview which is computed provided - * that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer() + * that the editor was obtained through SMESH_Mesh::GetMeshEditPreviewer() */ MeshPreviewStruct GetPreviewData() raises (SALOME::SALOME_Exception); /*! * If during last operation of MeshEditor some nodes were - * created this method returns list of their IDs, if new nodes + * created, this method returns list of their IDs, if new nodes * not created - returns empty list */ - long_array GetLastCreatedNodes() raises (SALOME::SALOME_Exception); + smIdType_array GetLastCreatedNodes() raises (SALOME::SALOME_Exception); /*! * If during last operation of MeshEditor some elements were - * created this method returns list of their IDs, if new elements + * created, this method returns list of their IDs, if new elements * not created - returns empty list */ - long_array GetLastCreatedElems() raises (SALOME::SALOME_Exception); + smIdType_array GetLastCreatedElems() raises (SALOME::SALOME_Exception); + + /*! + * \brief Clears sequences of last created elements and nodes + */ + void ClearLastCreated() raises (SALOME::SALOME_Exception); /*! - * \brief Returns description of an error/warning occured during the last operation + * \brief Returns description of an error/warning occurred during the last operation */ ComputeError GetLastError() raises (SALOME::SALOME_Exception); @@ -68,27 +137,34 @@ module SMESH * \param IDsOfElements list of mesh elements identifiers * \return new ID source object */ - SMESH_IDSource MakeIDSource(in long_array IDsOfElements, in ElementType type); + SMESH_IDSource MakeIDSource(in smIdType_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) raises (SALOME::SALOME_Exception); + boolean RemoveElements(in smIdType_array IDsOfElements) raises (SALOME::SALOME_Exception); /*! * \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) raises (SALOME::SALOME_Exception); + boolean RemoveNodes(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception); /*! * \brief Remove all orphan nodes. * \return number of removed nodes */ - long RemoveOrphanNodes() raises (SALOME::SALOME_Exception); + smIdType RemoveOrphanNodes() raises (SALOME::SALOME_Exception); + + /*! + * \brief Remove a mesh node and change surrounding faces to close a hole + * \param nodeID node identifier + * \throw if mesh is not a triangle one + */ + void RemoveNodeWithReconnection(in smIdType nodeID) raises (SALOME::SALOME_Exception); /*! * \brief Add a new node. @@ -97,19 +173,21 @@ module SMESH * \param z Z coordinate of new node * \return integer identifier of new node */ - long AddNode(in double x, in double y, in double z) raises (SALOME::SALOME_Exception); + smIdType AddNode(in double x, in double y, in double z) raises (SALOME::SALOME_Exception); /*! * Create a 0D element on the given node. * \param IdOfNode Node IDs for creation of element. + * \param DuplicateElements to add one more 0D element to a node or not */ - long Add0DElement(in long IDOfNode) raises (SALOME::SALOME_Exception); + smIdType Add0DElement(in smIdType IDOfNode, + in boolean DuplicateElements) raises (SALOME::SALOME_Exception); /*! * Create a ball element on the given node. * \param IdOfNode Node IDs for creation of element. */ - long AddBall(in long IDOfNode, in double diameter) raises (SALOME::SALOME_Exception); + smIdType AddBall(in smIdType IDOfNode, in double diameter) raises (SALOME::SALOME_Exception); /*! * Create an edge, either linear and quadratic (this is determed @@ -119,7 +197,7 @@ module SMESH * of MED. This description is located by the following link: * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3. */ - long AddEdge(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception); + smIdType AddEdge(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception); /*! * Create face, either linear and quadratic (this is determed @@ -129,9 +207,16 @@ module SMESH * of MED. This description is located by the following link: * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3. */ - long AddFace(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception); + smIdType AddFace(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception); - long AddPolygonalFace(in long_array IdsOfNodes) raises (SALOME::SALOME_Exception); + smIdType AddPolygonalFace(in smIdType_array IdsOfNodes) raises (SALOME::SALOME_Exception); + + /*! + * Create a quadratic polygonal face + * \param IdsOfNodes - nodes of the polygon; corner nodes follow first + * \return smIdType- ID of a new polygon + */ + smIdType AddQuadPolygonalFace(in smIdType_array IdsOfNodes) raises (SALOME::SALOME_Exception); /*! * Create volume, either linear and quadratic (this is determed @@ -141,7 +226,7 @@ module SMESH * of MED. This description is located by the following link: * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3. */ - long AddVolume(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception); + smIdType AddVolume(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception); /*! * Create volume of many faces, giving nodes for each face. @@ -149,27 +234,28 @@ module SMESH * \param Quantities List of integer values, Quantities[i] * gives quantity of nodes in face number i. */ - long AddPolyhedralVolume (in long_array IdsOfNodes, - in long_array Quantities) raises (SALOME::SALOME_Exception); + smIdType AddPolyhedralVolume (in smIdType_array IdsOfNodes, + in long_array Quantities) raises (SALOME::SALOME_Exception); /*! * Create volume of many faces, giving IDs of existing faces. * \param IdsOfFaces List of face IDs for volume creation. * \note The created volume will refer only to nodes * of the given faces, not to the faces itself. */ - long AddPolyhedralVolumeByFaces (in long_array IdsOfFaces) raises (SALOME::SALOME_Exception); + smIdType AddPolyhedralVolumeByFaces (in smIdType_array IdsOfFaces) raises (SALOME::SALOME_Exception); /*! - * Create 0D elements on all nodes of the given object except those - * nodes on which a 0D element already exists. + * Create 0D elements on all nodes of the given object. * \param theObject object on whose nodes 0D elements will be created. * \param theGroupName optional name of a group to add 0D elements created * and/or found on nodes of \a theObject. + * \param theDuplicateElements to add one more 0D element to a node or not * \return an object (a new group or a temporary SMESH_IDSource) holding * ids of new and/or found 0D elements. */ SMESH_IDSource Create0DElementsOnAllNodes(in SMESH_IDSource theObject, - in string theGroupName) + in string theGroupName, + in boolean theDuplicateElements) raises (SALOME::SALOME_Exception); /*! @@ -177,7 +263,7 @@ module SMESH * \param NodeID - node ID * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0] */ - void SetNodeOnVertex(in long NodeID, in long VertexID) + void SetNodeOnVertex(in smIdType NodeID, in long VertexID) raises (SALOME::SALOME_Exception); /*! * \brief Store node position on an edge @@ -185,7 +271,7 @@ module SMESH * \param EdgeID - edge ID available through GEOM_Object.GetSubShapeIndices()[0] * \param paramOnEdge - parameter on edge where the node is located */ - void SetNodeOnEdge(in long NodeID, in long EdgeID, in double paramOnEdge) + void SetNodeOnEdge(in smIdType NodeID, in long EdgeID, in double paramOnEdge) raises (SALOME::SALOME_Exception); /*! * \brief Store node position on a face @@ -194,36 +280,62 @@ module SMESH * \param u - U parameter on face where the node is located * \param v - V parameter on face where the node is located */ - void SetNodeOnFace(in long NodeID, in long FaceID, in double u, in double v) + void SetNodeOnFace(in smIdType NodeID, in long FaceID, in double u, in double v) raises (SALOME::SALOME_Exception); /*! * \brief Bind a node to a solid * \param NodeID - node ID * \param SolidID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0] */ - void SetNodeInVolume(in long NodeID, in long SolidID) + void SetNodeInVolume(in smIdType NodeID, in long SolidID) raises (SALOME::SALOME_Exception); /*! * \brief Bind an element to a shape * \param ElementID - element ID * \param ShapeID - shape ID available through GEOM_Object.GetSubShapeIndices()[0] */ - void SetMeshElementOnShape(in long ElementID, in long ShapeID) + void SetMeshElementOnShape(in smIdType ElementID, in long ShapeID) raises (SALOME::SALOME_Exception); - boolean MoveNode(in long NodeID, in double x, in double y, in double z) + /*! + * \brief Change node location + */ + boolean MoveNode(in smIdType NodeID, in double x, in double y, in double z) raises (SALOME::SALOME_Exception); - boolean InverseDiag(in long NodeID1, in long NodeID2) + /*! + * \brief Swap a diagonal of a quadrangle formed by two adjacent triangles + */ + boolean InverseDiag(in smIdType NodeID1, in smIdType NodeID2) raises (SALOME::SALOME_Exception); - - boolean DeleteDiag(in long NodeID1, in long NodeID2) + /*! + * \brief Delete a diagonal of a quadrangle formed by two adjacent triangles + * so that a new quadrangle appears in place of the triangles + */ + boolean DeleteDiag(in smIdType NodeID1, in smIdType NodeID2) raises (SALOME::SALOME_Exception); - - boolean Reorient(in long_array IDsOfElements) + /*! + * \brief Replace each triangle bound by Node1-Node2 segment with + * two triangles by connecting a node made on the segment with a node opposite + * to the segment. + */ + void AddNodeOnSegment(in smIdType Node1, in smIdType Node2, in double position) raises (SALOME::SALOME_Exception); + /*! + * \brief Split a face into triangles by adding a new node onto the face + * and connecting the new node with face nodes + */ + void AddNodeOnFace(in smIdType triangle, in double x, in double y, in double z); + /*! + * \brief Change orientation of cells + */ + boolean Reorient(in smIdType_array IDsOfElements) + raises (SALOME::SALOME_Exception); + /*! + * \brief Change orientation of cells + */ boolean ReorientObject(in SMESH_IDSource theObject) raises (SALOME::SALOME_Exception); /*! @@ -233,29 +345,53 @@ module SMESH * \param theFace - ID of face whose orientation is checked. * It can be < 1 then \a thePoint is used to find a face. * \param thePoint - is used to find a face if \a theFace < 1. - * \return number of reoriented elements. + * \return number of reoriented faces. */ long Reorient2D(in SMESH_IDSource the2Dgroup, in DirStruct theDirection, in long theFace, in PointStruct thePoint) raises (SALOME::SALOME_Exception); + /*! + * \brief Reorient faces contained in a list of \a objectFaces + * equally to faces contained in a list of \a referenceFaces. + * \param objectFaces - faces to reorient in a list including either + * the whole mesh or groups and/or sub-meshes. + * \param referenceFaces - correctly oriented faces in a list of groups and/or sub-meshes. + * It can be empty, then the 1st face in \a objectFaces is used as the reference. + * \return number of reoriented faces. + */ + long Reorient2DByNeighbours(in SMESH::ListOfIDSources objectFaces, + in SMESH::ListOfIDSources referenceFaces) + raises (SALOME::SALOME_Exception); + + /*! + * \brief Reorient faces basing on orientation of adjacent volumes. + * \param faces - a list of objects containing face to reorient + * \param volumes - an object containing volumes. + * \param outsideNormal - to orient faces to have their normal + * pointing either \a outside or \a inside the adjacent volumes. + * \return number of reoriented faces. + */ + long Reorient2DBy3D(in ListOfIDSources faces, + in SMESH_IDSource volumes, + in boolean outsideNormal) raises (SALOME::SALOME_Exception); /*! * \brief Fuse neighbour triangles into quadrangles. - * \param theElems The triangles to be fused. + * \param IDsOfElements Ids of triangles to be fused. * \param theCriterion Is used to choose a neighbour to fuse with. * \param theMaxAngle Is a max angle between element normals at which fusion - * is still performed; theMaxAngle is mesured in radians. - * \return TRUE in case of success, FALSE otherwise. + * is still performed; theMaxAngle is measured in radians. + * \return \c true in case of success, FALSE otherwise. */ - boolean TriToQuad (in long_array IDsOfElements, + + boolean TriToQuad (in smIdType_array IDsOfElements, in NumericalFunctor Criterion, in double MaxAngle) raises (SALOME::SALOME_Exception); - /*! * \brief Fuse neighbour triangles into quadrangles. * - * Behaves like the above method, taking list of elements from \a theObject + * Behaves like the above method, taking a list of elements from \a theObject */ boolean TriToQuadObject (in SMESH_IDSource theObject, in NumericalFunctor Criterion, @@ -263,30 +399,33 @@ module SMESH /*! * \brief Split quadrangles into triangles. - * \param theElems The faces to be splitted. + * \param IDsOfElements Ids of quadrangles to split. * \param theCriterion Is used to choose a diagonal for splitting. * \return TRUE in case of success, FALSE otherwise. */ - boolean QuadToTri (in long_array IDsOfElements, + boolean QuadToTri (in smIdType_array IDsOfElements, in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception); - /*! * \brief Split quadrangles into triangles. * - * Behaves like the above method, taking list of elements from \a theObject + * Behaves like the above method, taking a list of elements from \a theObject */ boolean QuadToTriObject (in SMESH_IDSource theObject, in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception); + /*! + * \brief Split each of quadrangles into 4 triangles. + * \param theQuads Container of quadrangles to split. + */ + void QuadTo4Tri (in SMESH_IDSource theQuads) raises (SALOME::SALOME_Exception); /*! * \brief Split quadrangles into triangles. - * \param theElems The faces to be splitted. + * \param theElems The faces to be split. * \param the13Diag Is used to choose a diagonal for splitting. * \return TRUE in case of success, FALSE otherwise. */ - boolean SplitQuad (in long_array IDsOfElements, - in boolean Diag13) raises (SALOME::SALOME_Exception); - + boolean SplitQuad (in smIdType_array IDsOfElements, + in boolean Diag13) raises (SALOME::SALOME_Exception); /*! * \brief Split quadrangles into triangles. * @@ -297,13 +436,13 @@ module SMESH /*! * Find better splitting of the given quadrangle. - * \param IDOfQuad ID of the quadrangle to be splitted. + * \param IDOfQuad ID of the quadrangle to be split. * \param Criterion A criterion to choose a diagonal for splitting. * \return 1 if 1-3 diagonal is better, 2 if 2-4 * diagonal is better, 0 if error occurs. */ - long BestSplit (in long IDOfQuad, - in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception); + short BestSplit (in smIdType IDOfQuad, + in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception); /*! * \brief Split volumic elements into tetrahedrons @@ -316,32 +455,65 @@ module SMESH void SplitVolumesIntoTetra(in SMESH_IDSource elems, in short methodFlags) raises (SALOME::SALOME_Exception); + /*! + * \brief Split hexahedra into triangular prisms + * \param elems - elements to split + * \param startHexPoint - a point used to find a hexahedron for which \a facetToSplitNormal + * gives a normal vector defining facets to split into triangles. + * \param facetToSplitNormal - normal used to find a facet of hexahedron + * to split into triangles. + * \param methodFlags - flags passing splitting method: + * 1 - split the hexahedron into 2 prisms + * 2 - split the hexahedron into 4 prisms + * \param allDomains - if \c False, only hexahedra adjacent to one closest + * to \a facetToSplitNormal location are split, else \a facetToSplitNormal + * is used to find the facet to split in all domains present in \a elems. + */ + void SplitHexahedraIntoPrisms(in SMESH_IDSource elems, + in SMESH::PointStruct startHexPoint, + in SMESH::DirStruct facetToSplitNormal, + in short methodFlags, + in boolean allDomains) + raises (SALOME::SALOME_Exception); + + /*! + * \brief Split bi-quadratic elements into linear ones without creation of additional nodes. + * - bi-quadratic triangle will be split into 3 linear quadrangles; + * - bi-quadratic quadrangle will be split into 4 linear quadrangles; + * - tri-quadratic hexahedron will be split into 8 linear hexahedra; + * Quadratic elements of lower dimension adjacent to the split bi-quadratic element + * will be split in order to keep the mesh conformal. + * \param elems - elements to split + */ + void SplitBiQuadraticIntoLinear(in ListOfIDSources elems) + raises (SALOME::SALOME_Exception); + enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH }; - boolean Smooth(in long_array IDsOfElements, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method) raises (SALOME::SALOME_Exception); - - boolean SmoothObject(in SMESH_IDSource theObject, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method) raises (SALOME::SALOME_Exception); - - boolean SmoothParametric(in long_array IDsOfElements, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method) raises (SALOME::SALOME_Exception); - - boolean SmoothParametricObject(in SMESH_IDSource theObject, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method) raises (SALOME::SALOME_Exception); + boolean Smooth(in smIdType_array IDsOfElements, + in smIdType_array IDsOfFixedNodes, + in short MaxNbOfIterations, + in double MaxAspectRatio, + in Smooth_Method Method) raises (SALOME::SALOME_Exception); + + boolean SmoothObject(in SMESH_IDSource theObject, + in smIdType_array IDsOfFixedNodes, + in short MaxNbOfIterations, + in double MaxAspectRatio, + in Smooth_Method Method) raises (SALOME::SALOME_Exception); + + boolean SmoothParametric(in smIdType_array IDsOfElements, + in smIdType_array IDsOfFixedNodes, + in short MaxNbOfIterations, + in double MaxAspectRatio, + in Smooth_Method Method) raises (SALOME::SALOME_Exception); + + boolean SmoothParametricObject(in SMESH_IDSource theObject, + in smIdType_array IDsOfFixedNodes, + in short MaxNbOfIterations, + in double MaxAspectRatio, + in Smooth_Method Method) raises (SALOME::SALOME_Exception); void ConvertToQuadratic(in boolean theForce3d) raises (SALOME::SALOME_Exception); @@ -354,7 +526,7 @@ module SMESH void ConvertFromQuadraticObject(in SMESH_IDSource theObject) raises (SALOME::SALOME_Exception); - void ConvertToBiQuadratic(in boolean theForce3d, + void ConvertToBiQuadratic(in boolean theForce3d, in SMESH_IDSource theObject) raises (SALOME::SALOME_Exception); @@ -363,190 +535,86 @@ module SMESH void RenumberElements() raises (SALOME::SALOME_Exception); /*! - * \brief Genarate dim+1 elements by rotation of given elements around axis - * \param IDsOfElements - elements to ratate - * \param Axix - rotation axis - * \param AngleInRadians - rotation angle - * \param NbOfSteps - number of elements to generate from one element - */ - void RotationSweep(in long_array IDsOfElements, - in AxisStruct Axix, - in double AngleInRadians, - in long NbOfSteps, - in double Tolerance) - raises (SALOME::SALOME_Exception); - /*! - * \brief Same as previous but additionally create groups of elements - * generated from elements belonging to preexisting groups - */ - ListOfGroups RotationSweepMakeGroups(in long_array IDsOfElements, - in AxisStruct Axix, - in double AngleInRadians, - in long NbOfSteps, - in double Tolerance) - raises (SALOME::SALOME_Exception); - /*! - * \brief Genarate dim+1 elements by rotation of the object around axis - * \param theObject - object containing elements to ratate - * \param Axix - rotation axis - * \param AngleInRadians - rotation angle - * \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) - raises (SALOME::SALOME_Exception); - /*! - * \brief Same as previous but additionally create groups of elements - * generated from elements belonging to preexisting groups - */ - ListOfGroups RotationSweepObjectMakeGroups(in SMESH_IDSource theObject, - in AxisStruct Axix, - in double AngleInRadians, - in long NbOfSteps, - in double Tolerance) - raises (SALOME::SALOME_Exception); - /*! - * \brief Genarate dim+1 elements by rotation of the object around axis - * \param theObject - object containing elements to ratate - * \param Axix - rotation axis - * \param AngleInRadians - rotation angle - * \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) - raises (SALOME::SALOME_Exception); - /*! - * \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) - raises (SALOME::SALOME_Exception); - /*! - * \brief Genarate dim+1 elements by rotation of the object around axis - * \param theObject - object containing elements to ratate - * \param Axix - rotation axis - * \param AngleInRadians - rotation angle - * \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) - raises (SALOME::SALOME_Exception); - /*! - * \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) - raises (SALOME::SALOME_Exception); - /*! - * \brief Genarate dim+1 elements by extrusion of elements along vector - * \param IDsOfElements - elements to sweep - * \param StepVector - vector giving direction and distance of an extrusion step - * \param NbOfSteps - number of elements to generate from one element - */ - void ExtrusionSweep(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - /*! - * \brief Genarate dim+1 elements by extrusion of elements along vector - * \param IDsOfElements - elements to sweep - * \param StepVector - vector giving direction and distance of an extrusion step - * \param NbOfSteps - number of elements to generate from one element - */ - void ExtrusionSweep0D(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - /*! - * \brief Same as previous but additionally create groups of elements - * generated from elements belonging to preexisting groups - */ - ListOfGroups ExtrusionSweepMakeGroups(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - /*! - * \brief Same as previous but elements are nodes - */ - ListOfGroups ExtrusionSweepMakeGroups0D(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - /*! - * 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 - * EXTRUSION_FLAG_SEW is set - */ - void AdvancedExtrusion(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps, - in long ExtrFlags, - in double SewTolerance) - raises (SALOME::SALOME_Exception); - /*! - * \brief Same as previous but additionally create groups of elements - * generated from elements belonging to preexisting groups - */ - ListOfGroups AdvancedExtrusionMakeGroups(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps, - in long ExtrFlags, - in double SewTolerance) - raises (SALOME::SALOME_Exception); - - void ExtrusionSweepObject(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - ListOfGroups ExtrusionSweepObjectMakeGroups(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - - void ExtrusionSweepObject0D(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - ListOfGroups ExtrusionSweepObject0DMakeGroups(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - - void ExtrusionSweepObject1D(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - ListOfGroups ExtrusionSweepObject1DMakeGroups(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - - void ExtrusionSweepObject2D(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) - raises (SALOME::SALOME_Exception); - ListOfGroups ExtrusionSweepObject2DMakeGroups(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps) + * \brief Generate dim+1 elements by rotation of the object around axis + * \param Nodes - nodes to revolve: a list including groups, sub-meshes or a mesh + * \param Edges - edges to revolve: a list including groups, sub-meshes or a mesh + * \param Faces - faces to revolve: a list including groups, sub-meshes or a mesh + * \param Axis - rotation axis + * \param AngleInRadians - rotation angle + * \param NbOfSteps - number of elements to generate from one element + * \param ToMakeGroups - if true, new elements will be included into new groups + * corresponding to groups the input elements included in. + * \return ListOfGroups - new groups created if \a ToMakeGroups is true + */ + ListOfGroups RotationSweepObjects(in ListOfIDSources Nodes, + in ListOfIDSources Edges, + in ListOfIDSources Faces, + in AxisStruct Axis, + in double AngleInRadians, + in long NbOfSteps, + in double Tolerance, + in boolean ToMakeGroups) + raises (SALOME::SALOME_Exception); + + /*! + * \brief Generate dim+1 elements by extrusion of elements along vector + * \param nodes - nodes to extrude: a list including groups, sub-meshes or a mesh. + * \param edges - edges to extrude: a list including groups, sub-meshes or a mesh. + * \param faces - faces to extrude: a list including groups, sub-meshes or a mesh. + * \param stepVector - vector giving direction and distance of an extrusion step. + * \param nbOfSteps - number of elements to generate from one element. + * \param toMakeGroups - if true, new elements will be included into new groups + * corresponding to groups the input elements included in. + * \param scaleFactors - optional scale factors to apply during extrusion; it's + * usage depends on \a scalesVariation parameter. + * \param scalesVariation - if \c True, \a scaleFactors are spread over all \a NbOfSteps, + otherwise \a scaleFactors[i] is applied to nodes at the i-th extrusion step. + * \param angles - optional rotation angles to apply during extrusion; it's + * usage depends on \a anglesVariation parameter. + * \param anglesVariation - if \c True, \a angles are spread over all \a NbOfSteps, + otherwise \a angle[i] is applied to nodes at the i-th extrusion step. + * \return ListOfGroups - new groups created if \a toMakeGroups is true + */ + ListOfGroups ExtrusionSweepObjects(in ListOfIDSources nodes, + in ListOfIDSources edges, + in ListOfIDSources faces, + in DirStruct stepVector, + in long nbOfSteps, + in boolean toMakeGroups, + in double_array scaleFactors, + in boolean scaleVariation, + in double_array basePoint, + in double_array angles, + in boolean angleVariation) + raises (SALOME::SALOME_Exception); + + /*! Generates new elements by extrusion along the normal to a discretized surface or wire + */ + ListOfGroups ExtrusionByNormal(in ListOfIDSources theObjects, + in double stepSize, + in long nbOfSteps, + in boolean byAverageNormal, + in boolean useInputElemsOnly, + in boolean makeGroups, + in short dim) + raises (SALOME::SALOME_Exception); + + /*! + * 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 + * EXTRUSION_FLAG_SEW is set + * \param ToMakeGroups - if true, new elements will be included into new groups + * corresponding to groups the input elements included in. + * \return ListOfGroups - new groups created if \a ToMakeGroups is true + */ + ListOfGroups AdvancedExtrusion(in smIdType_array IDsOfElements, + in DirStruct StepVector, + in long NbOfSteps, + in long ExtrFlags, + in double SewTolerance, + in boolean ToMakeGroups) raises (SALOME::SALOME_Exception); enum Extrusion_Error { @@ -557,112 +625,23 @@ module SMESH EXTR_BAD_STARTING_NODE, EXTR_BAD_ANGLES_NUMBER, EXTR_CANT_GET_TANGENT - }; - - 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) - raises (SALOME::SALOME_Exception); - - 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) - raises (SALOME::SALOME_Exception); - - 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) - raises (SALOME::SALOME_Exception); - ListOfGroups ExtrusionAlongPathMakeGroups(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, - out Extrusion_Error Error) - raises (SALOME::SALOME_Exception); - - 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) - raises (SALOME::SALOME_Exception); - ListOfGroups ExtrusionAlongPathObjectMakeGroups(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) - raises (SALOME::SALOME_Exception); - - 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) - raises (SALOME::SALOME_Exception); - 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) - raises (SALOME::SALOME_Exception); - - 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) - raises (SALOME::SALOME_Exception); - 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) + }; + + ListOfGroups ExtrusionAlongPathObjects(in ListOfIDSources Nodes, + in ListOfIDSources Edges, + in ListOfIDSources Faces, + in SMESH_IDSource Path, + in GEOM::GEOM_Object PathShape, + in smIdType NodeStart, + in boolean HasAngles, + in double_array Angles, + in boolean AnglesVariation, + in boolean HasRefPoint, + in PointStruct RefPoint, + in boolean MakeGroups, + in double_array ScaleFactors, + in boolean ScaleVariation, + out Extrusion_Error Error) raises (SALOME::SALOME_Exception); /*! @@ -679,20 +658,20 @@ module SMESH enum MirrorType { POINT, AXIS, PLANE }; - void Mirror (in long_array IDsOfElements, - in AxisStruct Mirror, - in MirrorType Type, - in boolean Copy) + void Mirror (in smIdType_array IDsOfElements, + in AxisStruct Mirror, + in MirrorType Type, + in boolean Copy) raises (SALOME::SALOME_Exception); - ListOfGroups MirrorMakeGroups (in long_array IDsOfElements, - in AxisStruct Mirror, - in MirrorType Type) + ListOfGroups MirrorMakeGroups (in smIdType_array IDsOfElements, + in AxisStruct Mirror, + in MirrorType Type) raises (SALOME::SALOME_Exception); - SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements, - in AxisStruct Mirror, - in MirrorType Type, - in boolean CopyGroups, - in string MeshName) + SMESH_Mesh MirrorMakeMesh (in smIdType_array IDsOfElements, + in AxisStruct Mirror, + in MirrorType Type, + in boolean CopyGroups, + in string MeshName) raises (SALOME::SALOME_Exception); void MirrorObject (in SMESH_IDSource theObject, @@ -711,17 +690,17 @@ module SMESH in string MeshName) raises (SALOME::SALOME_Exception); - void Translate (in long_array IDsOfElements, - in DirStruct Vector, - in boolean Copy) + void Translate (in smIdType_array IDsOfElements, + in DirStruct Vector, + in boolean Copy) raises (SALOME::SALOME_Exception); - ListOfGroups TranslateMakeGroups (in long_array IDsOfElements, - in DirStruct Vector) + ListOfGroups TranslateMakeGroups (in smIdType_array IDsOfElements, + in DirStruct Vector) raises (SALOME::SALOME_Exception); - SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements, - in DirStruct Vector, - in boolean CopyGroups, - in string MeshName) + SMESH_Mesh TranslateMakeMesh (in smIdType_array IDsOfElements, + in DirStruct Vector, + in boolean CopyGroups, + in string MeshName) raises (SALOME::SALOME_Exception); void TranslateObject (in SMESH_IDSource theObject, @@ -753,54 +732,67 @@ module SMESH in string MeshName) raises (SALOME::SALOME_Exception); - void Rotate (in long_array IDsOfElements, - in AxisStruct Axis, - in double AngleInRadians, - in boolean Copy) + void Rotate (in smIdType_array IDsOfElements, + in AxisStruct Axis, + in double AngleInRadians, + in boolean Copy) raises (SALOME::SALOME_Exception); - ListOfGroups RotateMakeGroups (in long_array IDsOfElements, - in AxisStruct Axis, - in double AngleInRadians) + ListOfGroups RotateMakeGroups (in smIdType_array IDsOfElements, + in AxisStruct Axis, + in double AngleInRadians) raises (SALOME::SALOME_Exception); - SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements, - in AxisStruct Axis, - in double AngleInRadians, - in boolean CopyGroups, - in string MeshName) + SMESH_Mesh RotateMakeMesh (in smIdType_array IDsOfElements, + in AxisStruct Axis, + in double AngleInRadians, + in boolean CopyGroups, + in string MeshName) raises (SALOME::SALOME_Exception); void RotateObject (in SMESH_IDSource theObject, in AxisStruct Axis, in double AngleInRadians, - in boolean Copy) + in boolean Copy) raises (SALOME::SALOME_Exception); ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject, in AxisStruct Axis, - in double AngleInRadians) + in double AngleInRadians) raises (SALOME::SALOME_Exception); SMESH_Mesh RotateObjectMakeMesh (in SMESH_IDSource theObject, in AxisStruct Axis, in double AngleInRadians, in boolean CopyGroups, - in string MeshName) + in string MeshName) + raises (SALOME::SALOME_Exception); + + SMESH_Mesh Offset(in SMESH_IDSource theObject, + in double Value, + in boolean CopyGroups, + in boolean CopyElements, + in string MeshName, + out ListOfGroups Groups) raises (SALOME::SALOME_Exception); void FindCoincidentNodes (in double Tolerance, - out array_of_long_array GroupsOfNodes) + out array_of_long_array GroupsOfNodes, + in boolean SeparateCornersAndMedium) raises (SALOME::SALOME_Exception); void FindCoincidentNodesOnPart (in SMESH_IDSource SubMeshOrGroup, in double Tolerance, - out array_of_long_array GroupsOfNodes) + out array_of_long_array GroupsOfNodes, + in boolean SeparateCornersAndMedium) raises (SALOME::SALOME_Exception); - void FindCoincidentNodesOnPartBut (in SMESH_IDSource SubMeshOrGroup, + void FindCoincidentNodesOnPartBut (in ListOfIDSources SubMeshOrGroup, in double Tolerance, out array_of_long_array GroupsOfNodes, - in ListOfIDSources ExceptSubMeshOrGroups) + in ListOfIDSources ExceptSubMeshOrGroups, + in boolean SeparateCornersAndMedium) raises (SALOME::SALOME_Exception); - void MergeNodes (in array_of_long_array GroupsOfNodes) + void MergeNodes (in array_of_long_array GroupsOfNodes, + in SMESH::ListOfIDSources NodesToKeep, + in boolean AvoidMakingHoles) raises (SALOME::SALOME_Exception); /*! @@ -808,7 +800,8 @@ module SMESH * \param MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching. * \return List of groups of equal elements. */ - void FindEqualElements (in SMESH_IDSource MeshOrSubMeshOrGroup, + void FindEqualElements (in ListOfIDSources MeshOrSubMeshOrGroup, + in ListOfIDSources ExceptSubMeshOrGroups, out array_of_long_array GroupsOfElementsID) raises (SALOME::SALOME_Exception); @@ -816,7 +809,8 @@ module SMESH * \brief Merge elements in each given group. * \param GroupsOfElementsID Groups of elements for merging. */ - void MergeElements(in array_of_long_array GroupsOfElementsID) + void MergeElements(in array_of_long_array GroupsOfElementsID, + in SMESH::ListOfIDSources ElementsToKeep) raises (SALOME::SALOME_Exception); /*! @@ -829,13 +823,13 @@ module SMESH * 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 MoveClosestNodeToPoint(in double x, in double y, in double z, in long nodeID) + smIdType MoveClosestNodeToPoint(in double x, in double y, in double z, in smIdType nodeID) raises (SALOME::SALOME_Exception); /*! * Return ID of node closest to a given point */ - long FindNodeClosestTo(in double x, in double y, in double z) + smIdType FindNodeClosestTo(in double x, in double y, in double z) raises (SALOME::SALOME_Exception); /*! @@ -843,7 +837,7 @@ module SMESH * * 'ALL' type means elements of any type excluding nodes and 0D elements */ - long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type) + smIdType_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type) raises (SALOME::SALOME_Exception); /*! @@ -852,16 +846,89 @@ module SMESH * * 'ALL' type means elements of any type excluding nodes and 0D elements */ - long_array FindAmongElementsByPoint(in SMESH_IDSource elements, - in double x, in double y, in double z, - in ElementType type) + smIdType_array FindAmongElementsByPoint(in SMESH_IDSource elements, + in double x, in double y, in double z, + in ElementType type) + raises (SALOME::SALOME_Exception); + + /*! + * Project a point to a mesh object. + * Return ID of an element of given type where the given point is projected + * and coordinates of the projection point. + * In the case if nothing found, return -1 and [] + */ + smIdType ProjectPoint(in double x, + in double y, + in double z, + in ElementType type, + in SMESH_IDSource meshObject, + out double_array projecton) raises (SALOME::SALOME_Exception); /*! * 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) + short GetPointState(in double x, in double y, in double z) + raises (SALOME::SALOME_Exception); + + /*! + * Check if a 2D mesh is manifold + */ + boolean IsManifold() + raises (SALOME::SALOME_Exception); + + /*! + * Check if orientation of 2D elements is coherent + */ + boolean IsCoherentOrientation2D() + raises (SALOME::SALOME_Exception); + + /*! + * Partition given 1D elements into groups of contiguous edges. + * A node where number of meeting edges != 2 is a group end. + * An optional startNode is used to orient groups it belongs to. + * \return a list of edge groups and a list of corresponding node groups. + * If a group is closed, the first and last nodes of the group are same. + */ + array_of_long_array Get1DBranches( in SMESH_IDSource edges, + in smIdType startNode, + out array_of_long_array nodeGroups) + raises (SALOME::SALOME_Exception); + + /*! + * Return sharp edges of faces and non-manifold ones. + * Optionally add existing edges. Angle is in degrees. + */ + ListOfEdges FindSharpEdges(in double angle, in boolean addExistingEdges) + raises (SALOME::SALOME_Exception); + + /*! + * Returns all or only closed FreeBorder's. + */ + ListOfFreeBorders FindFreeBorders(in boolean closedOnly) + raises (SALOME::SALOME_Exception); + + /*! + * Fill with 2D elements a hole defined by a FreeBorder. + * Optionally add new faces to a given group, which is returned. + */ + SMESH_Group FillHole(in FreeBorder hole, in string groupName) + raises (SALOME::SALOME_Exception); + + /*! + * Returns groups of FreeBorder's coincident within the given tolerance. + * If the tolerance <= 0.0 then one tenth of an average size of elements adjacent + * to free borders being compared is used. + */ + CoincidentFreeBorders FindCoincidentFreeBorders(in double tolerance); + + /*! + * Sew FreeBorder's of each group + */ + short SewCoincidentFreeBorders (in CoincidentFreeBorders freeBorders, + in boolean createPolygons, + in boolean createPolyedrs) raises (SALOME::SALOME_Exception); enum Sew_Error { @@ -875,41 +942,42 @@ module SMESH SEW_DIFF_NB_OF_ELEMENTS, SEW_TOPO_DIFF_SETS_OF_ELEMENTS, SEW_BAD_SIDE1_NODES, - SEW_BAD_SIDE2_NODES - }; + SEW_BAD_SIDE2_NODES, + SEW_INTERNAL_ERROR + }; - Sew_Error SewFreeBorders (in long FirstNodeID1, - in long SecondNodeID1, - in long LastNodeID1, - in long FirstNodeID2, - in long SecondNodeID2, - in long LastNodeID2, - in boolean CreatePolygons, - in boolean CreatePolyedrs) + Sew_Error SewFreeBorders (in smIdType FirstNodeID1, + in smIdType SecondNodeID1, + in smIdType LastNodeID1, + in smIdType FirstNodeID2, + in smIdType SecondNodeID2, + in smIdType LastNodeID2, + in boolean CreatePolygons, + in boolean CreatePolyedrs) raises (SALOME::SALOME_Exception); - Sew_Error SewConformFreeBorders (in long FirstNodeID1, - in long SecondNodeID1, - in long LastNodeID1, - in long FirstNodeID2, - in long SecondNodeID2) + Sew_Error SewConformFreeBorders (in smIdType FirstNodeID1, + in smIdType SecondNodeID1, + in smIdType LastNodeID1, + in smIdType FirstNodeID2, + in smIdType SecondNodeID2) raises (SALOME::SALOME_Exception); - Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder, - in long SecondNodeIDOnFreeBorder, - in long LastNodeIDOnFreeBorder, - in long FirstNodeIDOnSide, - in long LastNodeIDOnSide, - in boolean CreatePolygons, - in boolean CreatePolyedrs) + Sew_Error SewBorderToSide (in smIdType FirstNodeIDOnFreeBorder, + in smIdType SecondNodeIDOnFreeBorder, + in smIdType LastNodeIDOnFreeBorder, + in smIdType FirstNodeIDOnSide, + in smIdType LastNodeIDOnSide, + in boolean CreatePolygons, + in boolean CreatePolyedrs) raises (SALOME::SALOME_Exception); - Sew_Error SewSideElements (in long_array IDsOfSide1Elements, - in long_array IDsOfSide2Elements, - in long NodeID1OfSide1ToMerge, - in long NodeID1OfSide2ToMerge, - in long NodeID2OfSide1ToMerge, - in long NodeID2OfSide2ToMerge) + Sew_Error SewSideElements (in smIdType_array IDsOfSide1Elements, + in smIdType_array IDsOfSide2Elements, + in smIdType NodeID1OfSide1ToMerge, + in smIdType NodeID1OfSide2ToMerge, + in smIdType NodeID2OfSide1ToMerge, + in smIdType NodeID2OfSide2ToMerge) raises (SALOME::SALOME_Exception); /*! @@ -917,7 +985,23 @@ module SMESH * If number of nodes is not corresponded to type of * element - returns false */ - boolean ChangeElemNodes(in long ide, in long_array newIDs) + boolean ChangeElemNodes(in smIdType id, in smIdType_array newIDs) + raises (SALOME::SALOME_Exception); + + /*! + * \brief Duplicates given elements, i.e. creates new elements based on the + * same nodes as the given ones. + * \param theElements - container of elements to duplicate. + * \param theGroupName - a name of group to contain the generated elements. + * If a group with such a name already exists, the new elements + * are added to the existing group, else a new group is created. + * If \a theGroupName is empty, new elements are not added + * in any group. + * \return a group where the new elements are added. NULL if theGroupName == "". + * \sa DoubleNode() + */ + SMESH_Group DoubleElements( in SMESH_IDSource theElements, + in string theGroupName ) raises (SALOME::SALOME_Exception); /*! @@ -926,10 +1010,10 @@ module SMESH * \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 + * \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 smIdType_array theNodes, in smIdType_array theModifiedElems ) raises (SALOME::SALOME_Exception); /*! @@ -940,7 +1024,7 @@ module SMESH * \return TRUE if operation has been completed successfully, FALSE otherwise * \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups() */ - boolean DoubleNode( in long theNodeId, in long_array theModifiedElems ) + boolean DoubleNode( in smIdType theNodeId, in smIdType_array theModifiedElems ) raises (SALOME::SALOME_Exception); /*! @@ -1001,9 +1085,9 @@ module SMESH * \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 ) + boolean DoubleNodeElem( in smIdType_array theElems, + in smIdType_array theNodesNot, + in smIdType_array theAffectedElems ) raises (SALOME::SALOME_Exception); /*! @@ -1017,8 +1101,8 @@ module SMESH * \return TRUE if operation has been completed successfully, FALSE otherwise * \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion() */ - boolean DoubleNodeElemInRegion( in long_array theElems, - in long_array theNodesNot, + boolean DoubleNodeElemInRegion( in smIdType_array theElems, + in smIdType_array theNodesNot, in GEOM::GEOM_Object theShape ) raises (SALOME::SALOME_Exception); @@ -1207,7 +1291,9 @@ module SMESH * \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 + * the new mesh else only the new elements will be copied into the new mesh + * \param toCreateAllElements - if true, all the boundary elements of the mesh + * are computed. * \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 @@ -1217,6 +1303,7 @@ module SMESH in string groupName, in string meshName, in boolean toCopyAll, + in boolean toCreateAllElements, in ListOfIDSources groups, out SMESH_Mesh mesh, out SMESH_Group group) raises (SALOME::SALOME_Exception); @@ -1231,10 +1318,13 @@ module SMESH * Triangles are transformed in prisms, and quadrangles in hexahedrons. * \param theDomains - list of groups of volumes * \param createJointElems - if TRUE, create the elements + * \param onAllBoundaries - if TRUE, the nodes and elements are also created on + * the boundary between \a theDomains and the rest mesh * \return TRUE if operation has been completed successfully, FALSE otherwise */ boolean DoubleNodesOnGroupBoundaries( in ListOfGroups theDomains, - in boolean createJointElems ) + in boolean createJointElems, + in boolean onAllBoundaries) raises (SALOME::SALOME_Exception); /*! @@ -1259,8 +1349,40 @@ module SMESH in GEOM::GEOM_Object theShape, in string groupName, in double_array theNodesCoords, - out array_of_long_array GroupsOfNodes) + out array_of_long_array GroupsOfNodes) + raises (SALOME::SALOME_Exception); + + + /*! + * \brief Create a polyline consisting of 1D mesh elements each lying on a 2D element of + * the initial triangle mesh. Positions of new nodes are found by cutting the mesh by + * the plane passing through pairs of points specified by each PolySegment structure. + * If there are several paths connecting a pair of points, the shortest path is + * selected by the module. Position of the cutting plane is defined by the two + * points and an optional vector lying on the plane specified by a PolySegment. + * By default the vector is defined by Mesh module as following. A middle point + * of the two given points is computed. The middle point is projected to the mesh. + * The vector goes from the middle point to the projection point. In case of planar + * mesh, the vector is normal to the mesh. + * \param [inout] segments - PolySegment's defining positions of cutting planes. + * Return the used vector which goes from the middle point to its projection. + * \param [in] groupName - optional name of a group where created mesh segments will + * be added. + */ + void MakePolyLine(inout ListOfPolySegments segments, + in string groupName) raises (SALOME::SALOME_Exception); + + /*! + * \brief Create a slot of given width around given 1D elements lying on a triangle mesh. + * The slot is constructed by cutting faces by cylindrical surfaces made + * around each segment. Segments are expected to be created by MakePolyLine(). + * \return Edges located at the slot boundary + */ + ListOfEdges MakeSlot( in SMESH_GroupBase segments, + in double width ) + raises (SALOME::SALOME_Exception); + }; };