Version: 6.3.1

src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx

Go to the documentation of this file.
00001 // Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 //  SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes
00024 //  File   : StdMeshers_LayerDistribution_i.cxx
00025 //  Author : Edward AGAPOV
00026 //  Module : SMESH
00027 //  $Header: /home/server/cvs/SMESH/SMESH_SRC/src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx,v 1.3.20.1.8.1 2011-06-02 05:57:34 vsr Exp $
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     // Remove SO of 1D hypothesis if it was published
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     // Update Python script: write creation of 1D hyp as it is not published and
00099     // for this, SMESH_Gen does not write it's creation
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   // Update Python script
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   //myBaseImpl->SaveTo( os );
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() ); // prevent hypo publishing
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         // as hyp1D is not published, its ID changes
00208         //SMESH::TPythonDump() << _this() << ".SetLayerDistribution( " << hyp1D << " )";
00209       }
00210     }
00211     catch (...) {
00212     }
00213     gen->SetCurrentStudy( curStudy );  // enable hypo publishing
00214   }
00215 }
00216 
Copyright © 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS