X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=idl%2FSMESH_Mesh.idl;h=d55204ef4cae34162fc3190771517dcf7370aeb6;hb=78fb42dc3ea751d55039317d05b7e96ff86c0931;hp=b2c5813b59d3f0a58fd1a6242652b4805d20fa41;hpb=7b70ad87bf8f5c46b2751f94cd196932b9ae7122;p=modules%2Fsmesh.git diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index b2c5813b5..d55204ef4 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -1,21 +1,21 @@ // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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. -// -// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// 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 // // // @@ -27,16 +27,21 @@ #define _SMESH_MESH_IDL_ #include "SALOME_Exception.idl" -#include "SMESH_Hypothesis.idl" - -#include "GEOM_Shape.idl" +#include "SALOME_GenericObj.idl" +#include "GEOM_Gen.idl" #include "MED.idl" module SMESH { - typedef sequence double_array ; - typedef sequence long_array ; - typedef sequence string_array ; + 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 array_of_long_array ; enum log_command { @@ -44,13 +49,26 @@ module SMESH ADD_EDGE, ADD_TRIANGLE, ADD_QUADRANGLE, + ADD_POLYGON, ADD_TETRAHEDRON, ADD_PYRAMID, ADD_PRISM, ADD_HEXAHEDRON, + ADD_POLYHEDRON, REMOVE_NODE, REMOVE_ELEMENT, - REMOVE_ALL + MOVE_NODE, + CHANGE_ELEMENT_NODES, + CHANGE_POLYHEDRON_NODES, + RENUMBER, + CLEAR_MESH, + ADD_QUADEDGE, + ADD_QUADTRIANGLE, + ADD_QUADQUADRANGLE, + ADD_QUADTETRAHEDRON, + ADD_QUADPYRAMID, + ADD_QUADPENTAHEDRON, + ADD_QUADHEXAHEDRON }; struct log_block @@ -60,34 +78,291 @@ module SMESH double_array coords; long_array indexes; }; + + struct PointStruct { double x; + double y; + double z; } ; + + typedef sequence nodes_array; + + struct DirStruct { PointStruct PS ; } ; // analog to Occ Direction + + struct AxisStruct { double x; + 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 + }; + + /*! + * Enumeration for element type, like in SMDS + */ + enum ElementType + { + ALL, + NODE, + EDGE, + 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) + */ + enum Hypothesis_Status // in the order of severity + { + HYP_OK, + 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_GEOMETRY, // geometry mismatches algorithm's expectation + HYP_NEED_SHAPE // algorithm can work on shape only + }; + + /*! + * Enumeration for DriverMED read status (used by ImportMEDFile() method) + */ + 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.) + }; + + /*! + * Enumeration for DriverMED (used by Perform() method) + */ + enum MED_VERSION // in the order of severity + { + MED_V2_1, + MED_V2_2 + }; + 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 + { + /*! + * Returns a sequence of all element IDs + */ + long_array GetIDs(); + }; + + interface SMESH_Group; + interface SMESH_GroupOnGeom; interface SMESH_subMesh; interface SMESH_MeshEditor; - interface SMESH_Mesh + interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource { /*! - * Associate a Shape to a Mesh created with NewEmpty + * Return true if there is a geometry to be meshed */ + boolean HasShapeToMesh() + raises (SALOME::SALOME_Exception); + + /*! + * Get geom shape to mesh. A result sould not be nil. Use HasShapeToMesh() + * to know if a returned shape + */ + GEOM::GEOM_Object GetShapeToMesh() + raises (SALOME::SALOME_Exception); + + /*! + * Remove all nodes and elements + */ + void Clear() + raises (SALOME::SALOME_Exception); -// boolean SetMesh(in GEOM::GEOM_Shape aShape) -// 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 subShape. The subMesh object * gives access to nodes and elements IDs. - * SubMesh will be used instead of SubShape in a next idl version to + * SubMesh will be used instead of SubShape in a next idl version to * adress a specific subMesh... */ - SMESH_subMesh GetElementsOnShape(in GEOM::GEOM_Shape aSubShape) + SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name) raises (SALOME::SALOME_Exception); /*! - * Create a subMesh without reference to a subShape + * Remove a submesh */ -// SMESH_subMesh NewEmpty() -// raises (SALOME::SALOME_Exception); + void RemoveSubMesh(in SMESH_subMesh aSubMesh) + raises (SALOME::SALOME_Exception); + + + /*! + * Create a group + */ + SMESH_Group CreateGroup( in ElementType elem_type, + in string name ) + raises (SALOME::SALOME_Exception); + + /*! + * Create a group from geometry group + */ + SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type, + in string name, + in GEOM::GEOM_Object theGeomObject ) + raises (SALOME::SALOME_Exception); + + /*! + * Remove a group + */ + void RemoveGroup(in SMESH_GroupBase aGroup) + raises (SALOME::SALOME_Exception); + + /*! + * Remove group with its contents + */ + 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 + * present in initial groups are added to the new one + */ + SMESH_Group UnionGroups (in SMESH_GroupBase aGroup1, + 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 + * New group is created. All mesh elements that are + * present in both initial groups are added to the new one. + */ + SMESH_Group IntersectGroups (in SMESH_GroupBase aGroup1, + 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 + * New group is created. All mesh elements that are present in + * 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 ) + 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) extract all nodes from each group, + * 2) combine 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 into standalone group + */ + SMESH_Group ConvertToStandalone( in SMESH_GroupOnGeom theGeomGroup ) + raises (SALOME::SALOME_Exception); /*! * Add hypothesis to the mesh, under a particular subShape @@ -98,25 +373,25 @@ module SMESH * @params * - aSubShape : subShape obtained by a shape explode in GEOM * (or main shape) - * - anHyp : hypothesis object + * - anHyp : hypothesis object * @return - * - OK if the hypothesis is compatible with the subShape + * - 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 */ - boolean AddHypothesis(in GEOM::GEOM_Shape aSubShape, in SMESH_Hypothesis anHyp) + 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. */ - boolean RemoveHypothesis(in GEOM::GEOM_Shape aSubShape, - in SMESH_Hypothesis anHyp) + 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) @@ -125,7 +400,7 @@ module SMESH /*! * Get the list of hypothesis added on a subShape */ - ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Shape aSubShape) + ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject) raises (SALOME::SALOME_Exception); // ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh) // raises (SALOME::SALOME_Exception); @@ -149,24 +424,80 @@ 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(); - - SMESH_MeshEditor GetMeshEditor() - raises (SALOME::SALOME_Exception); + boolean GetAutoColor() + raises (SALOME::SALOME_Exception); + + /*! + * Get the internal Id + */ + long GetId(); + + /*! + * Get the study Id + */ + long GetStudyId(); + + /*! + * Obtain instance of SMESH_MeshEditor + */ + 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 + * - 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 + */ + void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion ) + raises (SALOME::SALOME_Exception); /*! - * Export mesh to a file - * @param fileName file name where to export the file - * @param fileType Currently it could be either "DAT", "UNV" or "MED". + * 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 */ - void Export( in string fileName, in string fileType ) + 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); + void ExportUNV( in string file ) + raises (SALOME::SALOME_Exception); + void ExportSTL( in string file, in boolean isascii ) raises (SALOME::SALOME_Exception); /*! @@ -175,60 +506,247 @@ module SMESH SALOME_MED::MESH GetMEDMesh() raises (SALOME::SALOME_Exception); + /*! + * Get informations about mesh contents + */ long NbNodes() raises (SALOME::SALOME_Exception); + long NbElements() + raises (SALOME::SALOME_Exception); + 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); + long NbSubMesh() raises (SALOME::SALOME_Exception); + + long_array GetElementsId() + raises (SALOME::SALOME_Exception); + + long_array GetElementsByType( in ElementType theType ) + raises (SALOME::SALOME_Exception); + + 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(); + + /*! + * Get mesh pointer + */ + 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); + + /*! + * 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); + + /*! + * \brief Return position of a node on shape + */ + 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 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 + * If there is not node for given index - returns -2 + */ + long GetElemNode(in long id, in long index); + + /*! + * Returns true if given node is medium node + * in given quadratic element + */ + boolean IsMediumNode(in long ide, in long idn); + + /*! + * Returns true if given node is medium node + * in one of quadratic elements + */ + boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type); + + /*! + * Returns number of edges for given element + */ + long ElemNbEdges(in long id); + + /*! + * Returns number of faces for given element + */ + long ElemNbFaces(in long id); + + /*! + * Returns true if given element is polygon + */ + boolean IsPoly(in long id); + + /*! + * Returns true if given element is quadratic + */ + boolean IsQuadratic(in long 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); + + /*! Gets information about imported MED file */ + SALOME_MED::MedFileInfo GetMEDFileInfo(); }; - interface SMESH_subMesh + interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource { /*! - * + * */ long GetNumberOfElements() raises (SALOME::SALOME_Exception); /*! - * + * */ - long GetNumberOfNodes() + long GetNumberOfNodes( in boolean all ) raises (SALOME::SALOME_Exception); /*! - * + * */ long_array GetElementsId() raises (SALOME::SALOME_Exception); /*! - * + * + */ + long_array GetElementsByType( in ElementType theType ) + raises (SALOME::SALOME_Exception); + + /*! + * Return type of submesh element + */ + ElementType GetElementType( in long id, in boolean iselem ) + raises (SALOME::SALOME_Exception); + + /*! + * */ long_array GetNodesId() raises (SALOME::SALOME_Exception); + /*! + * Get geom shape the submesh is dedicated to + */ + GEOM::GEOM_Object GetSubShape() + raises (SALOME::SALOME_Exception); + /*! * Get SMESH_Mesh which stores nodes coordinates & elements definition */ @@ -236,9 +754,9 @@ module SMESH raises (SALOME::SALOME_Exception); /*! - * Get the internal Id + * Get the internal Id */ - long GetId(); + long GetId(); /*! * Get MED subMesh @@ -246,31 +764,7 @@ module SMESH SALOME_MED::FAMILY GetFamily() raises (SALOME::SALOME_Exception); }; - - /* - * This interface makes modifications on the Mesh - removing elements and nodes - */ - interface SMESH_MeshEditor { - - - boolean RemoveElements(in long_array IDsOfElements) - raises (SALOME::SALOME_Exception); - - boolean RemoveNodes(in long_array IDsOfNodes) - raises (SALOME::SALOME_Exception); - boolean AddNode(in double x, in double y, in double z) - raises (SALOME::SALOME_Exception); - - boolean AddEdge(in long_array IDsOfNodes) - raises (SALOME::SALOME_Exception); - - boolean AddFace(in long_array IDsOfNodes) - raises (SALOME::SALOME_Exception); - - boolean AddVolume(in long_array IDsOfNodes) - raises (SALOME::SALOME_Exception); - }; }; #endif