X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i.hxx;h=452065cd677d06b1787e717ccaadbcba953833fb;hp=adda866b86f2e5566fb54bad690fa5a8cecedf82;hb=127d2277c6a516d0e9fadd77b4ef0b0c6286cf17;hpb=c111d3b52022abe32107b0b3737c2a6ff4137164 diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index adda866b8..452065cd6 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -1,34 +1,35 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses +// Copyright (C) 2007-2008 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 // -// 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 +// 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 +// +// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses // File : SMESH_Gen_i.hxx // Author : Paul RASCLE, EDF // Module : SMESH // $Header$ - +// #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) @@ -44,9 +45,13 @@ #include "SMESH_Gen.hxx" #include "GEOM_Client.hxx" -#include "SMESH_Factory.hxx" + +#include +#include +#include #include +#include class SMESH_Mesh_i; class SALOME_LifeCycleCORBA; @@ -54,7 +59,7 @@ class SALOME_LifeCycleCORBA; // =========================================================== // Study context - stores study-connected objects references // ========================================================== -class StudyContext +class SMESH_I_EXPORT StudyContext { public: // constructor @@ -100,6 +105,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 @@ -118,10 +132,9 @@ 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 virtual SMESH::Factory + public virtual Engines_Component_i { public: // Get last created instance of the class @@ -158,10 +171,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 ); @@ -173,10 +193,21 @@ 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_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 ); @@ -192,7 +223,13 @@ public: // Compute mesh on a shape CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject ) + 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 @@ -200,20 +237,58 @@ public: 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_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) // **************************************************** - virtual - SALOMEDS::TMPFile* - DumpPython(CORBA::Object_ptr theStudy, - CORBA::Boolean theIsPublished, - CORBA::Boolean& theIsValidScript); // Save SMESH data SALOMEDS::TMPFile* Save( SALOMEDS::SComponent_ptr theComponent, @@ -280,6 +355,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 (SALOMEDS::Study_ptr theStudy, + 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 // ***************************************** @@ -344,9 +445,29 @@ public: // 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 @@ -361,7 +482,7 @@ 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 @@ -376,7 +497,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