X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=idl%2FSMESH_Mesh.idl;h=92a3cd3b828d1f0d224dd0fb189399d3fab39a6b;hp=c11266dedfa25c4c06bee5416cb988b95a8d3299;hb=ffa52542822b49458a812f75afed40e95fcb4b51;hpb=57b43b4d010e2d0a1529d3c131bbb9d416e63258 diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index c11266ded..92a3cd3b8 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -1,35 +1,34 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2007-2013 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. // -// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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" module SMESH { @@ -37,10 +36,12 @@ 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 string_array ; typedef sequence array_of_long_array ; enum log_command @@ -61,13 +62,20 @@ module SMESH CHANGE_ELEMENT_NODES, CHANGE_POLYHEDRON_NODES, RENUMBER, + CLEAR_MESH, ADD_QUADEDGE, ADD_QUADTRIANGLE, ADD_QUADQUADRANGLE, 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,11 +85,15 @@ 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 + + typedef sequence nodes_array; + + struct DirStruct { PointStruct PS ; } ; // analog to OCCT gp_Vec struct AxisStruct { double x; double y; @@ -89,7 +101,22 @@ module SMESH 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 +127,30 @@ 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 }; /*! @@ -112,6 +162,40 @@ 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_Hexagonal_Prism, + Entity_Polyhedra, + Entity_Quad_Polyhedra, + Entity_Ball, + Entity_Last + }; + /*! * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods) */ @@ -121,39 +205,51 @@ 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_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 }; /*! - * 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_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) + * Enumeration for ExportToMED*() */ - enum MED_VERSION // in the order of severity + enum MED_VERSION { MED_V2_1, MED_V2_2 }; - typedef sequence log_array; - + /*! + * \brief A structure containing information about MED file + */ + struct MedFileInfo + { + string fileName; //!< name of file + long fileSize; //!< size of file + long major, minor, release; //!< MED file version + }; /*! * Auxilary flags for advanced extrusion. @@ -163,45 +259,123 @@ module SMESH 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; + 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_Mesh; + + interface SMESH_IDSource : SALOME::GenericObj { /*! * Returns a sequence of all element IDs */ long_array GetIDs(); + + /*! + * Returns number of mesh elements of each \a EntityType + * @return array of number of elements per \a EntityType + */ + long_array GetMeshInfo(); + + /*! + * Returns number of mesh elements of each \a ElementType + * @return array of number of elements per \a ElementType + */ + long_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(); }; interface SMESH_Group; interface SMESH_GroupOnGeom; + interface Filter; + interface SMESH_GroupOnFilter; interface SMESH_subMesh; interface SMESH_MeshEditor; + + typedef sequence submesh_array; + typedef sequence submesh_array_array; + 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); + + /*! + * Return false if the mesh is not yet fully loaded from the study file + */ + boolean IsLoaded() raises (SALOME::SALOME_Exception); - ///*! - // * Create a subMesh without reference to a subShape - // */ - //SMESH_subMesh NewEmpty() - // raises (SALOME::SALOME_Exception); + /*! + * Load full mesh data from the study file + */ + void Load() + raises (SALOME::SALOME_Exception); /*! - * Get geom shape to mesh. A result may be nil + * Remove all nodes and elements */ - GEOM::GEOM_Object GetShapeToMesh() + 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 + * adress a specific subMesh... + */ + SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name) raises (SALOME::SALOME_Exception); /*! @@ -210,19 +384,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 + */ + SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elemType, + in string name, + in GEOM::GEOM_Object geomObject ) raises (SALOME::SALOME_Exception); /*! - * Create a group from geometry group + * Create a group from filter */ - SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type, - in string name, - in GEOM::GEOM_Object theGeomObject ) + SMESH_GroupOnFilter CreateGroupFromFilter( in ElementType elemType, + in string name, + in SMESH::Filter filter ) raises (SALOME::SALOME_Exception); /*! @@ -243,6 +426,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 +441,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 +460,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,32 +476,57 @@ 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 groups of entities from existing groups of superior dimensions + * New group is created. System + * 1) extracts all nodes from each group, + * 2) combines all elements of specified dimension laying on these nodes. + */ + SMESH_Group CreateDimGroup( in ListOfGroups aListOfGroups, + in ElementType anElemType, + in string name ) + raises (SALOME::SALOME_Exception); + + /*! + * 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 subShape + * 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 * the algorithms and associated parameters. * Actual job of mesh the shape is done by MESH_Gen. * @params - * - aSubShape : subShape obtained by a shape explode in GEOM + * - aSubShape : sub-shape obtained by a shape explode in GEOM * (or main shape) * - anHyp : 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) + * - OK if the hypothesis is compatible with the sub-shape + * (and all previous hypothesis on the sub-shape) + * - NOK if the hypothesis is not compatible with the sub-shape + * (or one previous hypothesis on the sub-shape) * raises exception if hypothesis has not been created */ Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject, in SMESH_Hypothesis anHyp) 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. @@ -302,17 +534,12 @@ module SMESH Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject, 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 +547,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); @@ -332,6 +557,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 */ @@ -348,45 +587,120 @@ 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 Mesh to a MED Format file * @params + * - file : 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. + * - version : define the version of format of MED file, that will be created + * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists + * - autoDimension: if @c True (default), 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 ExportToMEDX( in string file, + in boolean auto_groups, + in MED_VERSION version, + in boolean overwrite, + in boolean autoDimension ) raises (SALOME::SALOME_Exception); + + /*! + * Export a part of Mesh into a MED file + * @params + * - meshPart : a part of mesh to store + * - file : name of the MED file + * - version : define the version of format of MED file, that will be created + * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists + * - 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. + */ + void ExportPartToMED( in SMESH_IDSource meshPart, + in string file, + in boolean auto_groups, + in MED_VERSION version, + in boolean overwrite, + in boolean autoDimension ) raises (SALOME::SALOME_Exception); + + /*! + * Export Mesh to a MED Format file + * Works, just the same as ExportToMEDX, with overwrite parameter equal to true. + * The method is kept in order to support old functionality */ void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion ) 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. + * Works, just the same as ExportToMEDX with MED_VERSION parameter equal to MED_V2_1 + * and overwrite parameter equal to true * The method is kept in order to support old functionality */ void ExportMED( in string file, in boolean auto_groups ) raises (SALOME::SALOME_Exception); /*! - * Export Mesh to DAT, UNV and STL Formats + * Export Mesh to SAUV formatted file + * Write a temporary med file and use med2sauv */ - 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 ) + void ExportSAUV( in string file, in boolean auto_groups ) raises (SALOME::SALOME_Exception); /*! - * Get MED Mesh + * Return string representation of a MED file version comprising nbDigits */ - SALOME_MED::MESH GetMEDMesh() - raises (SALOME::SALOME_Exception); + string GetVersionString(in MED_VERSION version, in short nbDigits); + + /*! + * 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 ) 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(); /*! * Get informations about mesh contents @@ -397,6 +711,12 @@ module SMESH long NbElements() raises (SALOME::SALOME_Exception); + long Nb0DElements() + raises (SALOME::SALOME_Exception); + + long NbBalls() + raises (SALOME::SALOME_Exception); + long NbEdges() raises (SALOME::SALOME_Exception); @@ -415,12 +735,18 @@ module SMESH long NbTrianglesOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); + long NbBiQuadTriangles() + raises (SALOME::SALOME_Exception); + long NbQuadrangles() raises (SALOME::SALOME_Exception); long NbQuadranglesOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); + long NbBiQuadQuadrangles() + raises (SALOME::SALOME_Exception); + long NbPolygons() raises (SALOME::SALOME_Exception); @@ -442,6 +768,9 @@ module SMESH long NbHexasOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); + long NbTriQuadraticHexas() + raises (SALOME::SALOME_Exception); + long NbPyramids() raises (SALOME::SALOME_Exception); @@ -454,6 +783,9 @@ module SMESH long NbPrismsOfOrder(in ElementOrder order) raises (SALOME::SALOME_Exception); + long NbHexagonalPrisms() + raises (SALOME::SALOME_Exception); + long NbPolyhedrons() raises (SALOME::SALOME_Exception); @@ -475,6 +807,12 @@ module SMESH ElementType GetElementType( in long id, in boolean iselem ) raises (SALOME::SALOME_Exception); + EntityType GetElementGeomType( in long id ) + raises (SALOME::SALOME_Exception); + + GeometryType GetElementShape( in long id ) + raises (SALOME::SALOME_Exception); + long_array GetSubMeshElementsId(in long ShapeID) raises (SALOME::SALOME_Exception); @@ -484,6 +822,22 @@ module SMESH ElementType GetSubMeshElementType(in long ShapeID) raises (SALOME::SALOME_Exception); + + /*! + * Methods to set meshing order of submeshes + */ + + /*! + * \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,7 +846,7 @@ module SMESH /*! * Get mesh pointer */ - long GetMeshPtr(); + long long GetMeshPtr(); /*! * Get XYZ coordinates of node as list of double @@ -506,20 +860,40 @@ module SMESH */ long_array GetNodeInverseElements(in long id); + /*! + * \brief Return position of a node on shape + */ + NodePosition GetNodePosition(in long NodeID); + + /*! + * \brief Return position of an element on shape + */ + ElementPosition GetElementPosition(in long 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 element for given ID - returns -1 + * If there is not node for given ID - returns -1 */ long GetShapeID(in long 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 GetShapeIDForElem(in long id); + /*! * Returns number of nodes for given element * If there is not element for given ID - returns -1 */ long GetElemNbNodes(in long id); + /*! + * Returns IDs of nodes of given element + */ + long_array GetElemNodes(in long id); + /*! * Returns ID of node by given index for given element * If there is not element for given ID - returns -1 @@ -549,6 +923,21 @@ module SMESH */ long ElemNbFaces(in long id); + /*! + * Returns nodes of given face (counted from zero) for given volumic element. + */ + long_array GetElemFaceNodes(in long 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); + + /*! + * Returns an element based on all given nodes. + */ + long FindElementByNodes(in long_array nodes); + /*! * Returns true if given element is polygon */ @@ -559,6 +948,11 @@ module SMESH */ boolean IsQuadratic(in long id); + /*! + * Returns diameter of a ball discrete element or zero in case of an invalid \a id + */ + double GetBallDiameter(in long id); + /*! * Returns XYZ coordinates of bary center for given element * as list of double @@ -566,6 +960,24 @@ module SMESH */ double_array BaryCenter(in long 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 @@ -622,332 +1034,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