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=1e869462cd65cf08dc9936b82e669d92e7550975;hp=746f73765029ed22d53a0120bdb47e062615a90c;hb=1a3a88cfc996394b2c79f2cf374c8f3c4140f036;hpb=1067ffa6e7e5c394e3a1b17219d8b355a57607cd diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 746f73765..1e869462c 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -36,13 +36,15 @@ #include CORBA_CLIENT_HEADER(SALOMEDS) #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include "SMESH_Gen.hxx" #include "SMESH_Mesh_i.hxx" #include "SMESH_Hypothesis_i.hxx" -#include "SALOME_Component_i.hxx" -#include "SALOME_NamingService.hxx" -#include "SMESH_Gen.hxx" -#include "GEOM_Client.hxx" +#include +#include +#include + +#include #include #include @@ -69,16 +71,16 @@ public: mapIdToId.clear(); } // register object in the internal map and return its id - int addObject( string theIOR ) + int addObject( std::string theIOR ) { int nextId = getNextId(); mapIdToIOR[ nextId ] = theIOR; return nextId; } // find the object id in the internal map by the IOR - int findId( string theIOR ) + int findId( std::string theIOR ) { - map::iterator imap; + std::map::iterator imap; for ( imap = mapIdToIOR.begin(); imap != mapIdToIOR.end(); ++imap ) { if ( imap->second == theIOR ) return imap->first; @@ -86,18 +88,18 @@ public: return 0; } // get object's IOR by id - string getIORbyId( const int theId ) + std::string getIORbyId( const int theId ) { if ( mapIdToIOR.find( theId ) != mapIdToIOR.end() ) return mapIdToIOR[ theId ]; - return string( "" ); + return std::string( "" ); } // get object's IOR by old id - string getIORbyOldId( const int theOldId ) + std::string getIORbyOldId( const int theOldId ) { if ( mapIdToId.find( theOldId ) != mapIdToId.end() ) return getIORbyId( mapIdToId[ theOldId ] ); - return string( "" ); + return std::string( "" ); } // maps old object id to the new one (used when restoring data) void mapOldToNew( const int oldId, const int newId ) { @@ -105,7 +107,7 @@ public: } // get old id by a new one int getOldId( const int newId ) { - map::iterator imap; + std::map::iterator imap; for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) { if ( imap->second == newId ) return imap->first; @@ -123,8 +125,8 @@ private: return id; } - map mapIdToIOR; // persistent-to-transient map - map mapIdToId; // used to translate object from persistent to transient form + std::map mapIdToIOR; // persistent-to-transient map + std::map mapIdToId; // to translate object from persistent to transient form }; // =========================================================== @@ -146,7 +148,7 @@ public: // Get SALOME_LifeCycleCORBA object static SALOME_LifeCycleCORBA* GetLCC(); // Retrieve and get GEOM engine reference - static GEOM::GEOM_Gen_ptr GetGeomEngine(); + static GEOM::GEOM_Gen_var GetGeomEngine(); // Get object of the CORBA reference static PortableServer::ServantBase_var GetServant( CORBA::Object_ptr theObject ); // Get CORBA object corresponding to the SALOMEDS::SObject @@ -203,6 +205,13 @@ public: CORBA::Boolean byMesh) throw ( SALOME::SALOME_Exception ); + /* + * Returns True if a hypothesis is assigned to a sole sub-mesh in a current Study + */ + CORBA::Boolean GetSoleSubMeshUsingHyp( SMESH::SMESH_Hypothesis_ptr theHyp, + SMESH::SMESH_Mesh_out theMesh, + GEOM::GEOM_Object_out theShape); + // Preferences // ------------ /*! @@ -324,6 +333,12 @@ public: CORBA::Short theSubShapeID ) throw ( SALOME::SALOME_Exception ); + // Create groups of elements preventing computation of a sub-shape + SMESH::ListOfGroups* MakeGroupsOfBadInputElements( SMESH::SMESH_Mesh_ptr theMesh, + CORBA::Short theSubShapeID, + const char* theGroupName) + 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 ) @@ -341,26 +356,26 @@ public: 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) + SMESH::SMESH_Mesh_ptr ConcatenateCommon(const SMESH::ListOfIDSources& meshesArray, + CORBA::Boolean uniteIdenticalGroups, + CORBA::Boolean mergeNodesAndElements, + CORBA::Double mergeTolerance, + CORBA::Boolean commonGroups) 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) + SMESH::SMESH_Mesh_ptr Concatenate(const SMESH::ListOfIDSources& meshesArray, + CORBA::Boolean uniteIdenticalGroups, + CORBA::Boolean mergeNodesAndElements, + CORBA::Double mergeTolerance) 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) + SMESH::SMESH_Mesh_ptr ConcatenateWithGroups(const SMESH::ListOfIDSources& meshesArray, + CORBA::Boolean uniteIdenticalGroups, + CORBA::Boolean mergeNodesAndElements, + CORBA::Double mergeTolerance) throw ( SALOME::SALOME_Exception ); // Get MED version of the file by its name @@ -431,7 +446,7 @@ public: // Copy-paste methods - returns true if object can be copied to the clipboard CORBA::Boolean CanCopy( SALOMEDS::SObject_ptr theObject ) { return false; } // Copy-paste methods - copy object to the clipboard - SALOMEDS::TMPFile* CopyFrom( SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID ) { return false; } + SALOMEDS::TMPFile* CopyFrom( SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID ) { return NULL; } // Copy-paste methods - returns true if object can be pasted from the clipboard CORBA::Boolean CanPaste( const char* theComponentName, CORBA::Long theObjectID ) { return false; } // Copy-paste methods - paste object from the clipboard @@ -470,13 +485,12 @@ public: bool isMultiFile, bool isHistoricalDump, bool& aValidScript, - const TCollection_AsciiString& theSavedTrace); + TCollection_AsciiString& theSavedTrace); TCollection_AsciiString GetNewPythonLines (int theStudyID); void CleanPythonTrace (int theStudyID); - // ***************************************** // Internal methods // ***************************************** @@ -554,7 +568,7 @@ public: typename TInterface::_var_type GetObjectByOldId( const int oldID ) { if ( StudyContext* myStudyContext = GetCurrentStudyContext() ) { - string ior = myStudyContext->getIORbyOldId( oldID ); + std::string ior = myStudyContext->getIORbyOldId( oldID ); if ( !ior.empty() ) return TInterface::_narrow(GetORB()->string_to_object( ior.c_str() )); } @@ -569,17 +583,65 @@ public: */ SALOMEDS::SObject_ptr GetAlgoSO(const ::SMESH_Algo* algo); - void UpdateParameters(/*CORBA::Object_ptr theObject,*/ const char* theParameters); + void UpdateParameters(CORBA::Object_ptr theObject, const char* theParameters); char* GetParameters(CORBA::Object_ptr theObject); - char* ParseParameters(const char* theParameters); + //char* ParseParameters(const char* theParameters); + const std::vector< int >& GetLastParamIndices() const { return myLastParamIndex; } const std::vector< std::string >& GetLastParameters() const { return myLastParameters; } + const std::string & GetLastObjEntry() const { return myLastObj; } + std::vector< std::string > GetAllParameters(const std::string& theObjectEntry) const; + + // Move objects to the specified position + void Move( const SMESH::sobject_list& what, + SALOMEDS::SObject_ptr where, + CORBA::Long row ); + + CORBA::Boolean IsApplicable ( const char* theAlgoType, + const char* theLibName, + GEOM::GEOM_Object_ptr theShapeObject, + CORBA::Boolean toCheckAll); + + SMESH::long_array* GetInsideSphere( SMESH::SMESH_IDSource_ptr meshPart, + SMESH::ElementType theElemType, + CORBA::Double theX, + CORBA::Double theY, + CORBA::Double theZ, + CORBA::Double theR); + + SMESH::long_array* GetInsideBox( SMESH::SMESH_IDSource_ptr meshPart, + SMESH::ElementType theElemType, + CORBA::Double theX1, + CORBA::Double theY1, + CORBA::Double theZ1, + CORBA::Double theX2, + CORBA::Double theY2, + CORBA::Double theZ2); + + SMESH::long_array* GetInsideCylinder( SMESH::SMESH_IDSource_ptr meshPart, + SMESH::ElementType theElemType, + CORBA::Double theX, + CORBA::Double theY, + CORBA::Double theZ, + CORBA::Double theDX, + CORBA::Double theDY, + CORBA::Double theDZ, + CORBA::Double theH, + CORBA::Double theR ); + + SMESH::long_array* GetInside( SMESH::SMESH_IDSource_ptr meshPart, + SMESH::ElementType theElemType, + GEOM::GEOM_Object_ptr theGeom, + CORBA::Double theTolerance ); private: + // Get hypothesis creator + GenericHypothesisCreator_i* getHypothesisCreator( const char* theHypName, + const char* theLibName, + std::string& thePlatformLibName) + throw ( SALOME::SALOME_Exception ); // Create hypothesis of given type SMESH::SMESH_Hypothesis_ptr createHypothesis( const char* theHypName, - const char* theLibName) - throw ( SALOME::SALOME_Exception ); - + const char* theLibName); // Create empty mesh on shape SMESH::SMESH_Mesh_ptr createMesh() throw ( SALOME::SALOME_Exception ); @@ -594,6 +656,11 @@ private: void setCurrentStudy( SALOMEDS::Study_ptr theStudy, bool theStudyIsBeingClosed=false); + std::vector _GetInside(SMESH::SMESH_IDSource_ptr meshPart, + SMESH::ElementType theElemType, + TopoDS_Shape& aShape, + double* theTolerance = NULL); + private: static GEOM::GEOM_Gen_var myGeomGen; static CORBA::ORB_var myOrb; // ORB reference @@ -604,13 +671,16 @@ private: ::SMESH_Gen myGen; // SMESH_Gen local implementation // hypotheses managing - map myHypCreatorMap; + std::map myHypCreatorMap; - map myStudyContextMap; // Map of study context objects + std::map myStudyContextMap; // Map of study context objects - GEOM_Client* myShapeReader; // Shape reader - SALOMEDS::Study_var myCurrentStudy; // Current study - CORBA::Boolean myIsEmbeddedMode; // Current mode + GEOM_Client* myShapeReader; // Shape reader + SALOMEDS::Study_var myCurrentStudy; // Current study + CORBA::Boolean myIsEmbeddedMode; // Current mode + + // Default color of groups + std::string myDefaultGroupColor; // To load full mesh data from study at hyp modification or not bool myToForgetMeshDataOnHypModif; @@ -618,7 +688,9 @@ private: // Dump Python: trace of API methods calls std::map < int, Handle(TColStd_HSequenceOfAsciiString) > myPythonScripts; bool myIsHistoricalPythonDump; + std::vector< int > myLastParamIndex; std::vector< std::string > myLastParameters; + std::string myLastObj; }; @@ -630,6 +702,15 @@ namespace SMESH { return dynamic_cast(SMESH_Gen_i::GetServant(theArg).in()); } + + /*! + * \brief Function used in SMESH_CATCH to convert a caught exception to + * SALOME::SALOME_Exception + */ + inline void throwCorbaException(const char* excText) + { + THROW_SALOME_CORBA_EXCEPTION( excText, SALOME::INTERNAL_ERROR ); + } }