-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019 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
class SALOME_LifeCycleCORBA;
// ===========================================================
-// Study context - stores study-connected objects references
+// Study context - store study-connected objects references
// ==========================================================
class SMESH_I_EXPORT StudyContext
{
public:
// constructor
StudyContext() {}
-
// register object in the internal map and return its id
- int addObject( std::string theIOR )
- {
- int nextId = getNextId();
- mapIdToIOR.Bind( nextId, theIOR );
- return nextId;
- }
+ int addObject( const std::string& theIOR );
// find the object id in the internal map by the IOR
- int findId( std::string theIOR )
- {
- TInt2StringMap::iterator imap;
- for ( imap = mapIdToIOR.begin(); imap != mapIdToIOR.end(); ++imap ) {
- if ( *imap == theIOR )
- return imap.Iterator().Key();
- }
- return 0;
- }
+ int findId( const std::string& theIOR );
// get object's IOR by id
- std::string getIORbyId( const int theId )
- {
- if ( mapIdToIOR.IsBound( theId ) )
- return mapIdToIOR( theId );
- return std::string();
- }
+ std::string getIORbyId( const int theId );
// get object's IOR by old id
- std::string getIORbyOldId( const int theOldId )
- {
- if ( mapIdToId.IsBound( theOldId ) )
- return getIORbyId( mapIdToId( theOldId ));
- return std::string();
- }
+ std::string getIORbyOldId( const int theOldId );
// maps old object id to the new one (used when restoring data)
- void mapOldToNew( const int oldId, const int newId ) {
- mapIdToId.Bind( oldId, newId );
- }
+ void mapOldToNew( const int oldId, const int newId );
// get old id by a new one
- int getOldId( const int newId ) {
- TInt2IntMap::iterator imap;
- for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) {
- if ( *imap == newId )
- return imap.Iterator().Key();
- }
- return 0;
- }
+ int getOldId( const int newId );
+ // clear data
+ void Clear();
private:
// get next free object identifier
- int getNextId()
- {
- int id = 1;
- while( mapIdToIOR.IsBound( id ) )
- id++;
- return id;
- }
+ int getNextId() { return mapIdToIOR.Extent() + 1; }
TInt2StringMap mapIdToIOR; // persistent-to-transient map
TInt2IntMap mapIdToId; // to translate object from persistent to transient form
// Get SALOME_LifeCycleCORBA object
static SALOME_LifeCycleCORBA* GetLCC();
// Retrieve and get GEOM engine reference
- static GEOM::GEOM_Gen_var GetGeomEngine();
+ static GEOM::GEOM_Gen_var GetGeomEngine( bool isShaper );
+ static GEOM::GEOM_Gen_var GetGeomEngine( GEOM::GEOM_Object_ptr );
// Get object of the CORBA reference
static PortableServer::ServantBase_var GetServant( CORBA::Object_ptr theObject );
// Get CORBA object corresponding to the SALOMEDS::SObject
// Get the SALOMEDS::SObject corresponding to a CORBA object
static SALOMEDS::SObject_ptr ObjectToSObject(CORBA::Object_ptr theObject);
// Get the SALOMEDS::Study from naming service
- static SALOMEDS::Study_ptr getStudyServant();
+ static SALOMEDS::Study_var getStudyServant();
// Get GEOM Object corresponding to TopoDS_Shape
GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape );
// Get TopoDS_Shape corresponding to GEOM_Object
// Update study
void UpdateStudy();
- // Create hypothesis/algorothm of given type
+ // Create hypothesis/algorithm of given type
SMESH::SMESH_Hypothesis_ptr CreateHypothesis (const char* theHypType,
const char* theLibName)
throw ( SALOME::SALOME_Exception );
SMESH::SMESH_Mesh_ptr CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
const char* meshName,
CORBA::Boolean toCopyGroups,
- CORBA::Boolean toKeepIDs);
+ CORBA::Boolean toKeepIDs)
+ throw ( SALOME::SALOME_Exception );
- // Compute mesh on a shape
+ // Create a mesh by copying definitions of another mesh to a given geometry
+ CORBA::Boolean CopyMeshWithGeom( SMESH::SMESH_Mesh_ptr sourceMesh,
+ GEOM::GEOM_Object_ptr newGeometry,
+ const char* meshName,
+ CORBA::Boolean toCopyGroups,
+ CORBA::Boolean toReuseHypotheses,
+ CORBA::Boolean toCopyElements,
+ SMESH::SMESH_Mesh_out newMesh,
+ SMESH::ListOfGroups_out newGroups,
+ SMESH::submesh_array_out newSubmeshes,
+ SMESH::ListOfHypothesis_out newHypotheses,
+ SMESH::string_array_out invalidEntries)
+ throw ( SALOME::SALOME_Exception );
+
+ // Compute mesh on a shape
CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
GEOM::GEOM_Object_ptr theShapeObject )
throw ( SALOME::SALOME_Exception );
// Returns errors of hypotheses definition
SMESH::algo_error_array* GetAlgoState( SMESH::SMESH_Mesh_ptr theMesh,
GEOM::GEOM_Object_ptr theSubObject )
- throw ( SALOME::SALOME_Exception );
+ throw ( SALOME::SALOME_Exception );
// Return mesh elements preventing computation of a subshape
SMESH::MeshPreviewStruct* GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
CORBA::Boolean uniteIdenticalGroups,
CORBA::Boolean mergeNodesAndElements,
CORBA::Double mergeTolerance,
- CORBA::Boolean commonGroups)
+ CORBA::Boolean commonGroups,
+ SMESH::SMESH_Mesh_ptr meshToAppendTo)
throw ( SALOME::SALOME_Exception );
// Concatenate the given meshes into one mesh
SMESH::SMESH_Mesh_ptr Concatenate(const SMESH::ListOfIDSources& meshesArray,
CORBA::Boolean uniteIdenticalGroups,
CORBA::Boolean mergeNodesAndElements,
- CORBA::Double mergeTolerance)
+ CORBA::Double mergeTolerance,
+ SMESH::SMESH_Mesh_ptr meshToAppendTo)
throw ( SALOME::SALOME_Exception );
// Concatenate the given meshes into one mesh
SMESH::SMESH_Mesh_ptr ConcatenateWithGroups(const SMESH::ListOfIDSources& meshesArray,
CORBA::Boolean uniteIdenticalGroups,
CORBA::Boolean mergeNodesAndElements,
- CORBA::Double mergeTolerance)
+ CORBA::Double mergeTolerance,
+ SMESH::SMESH_Mesh_ptr meshToAppendTo)
throw ( SALOME::SALOME_Exception );
// Get version of MED format being used.
// Get MED version of the file by its name
char* GetMEDVersion(const char* theFileName);
- // Check compatibility of file with MED format being used.
+ // Check compatibility of file with MED format being used, read only.
CORBA::Boolean CheckCompatibility(const char* theFileName);
+ // Check compatibility of file with MED format being used, for append on write.
+ CORBA::Boolean CheckWriteCompatibility(const char* theFileName);
+
// Get names of meshes defined in file with the specified name
SMESH::string_array* GetMeshNames(const char* theFileName);
SMESH::SMESH_GroupBase_ptr theGroup,
GEOM::GEOM_Object_ptr theShapeObject,
const char* theName = 0);
+ void UpdateIcons(SMESH::SMESH_Mesh_ptr theMesh);
+ void HighLightInvalid(CORBA::Object_ptr theObject, bool isInvalid);
bool AddHypothesisToShape(SMESH::SMESH_Mesh_ptr theMesh,
GEOM::GEOM_Object_ptr theShapeObject,
SMESH::SMESH_Hypothesis_ptr theHyp);
SMESH::SMESH_Mesh_ptr createMesh()
throw ( SALOME::SALOME_Exception );
- static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot );
+ // Create a sub-mesh on a geometry that is not a sub-shape of the main shape
+ // for the case where a valid sub-shape not found by CopyMeshWithGeom()
+ SMESH::SMESH_subMesh_ptr createInvalidSubMesh( SMESH::SMESH_Mesh_ptr mesh,
+ GEOM::GEOM_Object_ptr strangerGeom,
+ const char* name );
+
+ void highLightInvalid( SALOMEDS::SObject_ptr theSObject, bool isInvalid );
SMESH::mesh_array* CreateMeshesFromMEDorSAUV( const char* theFileName,
SMESH::DriverMED_ReadStatus& theStatus,