Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "StdMeshers_LayerDistribution_i.hxx"
00030 #include "SMESH_Gen_i.hxx"
00031 #include "SMESH_Gen.hxx"
00032 #include "SMESH_PythonDump.hxx"
00033
00034 #include "Utils_CorbaException.hxx"
00035 #include "utilities.h"
00036
00037 #include <TCollection_AsciiString.hxx>
00038
00039 using namespace std;
00040
00041
00047
00048
00049 StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i( PortableServer::POA_ptr thePOA,
00050 int theStudyId,
00051 ::SMESH_Gen* theGenImpl )
00052 : SALOME::GenericObj_i( thePOA ),
00053 SMESH_Hypothesis_i( thePOA )
00054 {
00055 MESSAGE( "StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i" );
00056 myBaseImpl = new ::StdMeshers_LayerDistribution( theGenImpl->GetANewId(),
00057 theStudyId,
00058 theGenImpl );
00059 }
00060
00061
00067
00068
00069 StdMeshers_LayerDistribution_i::~StdMeshers_LayerDistribution_i()
00070 {
00071 MESSAGE( "StdMeshers_LayerDistribution_i::~StdMeshers_LayerDistribution_i" );
00072 }
00073
00074
00080
00081
00082 void StdMeshers_LayerDistribution_i::SetLayerDistribution(SMESH::SMESH_Hypothesis_ptr hyp1D)
00083 throw ( SALOME::SALOME_Exception )
00084 {
00085 ASSERT( myBaseImpl );
00086 try {
00087 SMESH_Hypothesis_i * hyp_i = SMESH::DownCast< SMESH_Hypothesis_i*>( hyp1D );
00088 bool isNewHyp = ( hyp_i->GetImpl() != this->GetImpl()->GetLayerDistribution() );
00089 this->GetImpl()->SetLayerDistribution( hyp_i->GetImpl() );
00090 myHyp = SMESH::SMESH_Hypothesis::_duplicate( hyp1D );
00091
00092 if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
00093 SALOMEDS::Study_var study = gen->GetCurrentStudy();
00094 SALOMEDS::SObject_var SO = gen->ObjectToSObject( study, hyp1D );
00095 if ( ! SO->_is_nil() )
00096 study->NewBuilder()->RemoveObjectWithChildren( SO );
00097 }
00098
00099
00100 if ( isNewHyp )
00101 SMESH::TPythonDump() << hyp1D << " = "
00102 << SMESH_Gen_i::GetSMESHGen() << ".CreateHypothesis('"
00103 << hyp_i->GetName() << "', '" << hyp_i->GetLibName() << "')";
00104 }
00105 catch ( SALOME_Exception& S_ex ) {
00106 THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
00107 }
00108
00109 SMESH::TPythonDump() << _this() << ".SetLayerDistribution( " << hyp1D << " )";
00110 }
00111
00112
00118
00119
00120 SMESH::SMESH_Hypothesis_ptr StdMeshers_LayerDistribution_i::GetLayerDistribution()
00121 {
00122 SMESH::SMESH_Hypothesis_var hyp = myHyp;
00123 return hyp._retn();
00124 }
00125
00126
00132
00133
00134 ::StdMeshers_LayerDistribution* StdMeshers_LayerDistribution_i::GetImpl()
00135 {
00136 return ( ::StdMeshers_LayerDistribution* )myBaseImpl;
00137 }
00138
00139
00147
00148 CORBA::Boolean StdMeshers_LayerDistribution_i::IsDimSupported( SMESH::Dimension type )
00149 {
00150 return type == SMESH::DIM_3D;
00151 }
00152
00153
00158
00159
00160 char* StdMeshers_LayerDistribution_i::SaveTo()
00161 {
00162 ASSERT( myBaseImpl );
00163 std::ostringstream os;
00164
00165 ::SMESH_Hypothesis* hyp1D = GetImpl()->GetLayerDistribution();
00166 SMESH_Hypothesis_i* hyp1D_i = SMESH::DownCast< SMESH_Hypothesis_i*>( myHyp );
00167 if ( !hyp1D || !hyp1D_i )
00168 os << "NULL_HYPO ";
00169 else {
00170 os << hyp1D->GetName() << " "
00171 << hyp1D->GetLibName() << " "
00172 << hyp1D_i->SaveTo();
00173 }
00174
00175
00176 return CORBA::string_dup( os.str().c_str() );
00177 }
00178
00179
00184
00185
00186 void StdMeshers_LayerDistribution_i::LoadFrom( const char* theStream )
00187 {
00188 ASSERT( myBaseImpl );
00189 std::istringstream is( theStream );
00190
00191 string typeName, libName;
00192 if ( is >> typeName &&
00193 is >> libName )
00194 {
00195 SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
00196 SALOMEDS::Study_var curStudy = gen->GetCurrentStudy();
00197 gen->SetCurrentStudy( SALOMEDS::Study::_nil() );
00198
00199 try {
00200 SMESH::SMESH_Hypothesis_var hyp1D =
00201 gen->CreateHypothesis( typeName.c_str(), libName.c_str() );
00202 SMESH_Hypothesis_i* hyp1D_i = SMESH::DownCast< SMESH_Hypothesis_i*>( hyp1D );
00203 if ( hyp1D_i ) {
00204 hyp1D_i->LoadFrom( & theStream[ is.tellg() ]);
00205 this->GetImpl()->SetLayerDistribution( hyp1D_i->GetImpl() );
00206 myHyp = hyp1D;
00207
00208
00209 }
00210 }
00211 catch (...) {
00212 }
00213 gen->SetCurrentStudy( curStudy );
00214 }
00215 }
00216