X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=idl%2FSMESH_Mesh.idl;h=646bbc658e414f282e052bd281dd5bd6a7f15777;hb=be3fad74946906685e1fbc2c4dfaa77de3966dfb;hp=c2234028caaf06e289e57629037079a8bea6be08;hpb=c9c6669fab21f2a0d544d79e60ceb119800b4cb5;p=modules%2Fsmesh.git diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index c2234028c..646bbc658 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -15,7 +15,7 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -28,28 +28,19 @@ #include "SALOME_Exception.idl" #include "SALOME_GenericObj.idl" - -module GEOM -{ - interface GEOM_Object; -}; - - -module SALOME_MED -{ - interface MESH; - interface FAMILY; -}; - +#include "GEOM_Gen.idl" +#include "MED.idl" module SMESH { interface SMESH_Hypothesis; typedef sequence ListOfHypothesis; + interface SMESH_GroupBase; + typedef sequence ListOfGroups; - typedef sequence double_array ; - typedef sequence long_array ; - typedef sequence string_array ; + typedef sequence double_array ; + typedef sequence long_array ; + typedef sequence string_array ; typedef sequence array_of_long_array ; enum log_command @@ -69,7 +60,15 @@ module SMESH MOVE_NODE, CHANGE_ELEMENT_NODES, CHANGE_POLYHEDRON_NODES, - RENUMBER + RENUMBER, + CLEAR_MESH, + ADD_QUADEDGE, + ADD_QUADTRIANGLE, + ADD_QUADQUADRANGLE, + ADD_QUADTETRAHEDRON, + ADD_QUADPYRAMID, + ADD_QUADPENTAHEDRON, + ADD_QUADHEXAHEDRON }; struct log_block @@ -83,6 +82,9 @@ module SMESH struct PointStruct { double x; double y; double z; } ; + + typedef sequence nodes_array; + struct DirStruct { PointStruct PS ; } ; // analog to Occ Direction struct AxisStruct { double x; @@ -92,6 +94,14 @@ module SMESH double vy; double vz; } ; + /*! + * Node location on a shape + */ + struct NodePosition { + long shapeID; + GEOM::shape_type shapeType; + double_array params; // [U] on EDGE, [U,V] on FACE, [] on the rest shapes + }; /*! * Enumeration for element type, like in SMDS @@ -104,6 +114,15 @@ module SMESH FACE, VOLUME }; + + /*! + * ElementOrder points out entities of what order are requested + */ + enum ElementOrder { + ORDER_ANY, /*! entities of any order */ + ORDER_LINEAR, /*! entities of 1st order */ + ORDER_QUADRATIC /*! entities of 2nd order */ + }; /*! * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods) @@ -114,12 +133,17 @@ module SMESH HYP_MISSING, // algo misses a hypothesis HYP_CONCURENT, // several applicable hypotheses HYP_BAD_PARAMETER,// hypothesis has a bad parameter value + HYP_HIDDEN_ALGO, // an algo is hidden by an upper dim algo generating all-dim elements + HYP_HIDING_ALGO, // an algo hides lower dim algos by generating all-dim elements HYP_UNKNOWN_FATAL,// --- all statuses below should be considered as fatal // for Add/RemoveHypothesis operations HYP_INCOMPATIBLE, // hypothesis does not fit algo HYP_NOTCONFORM, // not conform mesh is produced appling a hypothesis HYP_ALREADY_EXIST,// such hypothesis already exist - HYP_BAD_DIM // bad dimension + HYP_BAD_DIM, // bad dimension + HYP_BAD_SUBSHAPE, // shape is neither the main one, nor its subshape, nor a group + HYP_BAD_GEOMETRY, // geometry mismatches algorithm's expectation + HYP_NEED_SHAPE // algorithm can work on shape only }; /*! @@ -147,6 +171,30 @@ module SMESH typedef sequence log_array; + /*! + * Auxilary flags for advanced extrusion. + * BOUNDARY: create or not boundary for result of extrusion + * SEW: try to use existing nodes or create new nodes in any case + */ + const long EXTRUSION_FLAG_BOUNDARY = 1; + const long EXTRUSION_FLAG_SEW = 2; + + /*! + * Structure used in mesh edit preview data (MeshPreviewStruct) + */ + struct ElementSubType { ElementType SMDS_ElementType; + boolean isPoly; + long nbNodesInElement; }; + + typedef sequence types_array; + + /*! + * Structure containing mesh edit preview data + */ + struct MeshPreviewStruct { nodes_array nodesXYZ; + long_array elementConnectivities; + types_array elementTypes; }; + interface SMESH_IDSource { /*! @@ -155,38 +203,38 @@ module SMESH long_array GetIDs(); }; - interface SMESH_GroupBase; interface SMESH_Group; interface SMESH_GroupOnGeom; interface SMESH_subMesh; interface SMESH_MeshEditor; interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource { - ///*! - // * Associate a Shape to a Mesh created with NewEmpty - // */ - //boolean SetMesh(in GEOM::GEOM_Object anObject) - // raises (SALOME::SALOME_Exception); + /*! + * Return true if there is a geometry to be meshed + */ + boolean HasShapeToMesh() + raises (SALOME::SALOME_Exception); /*! - * Get the subMesh object associated to a subShape. The subMesh object - * gives access to nodes and elements IDs. - * SubMesh will be used instead of SubShape in a next idl version to - * adress a specific subMesh... + * Get geom shape to mesh. A result sould not be nil. Use HasShapeToMesh() + * to know if a returned shape */ - SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name) + GEOM::GEOM_Object GetShapeToMesh() raises (SALOME::SALOME_Exception); - ///*! - // * Create a subMesh without reference to a subShape - // */ - //SMESH_subMesh NewEmpty() - // raises (SALOME::SALOME_Exception); + /*! + * Remove all nodes and elements + */ + void Clear() + raises (SALOME::SALOME_Exception); /*! - * Get geom shape to mesh. A result may be nil + * Get the subMesh object associated to a subShape. The subMesh object + * gives access to nodes and elements IDs. + * SubMesh will be used instead of SubShape in a next idl version to + * adress a specific subMesh... */ - GEOM::GEOM_Object GetShapeToMesh() + SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name) raises (SALOME::SALOME_Exception); /*! @@ -195,6 +243,7 @@ module SMESH void RemoveSubMesh(in SMESH_subMesh aSubMesh) raises (SALOME::SALOME_Exception); + /*! * Create a group */ @@ -222,6 +271,18 @@ module SMESH void RemoveGroupWithContents( in SMESH_GroupBase aGroup ) raises (SALOME::SALOME_Exception); + /*! + * Get the list of groups existing in the mesh + */ + ListOfGroups GetGroups() + raises (SALOME::SALOME_Exception); + + /*! + * Get number of groups existing in the mesh + */ + long NbGroups() + raises (SALOME::SALOME_Exception); + /*! * Union of two groups * New group is created. All mesh elements that are @@ -311,6 +372,20 @@ module SMESH void ClearLog() raises (SALOME::SALOME_Exception); + /*! + * Toggle auto color mode on the object. + * @params + * - theAutoColor : flag which toggles auto color mode. + */ + void SetAutoColor(in boolean theAutoColor) + raises (SALOME::SALOME_Exception); + + /*! + * Get flag of object's auto color mode. + */ + boolean GetAutoColor() + raises (SALOME::SALOME_Exception); + /*! * Get the internal Id */ @@ -327,6 +402,18 @@ module SMESH SMESH_MeshEditor GetMeshEditor() raises (SALOME::SALOME_Exception); + /*! + * Return SMESH_MeshEditor that would not modify the mesh but + * fill MeshPreviewStruct + */ + SMESH_MeshEditor GetMeshEditPreviewer() + raises (SALOME::SALOME_Exception); + + /*! Check group names for duplications. + * Consider maximum group name length stored in MED file. + */ + boolean HasDuplicatedGroupNamesMED(); + /*! * Export Mesh to different MED Formats * @params @@ -346,8 +433,14 @@ module SMESH void ExportMED( in string file, in boolean auto_groups ) raises (SALOME::SALOME_Exception); + /*! + * Return string representation of a MED file version comprising nbDigits + */ + string GetVersionString(in MED_VERSION version, in short nbDigits); + /*! * Export Mesh to DAT, UNV and STL Formats + * (UNV supported version is I-DEAS 10) */ void ExportDAT( in string file ) raises (SALOME::SALOME_Exception); @@ -374,33 +467,60 @@ module SMESH long NbEdges() raises (SALOME::SALOME_Exception); + long NbEdgesOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbFaces() raises (SALOME::SALOME_Exception); + long NbFacesOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbTriangles() raises (SALOME::SALOME_Exception); + long NbTrianglesOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbQuadrangles() raises (SALOME::SALOME_Exception); + long NbQuadranglesOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbPolygons() raises (SALOME::SALOME_Exception); long NbVolumes() raises (SALOME::SALOME_Exception); + long NbVolumesOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbTetras() raises (SALOME::SALOME_Exception); + long NbTetrasOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbHexas() raises (SALOME::SALOME_Exception); + long NbHexasOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbPyramids() raises (SALOME::SALOME_Exception); + long NbPyramidsOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbPrisms() raises (SALOME::SALOME_Exception); + long NbPrismsOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + long NbPolyhedrons() raises (SALOME::SALOME_Exception); @@ -415,347 +535,185 @@ module SMESH long_array GetNodesId() raises (SALOME::SALOME_Exception); + + /*! + * Returns type of mesh element + */ + ElementType GetElementType( in long id, in boolean iselem ) + raises (SALOME::SALOME_Exception); + + long_array GetSubMeshElementsId(in long ShapeID) + raises (SALOME::SALOME_Exception); + + long_array GetSubMeshNodesId(in long ShapeID, in boolean all ) + raises (SALOME::SALOME_Exception); + + ElementType GetSubMeshElementType(in long ShapeID) + raises (SALOME::SALOME_Exception); /*! * Get mesh description */ string Dump(); - }; - interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource - { /*! - * + * Get mesh pointer */ - long GetNumberOfElements() - raises (SALOME::SALOME_Exception); + long long GetMeshPtr(); /*! - * + * Get XYZ coordinates of node as list of double + * If there is not node for given ID - returns empty list */ - long GetNumberOfNodes( in boolean all ) - raises (SALOME::SALOME_Exception); + double_array GetNodeXYZ(in long id); /*! - * + * For given node returns list of IDs of inverse elements + * If there is not node for given ID - returns empty list */ - long_array GetElementsId() - raises (SALOME::SALOME_Exception); + long_array GetNodeInverseElements(in long id); /*! - * + * \brief Return position of a node on shape */ - long_array GetElementsByType( in ElementType theType ) - raises (SALOME::SALOME_Exception); + NodePosition GetNodePosition(in long NodeID); /*! - * + * If given element is node returns IDs of shape from position + * If there is not node for given ID - returns -1 */ - long_array GetNodesId() - raises (SALOME::SALOME_Exception); + long GetShapeID(in long id); /*! - * Get geom shape the submesh is dedicated to + * For given element returns ID of result shape after + * ::FindShape() from SMESH_MeshEditor + * If there is not element for given ID - returns -1 */ - GEOM::GEOM_Object GetSubShape() - raises (SALOME::SALOME_Exception); + long GetShapeIDForElem(in long id); /*! - * Get SMESH_Mesh which stores nodes coordinates & elements definition + * Returns number of nodes for given element + * If there is not element for given ID - returns -1 */ - SMESH_Mesh GetFather() - raises (SALOME::SALOME_Exception); + long GetElemNbNodes(in long id); /*! - * Get the internal Id + * Returns IDs of nodes of given element */ - long GetId(); + long_array GetElemNodes(in long id); /*! - * Get MED subMesh + * Returns ID of node by given index for given element + * If there is not element for given ID - returns -1 + * If there is not node for given index - returns -2 */ - SALOME_MED::FAMILY GetFamily() - raises (SALOME::SALOME_Exception); - }; + long GetElemNode(in long id, in long index); - /*! - * This interface makes modifications on the Mesh - removing elements and nodes etc. - */ - interface NumericalFunctor; - interface SMESH_MeshEditor - { - boolean RemoveElements(in long_array IDsOfElements); - - boolean RemoveNodes(in long_array IDsOfNodes); - - boolean AddNode(in double x, in double y, in double z); - - boolean AddEdge(in long_array IDsOfNodes); - - boolean AddFace(in long_array IDsOfNodes); + /*! + * Returns true if given node is medium node + * in given quadratic element + */ + boolean IsMediumNode(in long ide, in long idn); - boolean AddVolume(in long_array IDsOfNodes); + /*! + * Returns true if given node is medium node + * in one of quadratic elements + */ + boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type); /*! - * Create volume of many faces, giving nodes for each face. - * \param IdsOfNodes List of node IDs for volume creation face by face. - * \param Quantities List of integer values, Quantities[i] - * gives quantity of nodes in face number i. + * Returns number of edges for given element */ - boolean AddPolyhedralVolume (in long_array IdsOfNodes, - in long_array Quantities); + long ElemNbEdges(in long id); /*! - * 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. + * Returns number of faces for given element */ - boolean AddPolyhedralVolumeByFaces (in long_array IdsOfFaces); + long ElemNbFaces(in long id); - boolean MoveNode(in long NodeID, in double x, in double y, in double z); + /*! + * Returns true if given element is polygon + */ + boolean IsPoly(in long id); - boolean InverseDiag(in long NodeID1, in long NodeID2); + /*! + * Returns true if given element is quadratic + */ + boolean IsQuadratic(in long id); - boolean DeleteDiag(in long NodeID1, in long NodeID2); + /*! + * Returns XYZ coordinates of bary center for given element + * as list of double + * If there is not element for given ID - returns empty list + */ + double_array BaryCenter(in long id); - boolean Reorient(in long_array IDsOfElements); + /*! Gets information about imported MED file */ + SALOME_MED::MedFileInfo GetMEDFileInfo(); + }; - boolean ReorientObject(in SMESH_IDSource theObject); + interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource + { + /*! + * + */ + long GetNumberOfElements() + raises (SALOME::SALOME_Exception); /*! - * \brief Fuse neighbour triangles into quadrangles. - * \param theElems The 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. + * */ - boolean TriToQuad (in long_array IDsOfElements, - in NumericalFunctor Criterion, - in double MaxAngle); + long GetNumberOfNodes( in boolean all ) + raises (SALOME::SALOME_Exception); /*! - * \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); + long_array GetElementsId() + raises (SALOME::SALOME_Exception); /*! - * \brief Split quadrangles into triangles. - * \param theElems The faces to be splitted. - * \param theCriterion Is used to choose a diagonal for splitting. - * \return TRUE in case of success, FALSE otherwise. + * + */ + long_array GetElementsByType( in ElementType theType ) + raises (SALOME::SALOME_Exception); + + /*! + * Return type of submesh element */ - boolean QuadToTri (in long_array IDsOfElements, - in NumericalFunctor Criterion); + ElementType GetElementType( in long id, in boolean iselem ) + raises (SALOME::SALOME_Exception); /*! - * \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); + long_array GetNodesId() + raises (SALOME::SALOME_Exception); /*! - * \brief Split quadrangles into triangles. - * \param theElems The faces to be splitted. - * \param the13Diag Is used to choose a diagonal for splitting. - * \return TRUE in case of success, FALSE otherwise. + * Get geom shape the submesh is dedicated to */ - boolean SplitQuad (in long_array IDsOfElements, - in boolean Diag13); + GEOM::GEOM_Object GetSubShape() + raises (SALOME::SALOME_Exception); /*! - * \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); - - /*! - * Find better splitting of the given quadrangle. - * \param IDOfQuad ID of the quadrangle to be splitted. - * \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); - - 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); - - boolean SmoothObject(in SMESH_IDSource theObject, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method); - - boolean SmoothParametric(in long_array IDsOfElements, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method); - - boolean SmoothParametricObject(in SMESH_IDSource theObject, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method); - - void RenumberNodes(); - - void RenumberElements(); - - void RotationSweep(in long_array IDsOfElements, - in AxisStruct Axix, - in double AngleInRadians, - in long NbOfSteps, - in double Tolerance); - - void RotationSweepObject(in SMESH_IDSource theObject, - in AxisStruct Axix, - in double AngleInRadians, - in long NbOfSteps, - in double Tolerance); - - void ExtrusionSweep(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps); - - void ExtrusionSweepObject(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps); - - void ExtrusionSweepObject1D(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps); - - void ExtrusionSweepObject2D(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps); - - enum Extrusion_Error { - EXTR_OK, - EXTR_NO_ELEMENTS, - EXTR_PATH_NOT_EDGE, - EXTR_BAD_PATH_SHAPE, - EXTR_BAD_STARTING_NODE, - EXTR_BAD_ANGLES_NUMBER, - EXTR_CANT_GET_TANGENT - }; - - 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); - - 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); - - enum MirrorType { POINT, AXIS, PLANE }; - - void Mirror (in long_array IDsOfElements, - in AxisStruct Mirror, - in MirrorType theMirrorType, - in boolean Copy); - - void MirrorObject (in SMESH_IDSource theObject, - in AxisStruct Mirror, - in MirrorType theMirrorType, - in boolean Copy); - - void Translate (in long_array IDsOfElements, - in DirStruct Vector, - in boolean Copy); - - void TranslateObject (in SMESH_IDSource theObject, - in DirStruct Vector, - in boolean Copy); - - void Rotate (in long_array IDsOfElements, - in AxisStruct Axis, - in double AngleInRadians, - in boolean Copy); - - void RotateObject (in SMESH_IDSource theObject, - in AxisStruct Axis, - in double AngleInRadians, - in boolean Copy); - - void FindCoincidentNodes (in double Tolerance, - out array_of_long_array GroupsOfNodes); - - void MergeNodes (in array_of_long_array GroupsOfNodes); - - void MergeEqualElements(); - - enum Sew_Error { - SEW_OK, - SEW_BORDER1_NOT_FOUND, - SEW_BORDER2_NOT_FOUND, - SEW_BOTH_BORDERS_NOT_FOUND, - SEW_BAD_SIDE_NODES, - SEW_VOLUMES_TO_SPLIT, - // for SewSideElements() only: - SEW_DIFF_NB_OF_ELEMENTS, - SEW_TOPO_DIFF_SETS_OF_ELEMENTS, - SEW_BAD_SIDE1_NODES, - SEW_BAD_SIDE2_NODES - }; - - 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 SewConformFreeBorders (in long FirstNodeID1, - in long SecondNodeID1, - in long LastNodeID1, - in long FirstNodeID2, - in long SecondNodeID2); - - 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 SewSideElements (in long_array IDsOfSide1Elements, - in long_array IDsOfSide2Elements, - in long NodeID1OfSide1ToMerge, - in long NodeID1OfSide2ToMerge, - in long NodeID2OfSide1ToMerge, - in long NodeID2OfSide2ToMerge); + * Get SMESH_Mesh which stores nodes coordinates & elements definition + */ + SMESH_Mesh GetFather() + raises (SALOME::SALOME_Exception); + /*! + * Get the internal Id + */ + long GetId(); + + /*! + * Get MED subMesh + */ + SALOME_MED::FAMILY GetFamily() + raises (SALOME::SALOME_Exception); }; + }; #endif