X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=idl%2FSMESH_MeshEditor.idl;h=83ed605faf0fd0ed9f2e6d86840c3e971ba97ee9;hp=509e9ed8c08275a3ceacc57e93e1f796f0c13063;hb=401b2a2e54af16513f98bf23584a7f69ab8a2956;hpb=38f832b912a159ca9d43b5bd031344fd7108a6d8 diff --git a/idl/SMESH_MeshEditor.idl b/idl/SMESH_MeshEditor.idl index 509e9ed8c..83ed605fa 100644 --- a/idl/SMESH_MeshEditor.idl +++ b/idl/SMESH_MeshEditor.idl @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -29,13 +29,71 @@ module SMESH { + interface NumericalFunctor; + enum Bnd_Dimension { BND_2DFROM3D, BND_1DFROM3D, BND_1DFROM2D }; + + struct FreeBorder + { + SMESH::long_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 + long node1ID1; + long node1ID2; + PointStruct xyz1; + + // point 2 + long node2ID1; + long 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 + { + long node1; + long node2; + long 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 { /*! @@ -69,7 +127,7 @@ module SMESH 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); @@ -112,8 +170,10 @@ module SMESH /*! * 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); + long Add0DElement(in long IDOfNode, + in boolean DuplicateElements) raises (SALOME::SALOME_Exception); /*! * Create a ball element on the given node. @@ -177,16 +237,17 @@ module SMESH long AddPolyhedralVolumeByFaces (in long_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); /*! @@ -273,7 +334,7 @@ module SMESH * \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. + * is still performed; theMaxAngle is measured in radians. * \return \c true in case of success, FALSE otherwise. */ boolean TriToQuad (in long_array IDsOfElements, @@ -311,7 +372,7 @@ module SMESH /*! * \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. */ @@ -327,7 +388,7 @@ 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. @@ -435,7 +496,7 @@ module SMESH * \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 craeted if \a ToMakeGroups is true + * \return ListOfGroups - new groups created if \a ToMakeGroups is true */ ListOfGroups RotationSweepObjects(in ListOfIDSources Nodes, in ListOfIDSources Edges, @@ -449,21 +510,34 @@ module SMESH /*! * \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 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. - * \return ListOfGroups - new groups craeted if \a toMakeGroups is true + * \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 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 @@ -485,7 +559,7 @@ module SMESH * 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 craeted if \a ToMakeGroups is true + * \return ListOfGroups - new groups created if \a ToMakeGroups is true */ ListOfGroups AdvancedExtrusion(in long_array IDsOfElements, in DirStruct StepVector, @@ -505,18 +579,20 @@ module SMESH EXTR_CANT_GET_TANGENT }; - ListOfGroups ExtrusionAlongPathObjects(in ListOfIDSources Nodes, - in ListOfIDSources Edges, - in ListOfIDSources Faces, + ListOfGroups ExtrusionAlongPathObjects(in ListOfIDSources Nodes, + in ListOfIDSources Edges, + in ListOfIDSources Faces, in SMESH_IDSource Path, in GEOM::GEOM_Object PathShape, in long NodeStart, in boolean HasAngles, in double_array Angles, - in boolean LinearVariation, + 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); @@ -640,6 +716,14 @@ module SMESH 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, in boolean SeparateCornersAndMedium) @@ -651,14 +735,16 @@ module SMESH 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 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); /*! @@ -666,7 +752,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); @@ -674,7 +761,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); /*! @@ -715,11 +803,84 @@ module SMESH 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 [] + */ + long 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 long 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 { @@ -733,8 +894,9 @@ 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, @@ -784,7 +946,7 @@ module SMESH * \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 existng group, else a new group is created. + * 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 == "". @@ -1136,8 +1298,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 consrtucted 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); + }; };