X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=idl%2FSMESH_Mesh.idl;h=28896496b3aa088f295a9f4d54e2bc64d463700e;hp=5134fe24b38f938f852555e625abe4111b1f546a;hb=d5aa4efde29d902f7be1259d7603d36e95f61215;hpb=c63ee099ad2b149bd70136839c973e8910137bc5 diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index 5134fe24b..28896496b 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -1,35 +1,35 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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. +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// 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, or (at your option) any later version. // -// You should have received a copy of the GNU Lesser General Public -// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // File : SMESH_Mesh.idl // Author : Paul RASCLE, EDF -// $Header$ - +// #ifndef _SMESH_MESH_IDL_ #define _SMESH_MESH_IDL_ #include "SALOME_Exception.idl" #include "SALOME_GenericObj.idl" #include "GEOM_Gen.idl" -#include "MED.idl" +#include "SMESH_smIdType.idl" module SMESH { @@ -37,10 +37,13 @@ module SMESH typedef sequence ListOfHypothesis; interface SMESH_GroupBase; typedef sequence ListOfGroups; + interface SMESH_IDSource; + typedef sequence ListOfIDSources; - typedef sequence double_array ; - typedef sequence long_array ; - typedef sequence string_array ; + typedef sequence double_array ; + typedef sequence long_array ; + typedef sequence smIdType_array ; + typedef sequence string_array ; typedef sequence array_of_long_array ; enum log_command @@ -61,13 +64,21 @@ module SMESH CHANGE_ELEMENT_NODES, CHANGE_POLYHEDRON_NODES, RENUMBER, + CLEAR_MESH, ADD_QUADEDGE, ADD_QUADTRIANGLE, ADD_QUADQUADRANGLE, + ADD_QUADPOLYGON, ADD_QUADTETRAHEDRON, ADD_QUADPYRAMID, ADD_QUADPENTAHEDRON, - ADD_QUADHEXAHEDRON + ADD_QUADHEXAHEDRON, + ADD_ELEM0D, + ADD_BIQUAD_TRIANGLE, + ADD_BIQUAD_QUADRANGLE, + ADD_TRIQUAD_HEXA, + ADD_HEXAGONAL_PRISM, + ADD_BALL }; struct log_block @@ -77,19 +88,38 @@ module SMESH double_array coords; long_array indexes; }; + typedef sequence log_array; struct PointStruct { double x; - double y; - double z; } ; - struct DirStruct { PointStruct PS ; } ; // analog to Occ Direction + double y; + double z; }; + + typedef sequence nodes_array; + + struct DirStruct { PointStruct PS; }; // analog to OCCT gp_Vec struct AxisStruct { double x; - double y; - double z; - double vx; - double vy; - double vz; } ; + double y; + double z; + double vx; + 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 + }; + /*! + * Element location on a shape + */ + struct ElementPosition { + long shapeID; + GEOM::shape_type shapeType; + }; /*! * Enumeration for element type, like in SMDS @@ -100,7 +130,31 @@ module SMESH NODE, EDGE, FACE, - VOLUME + VOLUME, + ELEM0D, + BALL, + NB_ELEMENT_TYPES + }; + typedef sequence array_of_ElementType; + + /*! + * Enumeration for element geometry type, like SMDSAbs_GeometryType in SMDSAbs_ElementType.hxx + */ + enum GeometryType + { + Geom_POINT, + Geom_EDGE, + Geom_TRIANGLE, + Geom_QUADRANGLE, // when a new GeometryType is added, please + Geom_POLYGON, // update a corresponding list in SMESH_2smeshpy.cxx, ln 665 + Geom_TETRA, + Geom_PYRAMID, + Geom_HEXA, + Geom_PENTA, + Geom_HEXAGONAL_PRISM, + Geom_POLYHEDRA, + Geom_BALL, + Geom_LAST }; /*! @@ -112,6 +166,41 @@ module SMESH ORDER_QUADRATIC /*! entities of 2nd order */ }; + /*! + * Enumeration of entity type used in mesh info array, + * it should be synchronised with enum SMDSAbs_EntityType + */ + enum EntityType + { + Entity_Node, + Entity_0D, + Entity_Edge, + Entity_Quad_Edge, + Entity_Triangle, + Entity_Quad_Triangle, + Entity_BiQuad_Triangle, + Entity_Quadrangle, + Entity_Quad_Quadrangle, + Entity_BiQuad_Quadrangle, + Entity_Polygon, + Entity_Quad_Polygon, + Entity_Tetra, + Entity_Quad_Tetra, + Entity_Pyramid, + Entity_Quad_Pyramid, + Entity_Hexa, + Entity_Quad_Hexa, + Entity_TriQuad_Hexa, + Entity_Penta, + Entity_Quad_Penta, + Entity_BiQuad_Penta, + Entity_Hexagonal_Prism, + Entity_Polyhedra, + Entity_Quad_Polyhedra, + Entity_Ball, + Entity_Last + }; + /*! * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods) */ @@ -119,89 +208,190 @@ module SMESH { HYP_OK, HYP_MISSING, // algo misses a hypothesis - HYP_CONCURENT, // several applicable hypotheses + HYP_CONCURRENT, // 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_NOTCONFORM, // not conform mesh is produced applying a hypothesis HYP_ALREADY_EXIST,// such hypothesis already exist HYP_BAD_DIM, // bad dimension - HYP_BAD_SUBSHAPE // shape is neither the main one, nor its subshape, nor a group + HYP_BAD_SUBSHAPE, // shape is neither the main one, nor its sub-shape, nor a group + HYP_BAD_GEOMETRY, // geometry mismatches algorithm's expectation + HYP_NEED_SHAPE, // algorithm can work on shape only + HYP_INCOMPAT_HYPS // several additional hypotheses are incompatible one with other }; /*! - * Enumeration for DriverMED read status (used by ImportMEDFile() method) + * Enumeration for mesh read status (used by SMESH_Gen::CreateMeshesFrom*() methods) */ enum DriverMED_ReadStatus // in the order of severity { DRS_OK, - DRS_EMPTY, // a MED file contains no mesh with the given name - DRS_WARN_RENUMBER, // a MED file has overlapped ranges of element numbers, - // so the numbers from the file are ignored - DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data - DRS_FAIL // general failure (exception etc.) + DRS_EMPTY, // a file contains no mesh with the given name + DRS_WARN_RENUMBER, // a MED file has overlapped ranges of element numbers, + // so the numbers from the file are ignored + DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data + DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity + DRS_FAIL // general failure (exception etc.) }; - /*! - * Enumeration for DriverMED (used by Perform() method) + /*! + * \brief A structure containing information about MED file */ - enum MED_VERSION // in the order of severity + struct MedFileInfo { - MED_V2_1, - MED_V2_2 + string fileName; //!< name of file + long fileSize; //!< size of file + long major, minor, release; //!< MED file version }; - typedef sequence log_array; - + /*! + * Enumeration for CreateDimGroup() + */ + enum NB_COMMON_NODES_ENUM + { + ALL_NODES, MAIN, AT_LEAST_ONE, MAJORITY + }; /*! - * Auxilary flags for advanced extrusion. + * Auxiliary 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; - interface SMESH_IDSource + /*! + * Structure used in mesh edit preview data (MeshPreviewStruct) + */ + struct ElementSubType { ElementType SMDS_ElementType; + boolean isPoly; + short nbNodesInElement; }; + + typedef sequence types_array; + + /*! + * Structure containing mesh edit preview data + */ + struct MeshPreviewStruct { nodes_array nodesXYZ; + long_array elementConnectivities; + types_array elementTypes; }; + + interface SMESH_Mesh; + + interface SMESH_IDSource : SALOME::GenericObj { /*! * Returns a sequence of all element IDs */ - long_array GetIDs(); + smIdType_array GetIDs(); + + /*! + * Returns number of mesh elements of each \a EntityType + * @return array of number of elements per \a EntityType + */ + smIdType_array GetMeshInfo(); + + /*! + * Returns number of mesh elements of each \a ElementType + * @return array of number of elements per \a ElementType + */ + smIdType_array GetNbElementsByType(); + + /*! + * Returns types of elements it contains. + * It's empty if the SMESH_IDSource contains no IDs + */ + array_of_ElementType GetTypes(); + + /*! + * Returns the mesh + */ + SMESH_Mesh GetMesh(); + + /*! + * Returns false if GetMeshInfo() returns incorrect information that may + * happen if mesh data is not yet fully loaded from the file of study. + */ + boolean IsMeshInfoCorrect(); + + /*! + * Returns mesh unstructed grid information. + */ + SALOMEDS::TMPFile GetVtkUgStream(); }; interface SMESH_Group; interface SMESH_GroupOnGeom; + interface Filter; + interface SMESH_GroupOnFilter; interface SMESH_subMesh; interface SMESH_MeshEditor; - interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource + + typedef sequence submesh_array; + typedef sequence submesh_array_array; + + interface SMESH_Mesh : 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 should 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); + /*! + * Replaces a shape in the mesh + */ + void ReplaceShape(in GEOM::GEOM_Object theNewGeom) + raises (SALOME::SALOME_Exception); /*! - * Get geom shape to mesh. A result may be nil + * Return false if the mesh is not yet fully loaded from the study file */ - GEOM::GEOM_Object GetShapeToMesh() + boolean IsLoaded() + raises (SALOME::SALOME_Exception); + + /*! + * Load full mesh data from the study file + */ + void Load() + raises (SALOME::SALOME_Exception); + + /*! + * Remove all nodes and elements + */ + void Clear() + raises (SALOME::SALOME_Exception); + + /*! + * Get the list of sub-meshes existing in the mesh + */ + submesh_array GetSubMeshes() + raises (SALOME::SALOME_Exception); + + /*! + * Remove all nodes and elements of submesh + */ + void ClearSubMesh(in long ShapeID) + raises (SALOME::SALOME_Exception); + + /*! + * Get the subMesh object associated to a Sub-shape. The subMesh object + * gives access to nodes and elements IDs. + * SubMesh will be used instead of Sub-shape in a next idl version to + * address a specific subMesh... + */ + SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name) raises (SALOME::SALOME_Exception); /*! @@ -210,19 +400,28 @@ module SMESH void RemoveSubMesh(in SMESH_subMesh aSubMesh) raises (SALOME::SALOME_Exception); + /*! * Create a group */ SMESH_Group CreateGroup( in ElementType elem_type, - in string name ) + in string name ) raises (SALOME::SALOME_Exception); /*! - * Create a group from geometry group + * Create a group from geometry */ - SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type, - in string name, - in GEOM::GEOM_Object theGeomObject ) + SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elemType, + in string name, + in GEOM::GEOM_Object geomObject ) + raises (SALOME::SALOME_Exception); + + /*! + * Create a group from filter + */ + SMESH_GroupOnFilter CreateGroupFromFilter( in ElementType elemType, + in string name, + in SMESH::Filter filter ) raises (SALOME::SALOME_Exception); /*! @@ -243,6 +442,12 @@ module SMESH 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 @@ -252,6 +457,15 @@ module SMESH in SMESH_GroupBase aGroup2, in string name ) raises (SALOME::SALOME_Exception); + + /*! + * Union of list of groups + * New group is created. All mesh elements that are + * present in initial groups are added to the new one + */ + SMESH_Group UnionListOfGroups (in ListOfGroups aListOfGroups, + in string name ) + raises (SALOME::SALOME_Exception); /*! * Intersection of two groups @@ -262,6 +476,15 @@ module SMESH in SMESH_GroupBase aGroup2, in string name ) raises (SALOME::SALOME_Exception); + + /*! + * Intersection of list of groups + * New group is created. All mesh elements that are + * present in all initial groups simultaneously are added to the new one. + */ + SMESH_Group IntersectListOfGroups (in ListOfGroups aListOfGroups, + in string name) + raises (SALOME::SALOME_Exception); /*! * Cut of two groups @@ -269,50 +492,89 @@ module SMESH * main group but do not present in tool group are added to the new one */ SMESH_Group CutGroups (in SMESH_GroupBase aMainGroup, - in SMESH_GroupBase aToolGroup, - in string name ) + in SMESH_GroupBase aToolGroup, + in string name ) + raises (SALOME::SALOME_Exception); + + /*! + * Cut of lists of groups + * New group is created. All mesh elements that are present in + * main groups but do not present in tool groups are added to the new one + */ + SMESH_Group CutListOfGroups (in ListOfGroups aMainGroups, + in ListOfGroups aToolGroups, + in string name) + raises (SALOME::SALOME_Exception); + + /*! + * Create a group of entities basing on nodes of other groups. + * \param [in] aListOfGroups - list of either groups, sub-meshes or filters. + * \param [in] anElemType - a type of elements to include to the new group. + * \param [in] name - a name of the new group. + * \param [in] nbCommonNodes - criterion of inclusion of an element to the new group. + * \param [in] underlyingOnly - if \c True, an element is included to the + * new group provided that it is based on nodes of an element of + * \a aListOfGroups + * \return SMESH_Group - the created group + */ + SMESH_Group CreateDimGroup( in ListOfIDSources aListOfGroups, + in ElementType anElemType, + in string name, + in NB_COMMON_NODES_ENUM nbCommonNodes, + in boolean underlyingOnly ) + raises (SALOME::SALOME_Exception); + + /*! + * Distribute all faces of the mesh among groups using sharp edges and optionally + * existing 1D elements as group boundaries. + * \param [in] sharpAngle - edge is considered sharp if an angle between normals of + * adjacent faces is more than \a sharpAngle in degrees. + * \param [in] createEdges - to create 1D elements for detected sharp edges. + * \param [in] useExistingEdges - to use existing edges as group boundaries + * \return ListOfGroups - the created groups + */ + ListOfGroups FaceGroupsSeparatedByEdges( in double sharpAngle, + in boolean createEdges, + in boolean useExistingEdges ) raises (SALOME::SALOME_Exception); /*! - * Add hypothesis to the mesh, under a particular subShape + * Convert group on geometry or on filter into standalone group + */ + SMESH_Group ConvertToStandalone( in SMESH_GroupBase theGroupOn ) + raises (SALOME::SALOME_Exception); + + /*! + * Add hypothesis to the mesh, under a particular sub-shape * (or the main shape itself) - * The Add method is only used to prepare the build of the mesh and store + * This method is only used to prepare the build of the mesh and store * the algorithms and associated parameters. - * Actual job of mesh the shape is done by MESH_Gen. + * Actual job of meshing the shape is done by SMESH_Gen::Compute() * @params - * - aSubShape : subShape obtained by a shape explode in GEOM + * - aSubObject : sub-shape obtained by a shape explode in GEOM * (or main shape) - * - anHyp : hypothesis object + * - anHyp : an hypothesis object * @return - * - OK if the hypothesis is compatible with the subShape - * (and all previous hypothesis on the subShape) - * - NOK if the hypothesis is not compatible with the subShape - * (or one previous hypothesis on the subShape) - * raises exception if hypothesis has not been created + * - An enum item explaining what's up + * - anErrorText: an optional textual description of a problem (if any) */ Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject, - in SMESH_Hypothesis anHyp) + in SMESH_Hypothesis anHyp, + out string anErrorText) raises (SALOME::SALOME_Exception); -// boolean AddHypothesis(in SMESH_subMesh aSubMesh, in SMESH_Hypothesis anHyp) -// raises (SALOME::SALOME_Exception); /*! - * Remove an hypothesis previouly added with AddHypothesis. + * Remove an hypothesis previously added with AddHypothesis. */ Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject, - in SMESH_Hypothesis anHyp) + in SMESH_Hypothesis anHyp) raises (SALOME::SALOME_Exception); -// boolean RemoveHypothesis(in SMESH_subMesh aSubMesh, -// in SMESH_Hypothesis anHyp) -// raises (SALOME::SALOME_Exception); /*! - * Get the list of hypothesis added on a subShape + * Get the list of hypothesis added on a sub-shape */ ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject) raises (SALOME::SALOME_Exception); -// ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh) -// raises (SALOME::SALOME_Exception); /*! * Get the log of nodes and elements added or removed since previous @@ -320,8 +582,6 @@ module SMESH * @params * - clearAfterGet : log is emptied after Get (safe if concurrents access) */ - // string_array GetLog(in boolean clearAfterGet) - // raises (SALOME::SALOME_Exception); log_array GetLog(in boolean clearAfterGet) raises (SALOME::SALOME_Exception); @@ -333,14 +593,23 @@ module SMESH raises (SALOME::SALOME_Exception); /*! - * Get the internal Id + * Toggle auto color mode on the object. + * @params + * - theAutoColor : flag which toggles auto color mode. */ - long GetId(); + void SetAutoColor(in boolean theAutoColor) + raises (SALOME::SALOME_Exception); /*! - * Get the study Id + * Get flag of object's auto color mode. */ - long GetStudyId(); + boolean GetAutoColor() + raises (SALOME::SALOME_Exception); + + /*! + * Get the internal Id + */ + long GetId(); /*! * Obtain instance of SMESH_MeshEditor @@ -348,142 +617,289 @@ 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); + + /*! + * Return true if the mesh has been edited since a total re-compute + * and those modifications may prevent successful partial re-compute + */ + boolean HasModificationsToDiscard() + 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 + * Export a Mesh to MED file. * @params + * - fileName : name of the MED file * - auto_groups : boolean parameter for creating/not creating - * the groups Group_On_All_Nodes, Group_On_All_Faces, ... ; - * the typical use is auto_groups=false. - * - theVersion : define the version of format of MED file, that will be created + * the groups Group_On_All_Nodes, Group_On_All_Faces, ... ; + * the typical use is auto_groups=false. + * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists + * - version : define the version of MED file format, coded with major and minor digits (release digit not used) + * for instance med 3.2.1 is coded 3*10+2 = 32, med 4.0.0 is coded 4*10+0 = 40. + * The rules of compatibility to write a mesh in an older version than the current version + * depend on the current version. For instance, with med 4.0 it is possible to write/append + * med files in 4.0.0 (default format) or 3.2.1 or 3.3.1 formats. + * The minor must be between 0 and the current minor version of MED file library. + * If version is equal to -1, the version is not changed (default). + * - autoDimension : if @c true, a space dimension of a MED mesh can be either + * - 1D if all mesh nodes lie on OX coordinate axis, or + * - 2D if all mesh nodes lie on XOY coordinate plane, or + * - 3D in the rest cases. + * If @a autoDimension is @c false, the space dimension is always 3. */ - void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion ) - raises (SALOME::SALOME_Exception); + void ExportMED( in string fileName, + in boolean auto_groups, + in long version, + in boolean overwrite, + in boolean autoDimension) raises (SALOME::SALOME_Exception); + + long long ExportMEDCoupling(in boolean auto_groups, + in boolean autoDimension) raises (SALOME::SALOME_Exception); /*! - * Export Mesh to MED_V2_1 MED format - * Works, just the same as ExportToMED, with MED_VERSION parameter equal to MED_V2_1. - * The method is kept in order to support old functionality + * Export a [part of] Mesh into a MED file + * @params + * - meshPart : a part of mesh to store + * - fileName : name of the MED file + * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists + * - version : define the version of MED file format, coded with major and minor digits (release digit not used) + * for instance med 3.2.1 is coded 3*10+2 = 32, med 4.0.0 is coded 4*10+0 = 40. + * The rules of compatibility to write a mesh in an older version than the current version + * depend on the current version. For instance, with med 4.0 it is possible to write/append + * med files in 4.0.0 (default format) or 3.2.1 or 3.3.1 formats. + * The minor must be between 0 and the current minor version of MED file library. + * If version is equal to -1, the version is not changed (default). + * - autoDimension : if @c True, a space dimension for export is defined by mesh + * configuration; for example a planar mesh lying on XOY plane + * will be exported as a mesh in 2D space. + * If @a autoDimension == @c False, the space dimension is 3. + * - fields : list of GEOM fields defined on the shape to mesh. + * - geomAssocFields : each character of this string means a need to export a + * corresponding field; correspondence between fields and characters is following: + * - 'v' stands for _vertices_ field; + * - 'e' stands for _edges_ field; + * - 'f' stands for _faces_ field; + * - 's' stands for _solids_ field. + * - ZTolerance : tolerance in Z direction. If Z coordinate of a node is close to zero + * within a given tolerance, the coordinate is set to zero. + * If @a ZTolerance is negative, the node coordinates are kept as is. */ - void ExportMED( in string file, in boolean auto_groups ) + void ExportPartToMED( in SMESH_IDSource meshPart, + in string fileName, + in boolean auto_groups, + in long version, + in boolean overwrite, + in boolean autoDimension, + in GEOM::ListOfFields fields, + in string geomAssocFields, + in double ZTolerance) raises (SALOME::SALOME_Exception); + + long long ExportPartToMEDCoupling( in SMESH_IDSource meshPart, + in boolean auto_groups, + in boolean autoDimension, + in GEOM::ListOfFields fields, + in string geomAssocFields, + in double ZTolerance) raises (SALOME::SALOME_Exception); + + /*! + * Export Mesh to SAUV formatted file + * Write a temporary med file and use med2sauv + */ + void ExportSAUV( in string file, in boolean auto_groups ) raises (SALOME::SALOME_Exception); + + /*! + * Return string representation of a MED file version comprising nbDigits + */ + string GetVersionString(in long minor, in short nbDigits); + + /*! + * Return the list of med versions compatibles for write/append, + * encoded in 10*major+minor (for instance, code for med 3.2.1 is 32) + */ + long_array GetMEDVersionsCompatibleForAppend(); + + /*! + * Export Mesh to different Formats + * (UNV supported version is I-DEAS 10) + */ + void ExportDAT( in string file ) raises (SALOME::SALOME_Exception); + void ExportUNV( in string file ) raises (SALOME::SALOME_Exception); + void ExportSTL( in string file, + in boolean isascii ) raises (SALOME::SALOME_Exception); + void ExportCGNS( in SMESH_IDSource meshPart, + in string file, + in boolean overwrite, + in boolean groupElemsByType) raises (SALOME::SALOME_Exception); + void ExportGMF( in SMESH_IDSource meshPart, + in string file, + in boolean withRequiredGroups) raises (SALOME::SALOME_Exception); + void ExportPartToDAT( in SMESH_IDSource meshPart, + in string file ) raises (SALOME::SALOME_Exception); + void ExportPartToUNV( in SMESH_IDSource meshPart, + in string file ) raises (SALOME::SALOME_Exception); + void ExportPartToSTL( in SMESH_IDSource meshPart, + in string file, + in boolean isascii ) raises (SALOME::SALOME_Exception); + /*! + * Return computation progress [0.,1] + */ + double GetComputeProgress(); /*! - * Export Mesh to DAT, UNV and STL Formats + * Get information about mesh contents */ - void ExportDAT( in string file ) + smIdType NbNodes() raises (SALOME::SALOME_Exception); - void ExportUNV( in string file ) + + smIdType NbElements() raises (SALOME::SALOME_Exception); - void ExportSTL( in string file, in boolean isascii ) + + smIdType Nb0DElements() raises (SALOME::SALOME_Exception); - /*! - * Get MED Mesh - */ - SALOME_MED::MESH GetMEDMesh() + smIdType NbBalls() raises (SALOME::SALOME_Exception); - /*! - * Get informations about mesh contents - */ - long NbNodes() + smIdType NbEdges() + raises (SALOME::SALOME_Exception); + + smIdType NbEdgesOfOrder(in ElementOrder order) + raises (SALOME::SALOME_Exception); + + smIdType NbFaces() + raises (SALOME::SALOME_Exception); + + smIdType NbFacesOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbElements() + smIdType NbTriangles() raises (SALOME::SALOME_Exception); - long NbEdges() + smIdType NbTrianglesOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbEdgesOfOrder(in ElementOrder order) + smIdType NbBiQuadTriangles() raises (SALOME::SALOME_Exception); - long NbFaces() + smIdType NbQuadrangles() raises (SALOME::SALOME_Exception); - long NbFacesOfOrder(in ElementOrder order) + smIdType NbQuadranglesOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbTriangles() + smIdType NbBiQuadQuadrangles() raises (SALOME::SALOME_Exception); - long NbTrianglesOfOrder(in ElementOrder order) + smIdType NbPolygons() raises (SALOME::SALOME_Exception); - long NbQuadrangles() + smIdType NbPolygonsOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbQuadranglesOfOrder(in ElementOrder order) + smIdType NbVolumes() raises (SALOME::SALOME_Exception); - long NbPolygons() + smIdType NbVolumesOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbVolumes() + smIdType NbTetras() raises (SALOME::SALOME_Exception); - long NbVolumesOfOrder(in ElementOrder order) + smIdType NbTetrasOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbTetras() + smIdType NbHexas() raises (SALOME::SALOME_Exception); - long NbTetrasOfOrder(in ElementOrder order) + smIdType NbHexasOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbHexas() + smIdType NbTriQuadraticHexas() raises (SALOME::SALOME_Exception); - long NbHexasOfOrder(in ElementOrder order) + smIdType NbPyramids() raises (SALOME::SALOME_Exception); - long NbPyramids() + smIdType NbPyramidsOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbPyramidsOfOrder(in ElementOrder order) + smIdType NbPrisms() raises (SALOME::SALOME_Exception); - long NbPrisms() + smIdType NbPrismsOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); - long NbPrismsOfOrder(in ElementOrder order) + smIdType NbHexagonalPrisms() raises (SALOME::SALOME_Exception); - long NbPolyhedrons() + smIdType NbPolyhedrons() raises (SALOME::SALOME_Exception); - long NbSubMesh() + smIdType NbSubMesh() raises (SALOME::SALOME_Exception); - long_array GetElementsId() + smIdType_array GetElementsId() raises (SALOME::SALOME_Exception); - long_array GetElementsByType( in ElementType theType ) + smIdType_array GetElementsByType( in ElementType theType ) raises (SALOME::SALOME_Exception); - long_array GetNodesId() + smIdType_array GetNodesId() raises (SALOME::SALOME_Exception); /*! * Returns type of mesh element */ - ElementType GetElementType( in long id, in boolean iselem ) + ElementType GetElementType( in smIdType id, in boolean iselem ) + raises (SALOME::SALOME_Exception); + + EntityType GetElementGeomType( in smIdType id ) + raises (SALOME::SALOME_Exception); + + GeometryType GetElementShape( in smIdType id ) raises (SALOME::SALOME_Exception); - long_array GetSubMeshElementsId(in long ShapeID) + smIdType_array GetSubMeshElementsId(in long ShapeID) raises (SALOME::SALOME_Exception); - long_array GetSubMeshNodesId(in long ShapeID, in boolean all ) + smIdType_array GetSubMeshNodesId(in long ShapeID, in boolean all ) raises (SALOME::SALOME_Exception); ElementType GetSubMeshElementType(in long ShapeID) raises (SALOME::SALOME_Exception); + + /*! + * Methods to set meshing order of submeshes + */ + + /*! + * \brief Return \c true if a meshing order not yet set for a concurrent sub-mesh + */ + boolean IsUnorderedSubMesh(in long submeshID); + + /*! + * \brief Return submesh objects list in meshing order + */ + submesh_array_array GetMeshOrder(); + + /*! + * \brief Set submesh object order + */ + boolean SetMeshOrder(in submesh_array_array theSubMeshArray); + + /*! * Get mesh description */ @@ -492,118 +908,181 @@ module SMESH /*! * Get mesh pointer */ - long GetMeshPtr(); + long long GetMeshPtr(); /*! * Get XYZ coordinates of node as list of double * If there is not node for given ID - returns empty list */ - double_array GetNodeXYZ(in long id); + double_array GetNodeXYZ(in smIdType id); /*! * For given node returns list of IDs of inverse elements * If there is not node for given ID - returns empty list */ - long_array GetNodeInverseElements(in long id); + smIdType_array GetNodeInverseElements(in smIdType id, in ElementType elemType); + + /*! + * \brief Return position of a node on shape + */ + NodePosition GetNodePosition(in smIdType NodeID); + + /*! + * \brief Return position of an element on shape + */ + ElementPosition GetElementPosition(in smIdType ElemID); /*! * If given element is node returns IDs of shape from position - * else - return ID of result shape after ::FindShape() - * from SMESH_MeshEditor + * If there is not node for given ID - returns -1 + */ + long GetShapeID(in smIdType id); + + /*! + * For given element returns ID of result shape after + * ::FindShape() from SMESH_MeshEditor * If there is not element for given ID - returns -1 */ - long GetShapeID(in long id); + long GetShapeIDForElem(in smIdType id); /*! * Returns number of nodes for given element * If there is not element for given ID - returns -1 */ - long GetElemNbNodes(in long id); + short GetElemNbNodes(in smIdType id); + + /*! + * Returns IDs of nodes of given element + */ + smIdType_array GetElemNodes(in smIdType id); /*! * 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 */ - long GetElemNode(in long id, in long index); + smIdType GetElemNode(in smIdType id, in short index); /*! * Returns true if given node is medium node * in given quadratic element */ - boolean IsMediumNode(in long ide, in long idn); + boolean IsMediumNode(in smIdType ide, in smIdType idn); /*! * Returns true if given node is medium node * in one of quadratic elements */ - boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type); + boolean IsMediumNodeOfAnyElem(in smIdType idn, in ElementType elem_type); /*! * Returns number of edges for given element */ - long ElemNbEdges(in long id); + long ElemNbEdges(in smIdType id); /*! * Returns number of faces for given element */ - long ElemNbFaces(in long id); + long ElemNbFaces(in smIdType id); + + /*! + * Returns nodes of given face (counted from zero) for given volumic element. + */ + smIdType_array GetElemFaceNodes(in smIdType elemId, in short faceIndex); + + /*! + * Returns three components of normal of given mesh face (or an empty array in KO case) + */ + double_array GetFaceNormal(in long faceId, in boolean normalized); + + /*! + * Returns an element based on all given nodes. + */ + smIdType FindElementByNodes(in smIdType_array nodes); + + /*! + * Return elements including all given nodes. + */ + smIdType_array GetElementsByNodes(in smIdType_array nodes, in ElementType elem_type); /*! * Returns true if given element is polygon */ - boolean IsPoly(in long id); + boolean IsPoly(in smIdType id); /*! * Returns true if given element is quadratic */ - boolean IsQuadratic(in long id); + boolean IsQuadratic(in smIdType id); + + /*! + * Returns diameter of a ball discrete element or zero in case of an invalid \a id + */ + double GetBallDiameter(in smIdType id); /*! * 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); + double_array BaryCenter(in smIdType id); + + /*! Gets information about imported MED file */ + MedFileInfo GetMEDFileInfo(); + + /*! + * Sets list of notebook variables used for Mesh operations separated by ":" symbol + * \param theParameters is a string containing the notebook variables + */ + void SetParameters (in string theParameters); + + /*! + * Returns list of notebook variables used for Mesh operations separated by ":" symbol + */ + string GetParameters(); + /*! + * Returns list of notebook variables used for last Mesh operation + */ + string_array GetLastParameters(); }; - interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource + interface SMESH_subMesh : SMESH_IDSource { /*! * */ - long GetNumberOfElements() + smIdType GetNumberOfElements() raises (SALOME::SALOME_Exception); /*! * */ - long GetNumberOfNodes( in boolean all ) + smIdType GetNumberOfNodes( in boolean all ) raises (SALOME::SALOME_Exception); /*! * */ - long_array GetElementsId() + smIdType_array GetElementsId() raises (SALOME::SALOME_Exception); /*! * */ - long_array GetElementsByType( in ElementType theType ) + smIdType_array GetElementsByType( in ElementType theType ) raises (SALOME::SALOME_Exception); /*! - * Return type of submesh element + * Returns type of mesh element (same as SMESH_Mesh::GetElementType() ) */ - ElementType GetElementType( in long id, in boolean iselem ) + ElementType GetElementType( in smIdType id, in boolean iselem ) raises (SALOME::SALOME_Exception); /*! * */ - long_array GetNodesId() + smIdType_array GetNodesId() raises (SALOME::SALOME_Exception); /*! @@ -622,332 +1101,8 @@ module SMESH * Get the internal Id */ long GetId(); - - /*! - * Get MED subMesh - */ - SALOME_MED::FAMILY GetFamily() - raises (SALOME::SALOME_Exception); }; - /*! - * 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); - - long AddNode(in double x, in double y, in double z); - - long AddEdge(in long_array IDsOfNodes); - - long AddFace(in long_array IDsOfNodes); - - long AddPolygonalFace(in long_array IdsOfNodes); - - long AddVolume(in long_array IDsOfNodes); - - /*! - * 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. - */ - long AddPolyhedralVolume (in long_array IdsOfNodes, - in long_array Quantities); - - /*! - * 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); - - boolean MoveNode(in long NodeID, in double x, in double y, in double z); - - boolean InverseDiag(in long NodeID1, in long NodeID2); - - boolean DeleteDiag(in long NodeID1, in long NodeID2); - - boolean Reorient(in long_array IDsOfElements); - - boolean ReorientObject(in SMESH_IDSource theObject); - - /*! - * \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); - - /*! - * \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); - - /*! - * \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. - */ - boolean QuadToTri (in long_array IDsOfElements, - in NumericalFunctor Criterion); - - /*! - * \brief Split quadrangles into triangles. - * - * Behaves like the above method, taking list of elements from \a theObject - */ - boolean QuadToTriObject (in SMESH_IDSource theObject, - in NumericalFunctor Criterion); - - /*! - * \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. - */ - boolean SplitQuad (in long_array IDsOfElements, - in boolean Diag13); - - /*! - * \brief Split quadrangles into triangles. - * - * Behaves like the above method, taking list of elements from \a theObject - */ - boolean SplitQuadObject (in SMESH_IDSource theObject, - in boolean Diag13); - - /*! - * 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 ConvertToQuadratic(in boolean theForce3d); - - boolean ConvertFromQuadratic(); - - 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); - - /*! - * 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); - - 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); - - /*! - * Set new nodes for given element. - * If number of nodes is not corresponded to type of - * element - returns false - */ - boolean ChangeElemNodes(in long ide, in long_array newIDs); - - /*! - * If during last operation of MeshEditor some nodes were - * created this method returns list of it's IDs, if new nodes - * not creared - returns empty list - */ - long_array GetLastCreatedNodes(); - - /*! - * If during last operation of MeshEditor some elements were - * created this method returns list of it's IDs, if new elements - * not creared - returns empty list - */ - long_array GetLastCreatedElems(); - - }; }; #endif