X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i.hxx;h=ae64c11759fe870ace33dfb2d1c40fd15193f67b;hb=ddd20dd94358856385f639219bbdfbd1e14239d7;hp=77e3adf43dd87d6c721b48507ffe3041212d2a28;hpb=c3bf92bd87b770fd81631a3853f7f5bb1ac6a4e8;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 77e3adf43..ae64c1175 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -17,7 +17,7 @@ // 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 +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -29,12 +29,13 @@ #ifndef _SMESH_GEN_I_HXX_ #define _SMESH_GEN_I_HXX_ +#include "SMESH.hxx" + #include #include CORBA_SERVER_HEADER(SMESH_Gen) #include CORBA_SERVER_HEADER(SMESH_Mesh) #include CORBA_SERVER_HEADER(SMESH_Hypothesis) #include CORBA_CLIENT_HEADER(GEOM_Gen) -#include CORBA_CLIENT_HEADER(GEOM_Shape) #include CORBA_CLIENT_HEADER(SALOMEDS) #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) @@ -44,10 +45,14 @@ #include "SALOME_NamingService.hxx" #include "SMESH_Gen.hxx" -#include "SMESH_topo.hxx" #include "GEOM_Client.hxx" +#include +#include +#include + #include +#include class SMESH_Mesh_i; class SALOME_LifeCycleCORBA; @@ -55,7 +60,7 @@ class SALOME_LifeCycleCORBA; // =========================================================== // Study context - stores study-connected objects references // ========================================================== -class StudyContext +class SMESH_I_EXPORT StudyContext { public: // constructor @@ -101,6 +106,15 @@ public: void mapOldToNew( const int oldId, const int newId ) { mapIdToId[ oldId ] = newId; } + // get old id by a new one + int getOldId( const int newId ) { + map::iterator imap; + for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) { + if ( imap->second == newId ) + return imap->first; + } + return 0; + } private: // get next free object identifier @@ -119,11 +133,13 @@ private: // =========================================================== // SMESH module's engine // ========================================================== -class SMESH_Gen_i: +class SMESH_I_EXPORT SMESH_Gen_i: public virtual POA_SMESH::SMESH_Gen, public virtual Engines_Component_i { public: + // Get last created instance of the class + static SMESH_Gen_i* GetSMESHGen() { return mySMESHGen;} // Get ORB object static CORBA::ORB_var GetORB() { return myOrb;} // Get SMESH module's POA object @@ -138,7 +154,14 @@ public: static PortableServer::ServantBase_var GetServant( CORBA::Object_ptr theObject ); // Get CORBA object corresponding to the SALOMEDS::SObject static CORBA::Object_var SObjectToObject( SALOMEDS::SObject_ptr theSObject ); - + // Get the SALOMEDS::SObject corresponding to a CORBA object + static SALOMEDS::SObject_ptr ObjectToSObject(SALOMEDS::Study_ptr theStudy, + CORBA::Object_ptr theObject); + // Get GEOM Object correspoding to TopoDS_Shape + GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape ); + // Get TopoDS_Shape correspoding to GEOM_Object + TopoDS_Shape GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject); + // Default constructor SMESH_Gen_i(); // Standard constructor @@ -149,10 +172,17 @@ public: const char* interfaceName ); // Destructor virtual ~SMESH_Gen_i(); - + // ***************************************** // Interface methods // ***************************************** + //GEOM::GEOM_Gen_ptr SetGeomEngine( const char* containerLoc ); + void SetGeomEngine( GEOM::GEOM_Gen_ptr geomcompo ); + + // Set current study + void SetEmbeddedMode( CORBA::Boolean theMode ); + // Get current study + CORBA::Boolean IsEmbeddedMode(); // Set current study void SetCurrentStudy( SALOMEDS::Study_ptr theStudy ); @@ -164,8 +194,23 @@ public: const char* theLibName) throw ( SALOME::SALOME_Exception ); + // Return hypothesis of given type holding parameter values of the existing mesh + SMESH::SMESH_Hypothesis_ptr GetHypothesisParameterValues (const char* theHypType, + const char* theLibName, + SMESH::SMESH_Mesh_ptr theMesh, + GEOM::GEOM_Object_ptr theGeom) + throw ( SALOME::SALOME_Exception ); + // Create empty mesh on a shape - SMESH::SMESH_Mesh_ptr CreateMesh( GEOM::GEOM_Shape_ptr theShape ) + SMESH::SMESH_Mesh_ptr CreateMesh( GEOM::GEOM_Object_ptr theShapeObject ) + throw ( SALOME::SALOME_Exception ); + + // Create empty mesh + SMESH::SMESH_Mesh_ptr CreateEmptyMesh() + throw ( SALOME::SALOME_Exception ); + + // Create mesh(es) and import data from UNV file + SMESH::SMESH_Mesh_ptr CreateMeshesFromUNV( const char* theFileName ) throw ( SALOME::SALOME_Exception ); // Create mesh(es) and import data from MED file @@ -173,21 +218,74 @@ public: SMESH::DriverMED_ReadStatus& theStatus ) throw ( SALOME::SALOME_Exception ); + // Create mesh(es) and import data from STL file + SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName ) + throw ( SALOME::SALOME_Exception ); + // Compute mesh on a shape CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Shape_ptr theShape ) + GEOM::GEOM_Object_ptr theShapeObject ) + throw ( SALOME::SALOME_Exception ); + /*! + * \brief Return errors of mesh computation + */ + SMESH::compute_error_array* GetComputeErrors(SMESH::SMESH_Mesh_ptr theMesh, + GEOM::GEOM_Object_ptr theShapeObject ) throw ( SALOME::SALOME_Exception ); // Returns true if mesh contains enough data to be computed CORBA::Boolean IsReadyToCompute( SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Shape_ptr theShape ) + GEOM::GEOM_Object_ptr theShapeObject ) + throw ( SALOME::SALOME_Exception ); + + // Returns errors of hypotheses definintion + SMESH::algo_error_array* GetAlgoState( SMESH::SMESH_Mesh_ptr theMesh, + GEOM::GEOM_Object_ptr theSubObject ) + throw ( SALOME::SALOME_Exception ); + + // Return mesh elements preventing computation of a subshape + SMESH::MeshPreviewStruct* GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh, + CORBA::Short theSubShapeID ) throw ( SALOME::SALOME_Exception ); // Get sub-shapes unique ID's list - SMESH::long_array* GetSubShapesId( GEOM::GEOM_Shape_ptr theMainShape, - const SMESH::shape_array& theListOfSubShape ) + SMESH::long_array* GetSubShapesId( GEOM::GEOM_Object_ptr theMainShapeObject, + const SMESH::object_array& theListOfSubShape ) + throw ( SALOME::SALOME_Exception ); + + // Return geometrical object the given element is built on. Publish it in study. + GEOM::GEOM_Object_ptr GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr theMesh, + CORBA::Long theElementID, + const char* theGeomName) + throw ( SALOME::SALOME_Exception ); + + // Return geometrical object the given element is built on. Don't publish it in study. + GEOM::GEOM_Object_ptr FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr theMesh, + CORBA::Long theElementID) + throw ( SALOME::SALOME_Exception ); + + // Concatenate the given meshes into one mesh + SMESH::SMESH_Mesh_ptr ConcatenateCommon(const SMESH::mesh_array& theMeshesArray, + CORBA::Boolean theUniteIdenticalGroups, + CORBA::Boolean theMergeNodesAndElements, + CORBA::Double theMergeTolerance, + CORBA::Boolean theCommonGroups) throw ( SALOME::SALOME_Exception ); + // Concatenate the given meshes into one mesh + SMESH::SMESH_Mesh_ptr Concatenate(const SMESH::mesh_array& theMeshesArray, + CORBA::Boolean theUniteIdenticalGroups, + CORBA::Boolean theMergeNodesAndElements, + CORBA::Double theMergeTolerance) + throw ( SALOME::SALOME_Exception ); + + // Concatenate the given meshes into one mesh + // Create the groups of all elements from initial meshes + SMESH::SMESH_Mesh_ptr ConcatenateWithGroups(const SMESH::mesh_array& theMeshesArray, + CORBA::Boolean theUniteIdenticalGroups, + CORBA::Boolean theMergeNodesAndElements, + CORBA::Double theMergeTolerance) + throw ( SALOME::SALOME_Exception ); // **************************************************** // Interface inherited methods (from SALOMEDS::Driver) @@ -195,8 +293,8 @@ public: // Save SMESH data SALOMEDS::TMPFile* Save( SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile ); + const char* theURL, + bool isMultiFile ); // Load SMESH data bool Load( SALOMEDS::SComponent_ptr theComponent, const SALOMEDS::TMPFile& theStream, @@ -215,6 +313,9 @@ public: // Create filter manager SMESH::FilterManager_ptr CreateFilterManager(); + // Return a pattern mesher + SMESH::SMESH_Pattern_ptr GetPattern(); + // Clears study-connected data when it is closed void Close( SALOMEDS::SComponent_ptr theComponent ); @@ -255,6 +356,32 @@ public: return aResultSO._retn(); } + // ============ + // Dump python + // ============ + + virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy, + CORBA::Boolean isPublished, + CORBA::Boolean& isValidScript); + + void AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString); + + void RemoveLastFromPythonScript (int theStudyID); + + void SavePython (SALOMEDS::Study_ptr theStudy); + + TCollection_AsciiString DumpPython_impl (int theStudyID, + Resource_DataMapOfAsciiStringAsciiString& theObjectNames, + Resource_DataMapOfAsciiStringAsciiString& theNames, + bool isPublished, + bool& aValidScript, + const TCollection_AsciiString& theSavedTrace); + + TCollection_AsciiString GetNewPythonLines (int theStudyID); + + void CleanPythonTrace (int theStudyID); + + // ***************************************** // Internal methods // ***************************************** @@ -273,14 +400,76 @@ public: static long GetSubMeshOnFaceTag(); static long GetSubMeshOnSolidTag(); static long GetSubMeshOnCompoundTag(); + static long GetSubMeshOnWireTag(); + static long GetSubMeshOnShellTag(); static long GetNodeGroupsTag(); static long GetEdgeGroupsTag(); static long GetFaceGroupsTag(); static long GetVolumeGroupsTag(); + // publishing methods + SALOMEDS::SComponent_ptr PublishComponent(SALOMEDS::Study_ptr theStudy); + SALOMEDS::SObject_ptr PublishMesh (SALOMEDS::Study_ptr theStudy, + SMESH::SMESH_Mesh_ptr theMesh, + const char* theName = 0); + SALOMEDS::SObject_ptr PublishHypothesis (SALOMEDS::Study_ptr theStudy, + SMESH::SMESH_Hypothesis_ptr theHyp, + const char* theName = 0); + SALOMEDS::SObject_ptr PublishSubMesh (SALOMEDS::Study_ptr theStudy, + SMESH::SMESH_Mesh_ptr theMesh, + SMESH::SMESH_subMesh_ptr theSubMesh, + GEOM::GEOM_Object_ptr theShapeObject, + const char* theName = 0); + SALOMEDS::SObject_ptr PublishGroup (SALOMEDS::Study_ptr theStudy, + SMESH::SMESH_Mesh_ptr theMesh, + SMESH::SMESH_GroupBase_ptr theGroup, + GEOM::GEOM_Object_ptr theShapeObject, + const char* theName = 0); + bool AddHypothesisToShape(SALOMEDS::Study_ptr theStudy, + SMESH::SMESH_Mesh_ptr theMesh, + GEOM::GEOM_Object_ptr theShapeObject, + SMESH::SMESH_Hypothesis_ptr theHyp); + bool RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy, + SMESH::SMESH_Mesh_ptr theMesh, + GEOM::GEOM_Object_ptr theShapeObject, + SMESH::SMESH_Hypothesis_ptr theHyp); + SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SALOMEDS::Study_ptr theStudy, + SMESH::SMESH_Mesh_ptr theMesh, + GEOM::GEOM_Object_ptr theShape); + static void SetName(SALOMEDS::SObject_ptr theSObject, + const char* theName, + const char* theDefaultName = 0); + // Get study context StudyContext* GetCurrentStudyContext(); - + + // Register an object in a StudyContext; return object id + int RegisterObject(CORBA::Object_ptr theObject); + + // Return id of registered object + CORBA::Long GetObjectId(CORBA::Object_ptr theObject); + + // Return an object that previously had an oldID + template + typename TInterface::_var_type GetObjectByOldId( const int oldID ) + { + if ( StudyContext* myStudyContext = GetCurrentStudyContext() ) { + string ior = myStudyContext->getIORbyOldId( oldID ); + if ( !ior.empty() ) + return TInterface::_narrow(GetORB()->string_to_object( ior.c_str() )); + } + return TInterface::_nil(); + } + + // Get current study ID + int GetCurrentStudyID() + { return myCurrentStudy->_is_nil() ? -1 : myCurrentStudy->StudyId(); } + + /*! + * \brief Find SObject for an algo + */ + SALOMEDS::SObject_ptr GetAlgoSO(const ::SMESH_Algo* algo); + private: // Create hypothesis of given type SMESH::SMESH_Hypothesis_ptr createHypothesis( const char* theHypName, @@ -294,12 +483,12 @@ private: static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot ); private: - + static GEOM::GEOM_Gen_var myGeomGen; static CORBA::ORB_var myOrb; // ORB reference static PortableServer::POA_var myPoa; // POA reference static SALOME_NamingService* myNS; // Naming Service static SALOME_LifeCycleCORBA* myLCC; // Life Cycle CORBA - + static SMESH_Gen_i* mySMESHGen; // Point to last created instance of the class ::SMESH_Gen myGen; // SMESH_Gen local implementation // hypotheses managing @@ -309,6 +498,22 @@ private: GEOM_Client* myShapeReader; // Shape reader SALOMEDS::Study_var myCurrentStudy; // Current study + CORBA::Boolean myIsEmbeddedMode; // Current mode + + // Dump Python: trace of API methods calls + std::map < int, Handle(TColStd_HSequenceOfAsciiString) > myPythonScripts; }; + +namespace SMESH +{ + template + T + DownCast(CORBA::Object_ptr theArg) + { + return dynamic_cast(SMESH_Gen_i::GetServant(theArg).in()); + } +} + + #endif