smesh/src/SMESH_I/SMESH_Hypothesis_i.cxx

402 lines
12 KiB
C++
Raw Normal View History

2012-08-09 16:03:55 +06:00
// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
2009-02-17 10:27:49 +05:00
//
2012-08-09 16:03:55 +06:00
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
2003-07-10 19:35:03 +06:00
//
2012-08-09 16:03:55 +06:00
// 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.
2003-07-10 19:35:03 +06:00
//
2012-08-09 16:03:55 +06:00
// 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.
2003-07-10 19:35:03 +06:00
//
2012-08-09 16:03:55 +06:00
// 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
2003-07-10 19:35:03 +06:00
//
2012-08-09 16:03:55 +06:00
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
2009-02-17 10:27:49 +05:00
//
2012-08-09 16:03:55 +06:00
2009-02-17 10:27:49 +05:00
// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
2003-07-10 19:35:03 +06:00
// File : SMESH_Hypothesis_i.cxx
// Author : Paul RASCLE, EDF
// Module : SMESH
2009-02-17 10:27:49 +05:00
//
2004-06-18 14:34:31 +06:00
#include <iostream>
#include <sstream>
2003-05-19 19:54:48 +06:00
#include "SMESH_Hypothesis_i.hxx"
2009-02-17 10:27:49 +05:00
#include "SMESH_Gen_i.hxx"
2003-05-19 19:54:48 +06:00
#include "utilities.h"
using namespace std;
2003-05-19 19:54:48 +06:00
//=============================================================================
/*!
2004-06-18 14:34:31 +06:00
* SMESH_Hypothesis_i::SMESH_Hypothesis_i
*
* Constructor
2003-05-19 19:54:48 +06:00
*/
//=============================================================================
2004-06-18 14:34:31 +06:00
SMESH_Hypothesis_i::SMESH_Hypothesis_i( PortableServer::POA_ptr thePOA )
: SALOME::GenericObj_i( thePOA )
2003-05-19 19:54:48 +06:00
{
2004-07-20 13:56:05 +06:00
MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / D<>but" );
2004-06-18 14:34:31 +06:00
myBaseImpl = 0;
2004-07-20 13:56:05 +06:00
MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / Fin" );
2003-05-19 19:54:48 +06:00
};
//=============================================================================
/*!
2004-06-18 14:34:31 +06:00
* SMESH_Hypothesis_i::~SMESH_Hypothesis_i
*
* Destructor
2003-05-19 19:54:48 +06:00
*/
//=============================================================================
SMESH_Hypothesis_i::~SMESH_Hypothesis_i()
{
2004-06-18 14:34:31 +06:00
MESSAGE( "SMESH_Hypothesis_i::~SMESH_Hypothesis_i" );
if ( myBaseImpl )
delete myBaseImpl;
2003-05-19 19:54:48 +06:00
};
//=============================================================================
/*!
2004-06-18 14:34:31 +06:00
* SMESH_Hypothesis_i::GetName
*
* Get type name of hypothesis
2003-05-19 19:54:48 +06:00
*/
//=============================================================================
char* SMESH_Hypothesis_i::GetName()
{
//MESSAGE( "SMESH_Hypothesis_i::GetName" );
2004-06-18 14:34:31 +06:00
return CORBA::string_dup( myBaseImpl->GetName() );
};
//=============================================================================
/*!
* SMESH_Hypothesis_i::GetLibName
*
* Get plugin library name of hypothesis (required by persistency mechanism)
*/
//=============================================================================
char* SMESH_Hypothesis_i::GetLibName()
{
MESSAGE( "SMESH_Hypothesis_i::GetLibName" );
return CORBA::string_dup( myBaseImpl->GetLibName() );
2003-05-19 19:54:48 +06:00
};
//=============================================================================
/*!
2004-06-18 14:34:31 +06:00
* SMESH_Hypothesis_i::SetLibName
*
* Set plugin library name of hypothesis (required by persistency mechanism)
*/
//=============================================================================
void SMESH_Hypothesis_i::SetLibName(const char* theLibName)
{
MESSAGE( "SMESH_Hypothesis_i::SetLibName" );
myBaseImpl->SetLibName( theLibName );
};
//=============================================================================
/*!
* SMESH_Hypothesis_i::GetId
*
* Get unique id of hypothesis
2003-05-19 19:54:48 +06:00
*/
//=============================================================================
CORBA::Long SMESH_Hypothesis_i::GetId()
{
2004-06-18 14:34:31 +06:00
MESSAGE( "SMESH_Hypothesis_i::GetId" );
return myBaseImpl->GetID();
}
2009-02-17 10:27:49 +05:00
//=============================================================================
/*!
* SMESH_Hypothesis_i::IsPublished()
*
*/
//=============================================================================
bool SMESH_Hypothesis_i::IsPublished(){
bool res = false;
SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
if(gen){
SALOMEDS::SObject_var SO =
SMESH_Gen_i::ObjectToSObject(gen->GetCurrentStudy() , SMESH::SMESH_Hypothesis::_narrow(_this()));
res = !SO->_is_nil();
}
return res;
}
2012-08-09 16:03:55 +06:00
//================================================================================
/*!
* \brief Set the pramIndex-th parameter
*/
//================================================================================
void SMESH_Hypothesis_i::SetVarParameter (const char* theParameter,
const char* theMethod)
{
if ( SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen() )
{
gen->UpdateParameters(theParameter);
const std::vector< std::string >& pars = gen->GetLastParameters();
if ( !pars.empty() )
myMethod2VarParams[ theMethod ] = pars[0];
}
}
//================================================================================
/*!
* \brief Return the pramIndex-th variable parameter used for Hypothesis creation
*/
//================================================================================
char* SMESH_Hypothesis_i::GetVarParameter (const char* theMethod)
{
if ( myMethod2VarParams.count("needs update by old study"))
{
// restore myMethod2VarParams by old study
myMethod2VarParams.clear();
if ( SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen() )
{
CORBA::String_var oldparVar = gen->GetParameters( _this() );
setOldParameters( oldparVar.in() );
}
}
std::map< std::string, std::string >::iterator meth_param = myMethod2VarParams.find( theMethod );
if ( meth_param != myMethod2VarParams.end() )
return CORBA::string_dup( meth_param->second.c_str() );
return CORBA::string_dup("");
}
//================================================================================
/*!
* \brief Restore myMethod2VarParams by parameters stored in an old study
*/
//================================================================================
void SMESH_Hypothesis_i::setOldParameters (const char* theParameters)
{
if ( SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen() )
{
TCollection_AsciiString aOldParameters(theParameters);
int pos = aOldParameters.SearchFromEnd("|");
if ( pos >= 0 ) aOldParameters = aOldParameters.Split(pos);
pos = aOldParameters.SearchFromEnd(";*=");
if ( pos >= 0 ) aOldParameters.Split(pos-1);
gen->UpdateParameters( aOldParameters.ToCString() );
myMethod2VarParams.clear();
const std::vector< std::string >& pars = gen->GetLastParameters();
for ( size_t i = 0; i < pars.size(); ++i )
{
std::string meth = getMethodOfParameter( i, pars.size() );
myMethod2VarParams[ meth ] = pars[i];
}
gen->UpdateParameters(""); // clear params
}
}
2009-02-17 10:27:49 +05:00
//=============================================================================
/*!
* SMESH_Hypothesis_i::SetParameters()
*
*/
//=============================================================================
void SMESH_Hypothesis_i::SetParameters(const char* theParameters)
{
SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
2012-08-09 16:03:55 +06:00
//char * aParameters = CORBA::string_dup(theParameters);
2009-02-17 10:27:49 +05:00
if(gen){
2012-08-09 16:03:55 +06:00
gen->UpdateParameters(theParameters);
// if(IsPublished()) {
// SMESH_Gen_i::GetSMESHGen()->UpdateParameters(SMESH::SMESH_Hypothesis::_narrow(_this()),aParameters);
// }
// else {
// myBaseImpl->SetParameters(gen->ParseParameters(aParameters));
// }
2009-02-17 10:27:49 +05:00
}
}
//=============================================================================
/*!
* SMESH_Hypothesis_i::GetParameters()
*
*/
//=============================================================================
char* SMESH_Hypothesis_i::GetParameters()
{
SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
char* aResult;
if(IsPublished()) {
MESSAGE("SMESH_Hypothesis_i::GetParameters() : Get Parameters from SObject");
aResult = gen->GetParameters(SMESH::SMESH_Hypothesis::_narrow(_this()));
}
else {
MESSAGE("SMESH_Hypothesis_i::GetParameters() : Get local parameters");
aResult = myBaseImpl->GetParameters();
}
return CORBA::string_dup(aResult);
}
//=============================================================================
/*!
* SMESH_Hypothesis_i::GetLastParameters()
*
*/
//=============================================================================
SMESH::ListOfParameters* SMESH_Hypothesis_i::GetLastParameters()
{
SMESH::ListOfParameters_var aResult = new SMESH::ListOfParameters();
SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
if(gen) {
char *aParameters;
if(IsPublished())
aParameters = GetParameters();
else
aParameters = myBaseImpl->GetLastParameters();
SALOMEDS::Study_ptr aStudy = gen->GetCurrentStudy();
if(!aStudy->_is_nil()) {
SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters);
if(aSections->length() > 0) {
SALOMEDS::ListOfStrings aVars = aSections[aSections->length()-1];
aResult->length(aVars.length());
for(int i = 0;i < aVars.length();i++)
aResult[i] = CORBA::string_dup( aVars[i]);
}
}
}
return aResult._retn();
}
//=============================================================================
/*!
* SMESH_Hypothesis_i::SetLastParameters()
*
*/
//=============================================================================
void SMESH_Hypothesis_i::SetLastParameters(const char* theParameters)
{
if(!IsPublished()) {
myBaseImpl->SetLastParameters(theParameters);
}
}
//=============================================================================
/*!
* SMESH_Hypothesis_i::ClearParameters()
*
*/
//=============================================================================
void SMESH_Hypothesis_i::ClearParameters()
{
2012-08-09 16:03:55 +06:00
myMethod2VarParams.clear();
// if(!IsPublished()) {
// myBaseImpl->ClearParameters();
// }
2009-02-17 10:27:49 +05:00
}
2004-06-18 14:34:31 +06:00
//=============================================================================
/*!
* SMESH_Hypothesis_i::GetImpl
*
* Get implementation
*/
//=============================================================================
::SMESH_Hypothesis* SMESH_Hypothesis_i::GetImpl()
{
return myBaseImpl;
2003-05-19 19:54:48 +06:00
}
2004-06-18 14:34:31 +06:00
//=============================================================================
/*!
* SMESH_Hypothesis_i::SaveTo
*
* Persistence: Dumps parameters to the string stream
*/
//=============================================================================
char* SMESH_Hypothesis_i::SaveTo()
{
2004-06-18 14:34:31 +06:00
std::ostringstream os;
2012-08-09 16:03:55 +06:00
// assure that parameters are loaded from an old study
CORBA::String_var p = GetVarParameter("");
os << "VARS " << myMethod2VarParams.size() << " ";
std::map< std::string, std::string >::iterator meth_param = myMethod2VarParams.begin();
for ( ; meth_param != myMethod2VarParams.end(); ++meth_param )
os << meth_param->first << " "
<< meth_param->second.size() << " "
<< meth_param->second << " ";
2004-06-18 14:34:31 +06:00
myBaseImpl->SaveTo( os );
return CORBA::string_dup( os.str().c_str() );
}
//=============================================================================
/*!
* SMESH_Hypothesis_i::LoadFrom
*
* Persistence: Restores parameters from string
*/
//=============================================================================
void SMESH_Hypothesis_i::LoadFrom( const char* theStream )
{
std::istringstream is( theStream );
2012-08-09 16:03:55 +06:00
if ( strncmp( theStream, "VARS", 4 ) == 0 )
{
int nbVars, len;
char str[256];
std::string meth;
is >> str >> nbVars;
for ( int i = 0; i < nbVars; ++i )
{
is >> meth >> len;
if ( len < 256 )
{
is.get( str, len + 2 ); // 2 - to read at least 1 white space
if ( len > 0 )
myMethod2VarParams[ meth ] = std::string( str+1, len );
}
}
}
else
{
// we can't restore myMethod2VarParams by old study here because SObject
// isn't yet bound to _this()
myMethod2VarParams["needs update by old study"] = "yes";
}
2004-06-18 14:34:31 +06:00
myBaseImpl->LoadFrom( is );
2012-08-09 16:03:55 +06:00
// let listeners know about loading (issue 0020918)
myBaseImpl->NotifySubMeshesHypothesisModification();
}
//================================================================================
/*!
* \brief This mesthod is called after completion of loading a study
*/
//================================================================================
void SMESH_Hypothesis_i::UpdateAsMeshesRestored()
{
// for hyps needing full data restored
2004-06-18 14:34:31 +06:00
}