X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Mesh_i.hxx;h=a2c42865604a2583047aacb11a934ab20198fe98;hp=f83347539ae8dc3312913dadc38a4d6d1c52fe6b;hb=88ff35ddd4a4442397bc5f6ba893aaf9c51b1856;hpb=67dba15dfdd0b7f7a2671a70ad831a080a9c0487 diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index f83347539..a2c428656 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -31,6 +31,7 @@ #include "SMESH_Hypothesis.hxx" #include "SMESH_Mesh.hxx" #include "SMESH_subMesh.hxx" +#include "SMDS_ElemIterator.hxx" #include #include @@ -47,6 +48,8 @@ class SMESH_GroupBase_i; class SMESH_subMesh_i; class SMESH_PreMeshInfo; class SMESH_MeshEditor_i; +class DriverMED_W_Field; +class SMESHDS_Mesh; class SMESH_I_EXPORT SMESH_Mesh_i: public virtual POA_SMESH::SMESH_Mesh, @@ -56,130 +59,106 @@ class SMESH_I_EXPORT SMESH_Mesh_i: SMESH_Mesh_i(const SMESH_Mesh_i&); public: SMESH_Mesh_i( PortableServer::POA_ptr thePOA, - SMESH_Gen_i* myGen_i, - CORBA::Long studyId ); + SMESH_Gen_i* myGen_i ); virtual ~SMESH_Mesh_i(); // --- CORBA - void SetShape( GEOM::GEOM_Object_ptr theShapeObject ) - throw (SALOME::SALOME_Exception); + void SetShape( GEOM::GEOM_Object_ptr theShapeObject ); - CORBA::Boolean HasShapeToMesh() - throw (SALOME::SALOME_Exception); + CORBA::Boolean HasShapeToMesh(); - GEOM::GEOM_Object_ptr GetShapeToMesh() - throw (SALOME::SALOME_Exception); + GEOM::GEOM_Object_ptr GetShapeToMesh(); - CORBA::Boolean IsLoaded() - throw (SALOME::SALOME_Exception); + virtual void ReplaceShape(GEOM::GEOM_Object_ptr theNewGeom); - void Load() - throw (SALOME::SALOME_Exception); + CORBA::Boolean IsLoaded(); - void Clear() - throw (SALOME::SALOME_Exception); + void Load(); - void ClearSubMesh(CORBA::Long ShapeID) - throw (SALOME::SALOME_Exception); + void Clear(); - SMESH::Hypothesis_Status AddHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) - throw (SALOME::SALOME_Exception); + void ClearSubMesh(CORBA::Long ShapeID); - SMESH::Hypothesis_Status RemoveHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) - throw (SALOME::SALOME_Exception); + SMESH::Hypothesis_Status AddHypothesis(GEOM::GEOM_Object_ptr aSubShape, + SMESH::SMESH_Hypothesis_ptr anHyp, + CORBA::String_out anErrorText); - SMESH::ListOfHypothesis* GetHypothesisList(GEOM::GEOM_Object_ptr aSubShapeObject) - throw (SALOME::SALOME_Exception); + SMESH::Hypothesis_Status RemoveHypothesis(GEOM::GEOM_Object_ptr aSubShape, + SMESH::SMESH_Hypothesis_ptr anHyp); - SMESH::submesh_array* GetSubMeshes() - throw (SALOME::SALOME_Exception); + SMESH::ListOfHypothesis* GetHypothesisList(GEOM::GEOM_Object_ptr aSubShape); - SMESH::SMESH_subMesh_ptr GetSubMesh(GEOM::GEOM_Object_ptr aSubShapeObject, const char* theName) - throw (SALOME::SALOME_Exception); + SMESH::submesh_array* GetSubMeshes(); - void RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ) - throw (SALOME::SALOME_Exception); + SMESH::SMESH_subMesh_ptr GetSubMesh(GEOM::GEOM_Object_ptr aSubShape, const char* theName); - SMESH::SMESH_Group_ptr CreateGroup( SMESH::ElementType theElemType, const char* theName ) - throw (SALOME::SALOME_Exception); + void RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ); + + SMESH::SMESH_Group_ptr CreateGroup( SMESH::ElementType theElemType, const char* theName ); SMESH::SMESH_GroupOnGeom_ptr CreateGroupFromGEOM(SMESH::ElementType theElemType, const char* theName, - GEOM::GEOM_Object_ptr theGeomObj ) - throw (SALOME::SALOME_Exception); + GEOM::GEOM_Object_ptr theGeomObj ); SMESH::SMESH_GroupOnFilter_ptr CreateGroupFromFilter(SMESH::ElementType theElemType, const char* theName, - SMESH::Filter_ptr theFilter ) - throw (SALOME::SALOME_Exception); + SMESH::Filter_ptr theFilter ); - void RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup ) - throw (SALOME::SALOME_Exception); + void RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup ); - void RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup ) - throw (SALOME::SALOME_Exception); + void RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup ); - SMESH::ListOfGroups* GetGroups() - throw (SALOME::SALOME_Exception); + SMESH::ListOfGroups* GetGroups(); - CORBA::Long NbGroups() - throw (SALOME::SALOME_Exception); + CORBA::Long NbGroups(); SMESH::SMESH_Group_ptr UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1, SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception); + const char* theName ); SMESH::SMESH_Group_ptr UnionListOfGroups( const SMESH::ListOfGroups& theGroups, - const char* theName) - throw (SALOME::SALOME_Exception); + const char* theName); SMESH::SMESH_Group_ptr IntersectGroups( SMESH::SMESH_GroupBase_ptr theGroup1, SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception); + const char* theName ); SMESH::SMESH_Group_ptr IntersectListOfGroups( const SMESH::ListOfGroups& theGroups, - const char* theName ) - throw (SALOME::SALOME_Exception); + const char* theName ); SMESH::SMESH_Group_ptr CutGroups( SMESH::SMESH_GroupBase_ptr theGroup1, SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception); + const char* theName ); SMESH::SMESH_Group_ptr CutListOfGroups( const SMESH::ListOfGroups& theMainGroups, const SMESH::ListOfGroups& theToolGroups, - const char* theName ) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_Group_ptr CreateDimGroup( const SMESH::ListOfGroups& theGroups, - SMESH::ElementType theElemType, - const char* theName ) - throw (SALOME::SALOME_Exception); + const char* theName ); + SMESH::SMESH_Group_ptr CreateDimGroup( const SMESH::ListOfIDSources& theGroups, + SMESH::ElementType theElemType, + const char* theName, + SMESH::NB_COMMON_NODES_ENUM theNbCommonNodes, + CORBA::Boolean theUnderlyingOnly ); - SMESH::SMESH_Group_ptr ConvertToStandalone( SMESH::SMESH_GroupBase_ptr theGroupOn ) - throw (SALOME::SALOME_Exception); + SMESH::ListOfGroups* FaceGroupsSeparatedByEdges( CORBA::Double theSharpAngle, + CORBA::Boolean theCreateEdges, + CORBA::Boolean theUseExistingEdges ); - SMESH::log_array* GetLog(CORBA::Boolean clearAfterGet) - throw (SALOME::SALOME_Exception); + SMESH::SMESH_Group_ptr ConvertToStandalone( SMESH::SMESH_GroupBase_ptr theGroupOn ); - SMESH::SMESH_MeshEditor_ptr GetMeshEditor() throw (SALOME::SALOME_Exception); + SMESH::log_array* GetLog(CORBA::Boolean clearAfterGet); - SMESH::SMESH_MeshEditor_ptr GetMeshEditPreviewer() throw (SALOME::SALOME_Exception); + SMESH::SMESH_MeshEditor_ptr GetMeshEditor(); - CORBA::Boolean HasModificationsToDiscard() throw (SALOME::SALOME_Exception); + SMESH::SMESH_MeshEditor_ptr GetMeshEditPreviewer(); - void ClearLog() throw (SALOME::SALOME_Exception); + CORBA::Boolean HasModificationsToDiscard(); - CORBA::Long GetId() throw (SALOME::SALOME_Exception); + void ClearLog(); - CORBA::Long GetStudyId() throw (SALOME::SALOME_Exception); + CORBA::Long GetId(); // --- C++ interface @@ -188,222 +167,214 @@ public: SMESH_Gen_i* GetGen() { return _gen_i; } - int ImportUNVFile( const char* theFileName ) - throw (SALOME::SALOME_Exception); + int ImportUNVFile( const char* theFileName ); - int ImportSTLFile( const char* theFileName ) - throw (SALOME::SALOME_Exception); + int ImportSTLFile( const char* theFileName ); SMESH::ComputeError* ImportGMFFile( const char* theFileName, - bool theMakeRequiredGroups) - throw (SALOME::SALOME_Exception); + bool theMakeRequiredGroups); /*! * consult DriverMED_R_SMESHDS_Mesh::ReadStatus for returned value */ - SMESH::DriverMED_ReadStatus ImportMEDFile( const char* theFileName, const char* theMeshName ) - throw (SALOME::SALOME_Exception); + SMESH::DriverMED_ReadStatus ImportMEDFile( const char* theFileName, const char* theMeshName ); SMESH::DriverMED_ReadStatus ImportCGNSFile( const char* theFileName, const int theMeshIndex, - std::string& theMeshName) - throw (SALOME::SALOME_Exception); + std::string& theMeshName); /*! * Auto color */ - void SetAutoColor(CORBA::Boolean theAutoColor) - throw (SALOME::SALOME_Exception); + void SetAutoColor(CORBA::Boolean theAutoColor); - CORBA::Boolean GetAutoColor() - throw (SALOME::SALOME_Exception); + CORBA::Boolean GetAutoColor(); /*! Check group names for duplications. * Consider maximum group name length stored in MED file. */ CORBA::Boolean HasDuplicatedGroupNamesMED(); + /*! * Return string representation of a MED file version comprising nbDigits */ - char* GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits); + char* GetVersionString(CORBA::Long minor, CORBA::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) + */ + SMESH::long_array* GetMEDVersionsCompatibleForAppend(); - void ExportToMEDX( const char* file, - CORBA::Boolean auto_groups, - SMESH::MED_VERSION version, - CORBA::Boolean overwrite, - CORBA::Boolean autoDimension=true) throw (SALOME::SALOME_Exception); - void ExportToMED ( const char* file, - CORBA::Boolean auto_groups, - SMESH::MED_VERSION version ) throw (SALOME::SALOME_Exception); - void ExportMED ( const char* file, - CORBA::Boolean auto_groups ) throw (SALOME::SALOME_Exception); + void ExportMED( const char* file, + CORBA::Boolean auto_groups, + CORBA::Long version, + CORBA::Boolean overwrite, + CORBA::Boolean autoDimension = true); - void ExportSAUV( const char* file, CORBA::Boolean auto_groups ) throw (SALOME::SALOME_Exception); + CORBA::LongLong ExportMEDCoupling(CORBA::Boolean auto_groups, + CORBA::Boolean autoDimension = true); - void ExportDAT( const char* file ) throw (SALOME::SALOME_Exception); - void ExportUNV( const char* file ) throw (SALOME::SALOME_Exception); - void ExportSTL( const char* file, bool isascii ) throw (SALOME::SALOME_Exception); + void ExportSAUV( const char* file, CORBA::Boolean auto_groups ); + + void ExportDAT( const char* file, const CORBA::Boolean renumber ); + void ExportUNV( const char* file, const CORBA::Boolean renumber ); + void ExportSTL( const char* file, bool isascii ); void ExportCGNS(SMESH::SMESH_IDSource_ptr meshPart, const char* file, - CORBA::Boolean overwrite) throw (SALOME::SALOME_Exception); + CORBA::Boolean overwrite, + CORBA::Boolean groupElemsByType); void ExportGMF(SMESH::SMESH_IDSource_ptr meshPart, const char* file, - CORBA::Boolean withRequiredGroups) throw (SALOME::SALOME_Exception); + CORBA::Boolean withRequiredGroups); + + + template + void ExportPartToMEDCommon(SPECLS& speCls, + SMESH::SMESH_IDSource_ptr meshPart, + CORBA::Boolean auto_groups, + CORBA::Boolean autoDim, + const GEOM::ListOfFields& fields, + const char* geomAssocFields, + CORBA::Double ZTolerance, + CORBA::Boolean saveNumbers ); void ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart, const char* file, CORBA::Boolean auto_groups, - SMESH::MED_VERSION version, + CORBA::Long version, CORBA::Boolean overwrite, - CORBA::Boolean autoDim=true) throw (SALOME::SALOME_Exception); + CORBA::Boolean autoDim, + const GEOM::ListOfFields& fields, + const char* geomAssocFields, + CORBA::Double ZTolerance, + CORBA::Boolean saveNumbers ); + + CORBA::LongLong ExportPartToMEDCoupling(SMESH::SMESH_IDSource_ptr meshPart, + CORBA::Boolean auto_groups, + CORBA::Boolean autoDim, + const GEOM::ListOfFields& fields, + const char* geomAssocFields, + CORBA::Double ZTolerance, + CORBA::Boolean saveNumbers); + void ExportPartToDAT(SMESH::SMESH_IDSource_ptr meshPart, - const char* file) throw (SALOME::SALOME_Exception); + const char* file, + CORBA::Boolean renumber); void ExportPartToUNV(SMESH::SMESH_IDSource_ptr meshPart, - const char* file) throw (SALOME::SALOME_Exception); + const char* file, + CORBA::Boolean renumber); void ExportPartToSTL(SMESH::SMESH_IDSource_ptr meshPart, const char* file, - CORBA::Boolean isascii) throw (SALOME::SALOME_Exception); + CORBA::Boolean isascii); CORBA::Double GetComputeProgress(); - CORBA::Long NbNodes() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbNodes(); + + SMESH::smIdType NbElements(); - CORBA::Long NbElements() - throw (SALOME::SALOME_Exception); + SMESH::smIdType Nb0DElements(); - CORBA::Long Nb0DElements() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbBalls(); - CORBA::Long NbBalls() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbEdges(); - CORBA::Long NbEdges() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbEdgesOfOrder(SMESH::ElementOrder order); - CORBA::Long NbEdgesOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbFaces(); - CORBA::Long NbFaces() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbFacesOfOrder(SMESH::ElementOrder order); - CORBA::Long NbFacesOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbTriangles(); - CORBA::Long NbTriangles() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbTrianglesOfOrder(SMESH::ElementOrder order); - CORBA::Long NbTrianglesOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbBiQuadTriangles(); - CORBA::Long NbBiQuadTriangles() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbQuadrangles(); - CORBA::Long NbQuadrangles() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbQuadranglesOfOrder(SMESH::ElementOrder order); - CORBA::Long NbQuadranglesOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbBiQuadQuadrangles(); - CORBA::Long NbBiQuadQuadrangles() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbPolygons(); - CORBA::Long NbPolygons() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbPolygonsOfOrder(SMESH::ElementOrder order = SMESH::ORDER_ANY); - CORBA::Long NbVolumes() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbVolumes(); - CORBA::Long NbVolumesOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbVolumesOfOrder(SMESH::ElementOrder order); - CORBA::Long NbTetras() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbTetras(); - CORBA::Long NbTetrasOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbTetrasOfOrder(SMESH::ElementOrder order); - CORBA::Long NbHexas() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbHexas(); - CORBA::Long NbHexasOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbHexasOfOrder(SMESH::ElementOrder order); - CORBA::Long NbTriQuadraticHexas() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbTriQuadraticHexas(); - CORBA::Long NbPyramids() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbPyramids(); - CORBA::Long NbPyramidsOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbPyramidsOfOrder(SMESH::ElementOrder order); - CORBA::Long NbPrisms() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbPrisms(); - CORBA::Long NbPrismsOfOrder(SMESH::ElementOrder order) - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbPrismsOfOrder(SMESH::ElementOrder order); - CORBA::Long NbHexagonalPrisms() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbHexagonalPrisms(); - CORBA::Long NbPolyhedrons() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbPolyhedrons(); - CORBA::Long NbSubMesh() - throw (SALOME::SALOME_Exception); + SMESH::smIdType NbSubMesh(); - SMESH::long_array* GetElementsId() - throw (SALOME::SALOME_Exception); + SMESH::smIdType_array* GetElementsId(); - SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType ) - throw (SALOME::SALOME_Exception); + SMESH::smIdType_array* GetElementsByType( SMESH::ElementType theElemType ); - SMESH::long_array* GetNodesId() - throw (SALOME::SALOME_Exception); + SMESH::smIdType_array* GetNodesId(); - SMESH::ElementType GetElementType( CORBA::Long id, bool iselem ) - throw (SALOME::SALOME_Exception); + SMESH::ElementType GetElementType( SMESH::smIdType id, bool iselem ); - SMESH::EntityType GetElementGeomType( CORBA::Long id ) - throw (SALOME::SALOME_Exception); + SMESH::EntityType GetElementGeomType( SMESH::smIdType id ); - SMESH::GeometryType GetElementShape( CORBA::Long id ) - throw (SALOME::SALOME_Exception); + SMESH::GeometryType GetElementShape( SMESH::smIdType id ); /*! * Returns ID of elements for given submesh */ - SMESH::long_array* GetSubMeshElementsId(CORBA::Long ShapeID) - throw (SALOME::SALOME_Exception); + SMESH::smIdType_array* GetSubMeshElementsId(CORBA::Long ShapeID); /*! * Returns ID of nodes for given submesh * If param all==true - returns all nodes, else - * returns only nodes on shapes. */ - SMESH::long_array* GetSubMeshNodesId(CORBA::Long ShapeID, CORBA::Boolean all) - throw (SALOME::SALOME_Exception); + SMESH::smIdType_array* GetSubMeshNodesId(CORBA::Long ShapeID, CORBA::Boolean all); /*! * Returns type of elements for given submesh */ - SMESH::ElementType GetSubMeshElementType(CORBA::Long ShapeID) - throw (SALOME::SALOME_Exception); + SMESH::ElementType GetSubMeshElementType(CORBA::Long ShapeID); char* Dump(); // Create groups of elements preventing computation of a sub-shape SMESH::ListOfGroups* MakeGroupsOfBadInputElements( int theSubShapeID, - const char* theGroupName) - throw (SALOME::SALOME_Exception); + const char* theGroupName); + // =================================================== // Internal methods not available through CORBA // They are called by corresponding interface methods - SMESH_Hypothesis::Hypothesis_Status addHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp); + // =================================================== - SMESH_Hypothesis::Hypothesis_Status removeHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, + SMESH_Hypothesis::Hypothesis_Status addHypothesis(GEOM::GEOM_Object_ptr aSubShape, + SMESH::SMESH_Hypothesis_ptr anHyp, + std::string* anErrorText=0); + + SMESH_Hypothesis::Hypothesis_Status removeHypothesis(GEOM::GEOM_Object_ptr aSubShape, SMESH::SMESH_Hypothesis_ptr anHyp); static SMESH::Hypothesis_Status @@ -420,6 +391,7 @@ public: SMESH::SMESH_GroupBase_ptr createGroup(SMESH::ElementType theElemType, const char* theName, + const int theID = -1, const TopoDS_Shape& theShape = TopoDS_Shape(), const SMESH_PredicatePtr& thePred = SMESH_PredicatePtr()); @@ -431,15 +403,19 @@ public: const std::map& getGroups() { return _mapGroups; } // return existing group objects - void onHypothesisModified(); + void onHypothesisModified(int theHypID, bool updateIcons); // callback from _impl to forget not loaded mesh data (issue 0021208) - void checkMeshLoaded(); - + /*! + * \brief Update data if geometry changes + * + * Issue 0022501 + */ + void CheckGeomModif( bool isBreakLink = false ); /*! * \brief Update hypotheses assigned to geom groups if the latter change * - * NPAL16168: "geometrical group edition from a submesh don't modifiy mesh computation" + * NPAL16168: "geometrical group edition from a submesh don't modify mesh computation" */ void CheckGeomGroupModif(); @@ -450,6 +426,16 @@ public: */ void CreateGroupServants(); + /*! + * \brief Return true if all sub-meshes are computed OK - to update an icon + */ + bool IsComputedOK(); + + + // ==================================== + // SMESH_Mesh interface (continuation) + // ==================================== + /*! * \brief Return groups cantained in _mapGroups by their IDs */ @@ -459,81 +445,82 @@ public: * Get XYZ coordinates of node as list of double * If there is not node for given ID - returns empty list */ - SMESH::double_array* GetNodeXYZ(CORBA::Long id); + SMESH::double_array* GetNodeXYZ(SMESH::smIdType id); /*! * For given node returns list of IDs of inverse elements * If there is not node for given ID - returns empty list */ - SMESH::long_array* GetNodeInverseElements(CORBA::Long id); + SMESH::smIdType_array* GetNodeInverseElements(SMESH::smIdType id, + SMESH::ElementType elemType); /*! * \brief Return position of a node on shape */ - SMESH::NodePosition* GetNodePosition(CORBA::Long NodeID); + SMESH::NodePosition* GetNodePosition(SMESH::smIdType NodeID); /*! * \brief Return position of an element on shape */ - SMESH::ElementPosition GetElementPosition(CORBA::Long ElemID); + SMESH::ElementPosition GetElementPosition(SMESH::smIdType ElemID); /*! * If given element is node returns IDs of shape from position * If there is not node for given ID - returns -1 */ - CORBA::Long GetShapeID(CORBA::Long id); + CORBA::Long GetShapeID(SMESH::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 */ - CORBA::Long GetShapeIDForElem(CORBA::Long id); + CORBA::Long GetShapeIDForElem(SMESH::smIdType id); /*! * Returns number of nodes for given element * If there is not element for given ID - returns -1 */ - CORBA::Long GetElemNbNodes(CORBA::Long id); + CORBA::Short GetElemNbNodes(SMESH::smIdType id); /*! * Returns IDs of nodes of given element */ - SMESH::long_array* GetElemNodes(CORBA::Long id); + SMESH::smIdType_array* GetElemNodes(SMESH::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 */ - CORBA::Long GetElemNode(CORBA::Long id, CORBA::Long index); + SMESH::smIdType GetElemNode(SMESH::smIdType id, CORBA::Short index); /*! * Returns true if given node is medium node * in given quadratic element */ - CORBA::Boolean IsMediumNode(CORBA::Long ide, CORBA::Long idn); + CORBA::Boolean IsMediumNode(SMESH::smIdType ide, SMESH::smIdType idn); /*! * Returns true if given node is medium node * in one of quadratic elements */ - CORBA::Boolean IsMediumNodeOfAnyElem(CORBA::Long idn, - SMESH::ElementType theElemType); + CORBA::Boolean IsMediumNodeOfAnyElem(SMESH::smIdType idn, + SMESH::ElementType elemType); /*! * Returns number of edges for given element */ - CORBA::Long ElemNbEdges(CORBA::Long id); + CORBA::Long ElemNbEdges(SMESH::smIdType id); /*! * Returns number of faces for given element */ - CORBA::Long ElemNbFaces(CORBA::Long id); + CORBA::Long ElemNbFaces(SMESH::smIdType id); /*! * Returns nodes of given face (counted from zero) for given element. */ - SMESH::long_array* GetElemFaceNodes(CORBA::Long elemId, CORBA::Short faceIndex); + SMESH::smIdType_array* GetElemFaceNodes(SMESH::smIdType elemId, CORBA::Short faceIndex); /*! * Returns three components of normal of given mesh face (or an empty array in KO case) @@ -543,33 +530,51 @@ public: /*! * Returns an element based on all given nodes. */ - CORBA::Long FindElementByNodes(const SMESH::long_array& nodes); + SMESH::smIdType FindElementByNodes(const SMESH::smIdType_array& nodes); + + /*! + * Return elements including all given nodes. + */ + SMESH::smIdType_array* GetElementsByNodes(const SMESH::smIdType_array& nodes, + SMESH::ElementType elemType); /*! * Returns true if given element is polygon */ - CORBA::Boolean IsPoly(CORBA::Long id); + CORBA::Boolean IsPoly(SMESH::smIdType id); /*! * Returns true if given element is quadratic */ - CORBA::Boolean IsQuadratic(CORBA::Long id); + CORBA::Boolean IsQuadratic(SMESH::smIdType id); /*! * Returns diameter of ball discrete element or zero in case of an invalid \a id */ - CORBA::Double GetBallDiameter(CORBA::Long id); + CORBA::Double GetBallDiameter(SMESH::smIdType id); /*! * Returns bary center for given element */ - SMESH::double_array* BaryCenter(CORBA::Long id); + SMESH::double_array* BaryCenter(SMESH::smIdType id); /*! * Returns information about imported MED file */ virtual SMESH::MedFileInfo* GetMEDFileInfo(); + /*! + * Persistence of file info + */ + std::string FileInfoToString(); + void FileInfoFromString(const std::string& info); + + /*! + * Persistence of geometry tick + */ + int& MainShapeTick() { return _mainShapeTick; } + + /*! * Sets list of notebook variables used for Mesh operations separated by ":" symbol */ @@ -585,6 +590,10 @@ public: */ SMESH::string_array* GetLastParameters(); + /*! + * \brief Return \c true if a meshing order not yet set for a concurrent sub-mesh + */ + CORBA::Boolean IsUnorderedSubMesh(CORBA::Long submeshID); /*! * \brief Return submesh objects list in meshing order */ @@ -599,7 +608,7 @@ public: * Collect statistic of mesh elements given by iterator */ static void CollectMeshInfo(const SMDS_ElemIteratorPtr theItr, - SMESH::long_array& theInfo); + SMESH::smIdType_array& theInfo); /*! * \brief Return iterator on elements of given type in given object */ @@ -610,17 +619,17 @@ public: // SMESH_IDSource interface // ========================= - virtual SMESH::long_array* GetIDs(); + virtual SMESH::smIdType_array* GetIDs(); /*! * Returns number of mesh elements of each \a EntityType * Result array of number of elements per \a EntityType * Inherited from SMESH_IDSource */ - virtual SMESH::long_array* GetMeshInfo(); + virtual SMESH::smIdType_array* GetMeshInfo(); /*! * Returns number of mesh elements of each \a ElementType */ - virtual SMESH::long_array* GetNbElementsByType(); + virtual SMESH::smIdType_array* GetNbElementsByType(); /*! * Returns types of elements it contains */ @@ -634,13 +643,26 @@ public: * happen if mesh data is not yet fully loaded from the file of study. */ bool IsMeshInfoCorrect(); + /*! + * Returns mesh unstructed grid information. + */ + virtual SALOMEDS::TMPFile* GetVtkUgStream(); + std::map _mapSubMesh_i; //NRI std::map _mapSubMesh; //NRI -private: +public: + std::string generateMeshName( ); std::string prepareMeshNameAndGroups( const char* file, CORBA::Boolean overwrite ); - + /* + * Write GEOM fields to MED file + */ + void exportMEDFields( DriverMED_W_Field & writer, + SMESHDS_Mesh* meshDS, + const GEOM::ListOfFields& fields, + const char* geomAssocFields); +private: /*! * Check and correct names of mesh groups */ @@ -653,13 +675,18 @@ private: SMESH::submesh_array_array& theSubMeshOrder, const bool theIsDump); -private: + /*! + * \brief Finds concurrent sub-meshes + */ + TListOfListOfInt findConcurrentSubMeshes(); + + private: static int _idGenerator; ::SMESH_Mesh* _impl; // :: force no namespace here SMESH_Gen_i* _gen_i; int _id; // id given by creator (unique within the creator instance) - int _studyId; + int _nbInvalidHypos; std::map _mapSubMeshIor; std::map _mapGroups; std::map _mapHypo; @@ -682,6 +709,7 @@ private: CORBA::Object_var _smeshObject; // SMESH object depending on GEOM group }; std::list _geomGroupData; + int _mainShapeTick; // to track modifications of the meshed shape /*! * Remember GEOM group data @@ -695,7 +723,7 @@ private: /*! * Return new group contents if it has been changed and update group data */ - TopoDS_Shape newGroupShape( TGeomGroupData & groupData); + TopoDS_Shape newGroupShape( TGeomGroupData & groupData, int how ); };