From 890d47aa596bea11671e79d67541f509996b16a9 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 22 Jan 2010 11:33:35 +0000 Subject: [PATCH] 0020431: EDF 1020 SMESH : Radial Mesh of a cylinder * Fix conversion of LayerDistribution hypothesis --- src/SMESH_I/SMESH_2smeshpy.cxx | 61 +++++++++++++------------------- src/SMESH_I/SMESH_2smeshpy.hxx | 7 ++-- src/SMESH_I/SMESH_DumpPython.cxx | 13 +++++++ src/SMESH_I/SMESH_PythonDump.hxx | 3 ++ 4 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index 5eae71db8..ee137822c 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -1316,7 +1316,7 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th hyp->AddArgMethod( "SetNumberOfLayers" ); } else if ( hypType == "LayerDistribution2D" ) { - hyp = new _pyLayerDistributionHypo( theCreationCmd ); + hyp = new _pyLayerDistributionHypo( theCreationCmd, "Get2DHypothesis" ); hyp->SetConvMethodAndType( "LayerDistribution", "RadialQuadrangle_1D2D"); } // BLSURF ---------- @@ -1418,14 +1418,11 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th hyp->AddArgMethod( "SetNumberOfLayers" ); } else if ( hypType == "LayerDistribution" ) { - hyp = new _pyLayerDistributionHypo( theCreationCmd ); + hyp = new _pyLayerDistributionHypo( theCreationCmd, "Get3DHypothesis" ); hyp->SetConvMethodAndType( "LayerDistribution", "RadialPrism_3D"); } - if ( algo->IsValid() ) { - return algo; - } - return hyp; + return algo->IsValid() ? algo : hyp; } //================================================================================ @@ -1686,20 +1683,23 @@ bool _pyLayerDistributionHypo::Addition2Creation( const Handle(_pyCommand)& theA _pyID geom = theAdditionCmd->GetArg( 1 ); - my1dHyp->SetMesh( theMesh ); - if ( !my1dHyp->Addition2Creation( theAdditionCmd, theMesh )) - return false; + Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, theMesh, this ); + if ( !algo.IsNull() ) + { + my1dHyp->SetMesh( theMesh ); + my1dHyp->SetConvMethodAndType(my1dHyp->GetAlgoCreationMethod().ToCString(), + algo->GetAlgoType().ToCString()); + if ( !my1dHyp->Addition2Creation( theAdditionCmd, theMesh )) + return false; - // clear "SetLayerDistribution()" cmd - myArgCommands.front()->Clear(); + // clear "SetLayerDistribution()" cmd + myArgCommands.back()->Clear(); - // Convert my creation => me = RadialPrismAlgo.Get3DHypothesis() + // Convert my creation => me = RadialPrismAlgo.Get3DHypothesis() - // find RadialPrism algo created on for theMesh - Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, theMesh, this ); - if ( !algo.IsNull() ) { + // find RadialPrism algo created on for theMesh GetCreationCmd()->SetObject( algo->GetID() ); - GetCreationCmd()->SetMethod( "Get3DHypothesis" ); + GetCreationCmd()->SetMethod( myAlgoMethod ); GetCreationCmd()->RemoveArgs(); theAdditionCmd->AddDependantCmd( GetCreationCmd() ); myIsWrapped = true; @@ -1723,17 +1723,16 @@ void _pyLayerDistributionHypo::Flush() // make a new name for 1D hyp = "HypType" + "_Distribution" _pyID newName; - if ( my1dHyp->GetCreationCmd()->GetMethod() == "CreateHypothesis" ) { - // not yet converted creation cmd - TCollection_AsciiString hypTypeQuoted = my1dHyp->GetCreationCmd()->GetArg(1); - TCollection_AsciiString hypType = hypTypeQuoted.SubString( 2, hypTypeQuoted.Length() - 1 ); - newName = hypType + "_Distribution"; - my1dHyp->GetCreationCmd()->SetResultValue( newName ); + if ( my1dHyp->IsWrapped() ) { + newName = my1dHyp->GetCreationCmd()->GetMethod(); } else { - // already converted creation cmd - newName = my1dHyp->GetCreationCmd()->GetResultValue(); + TCollection_AsciiString hypTypeQuoted = my1dHyp->GetCreationCmd()->GetArg(1); + newName = hypTypeQuoted.SubString( 2, hypTypeQuoted.Length() - 1 ); } + newName += "_Distribution"; + my1dHyp->GetCreationCmd()->SetResultValue( newName ); + list< Handle(_pyCommand) >& cmds = theGen->GetCommands(); list< Handle(_pyCommand) >::iterator cmdIt = cmds.begin(); for ( ; cmdIt != cmds.end(); ++cmdIt ) { @@ -1744,20 +1743,10 @@ void _pyLayerDistributionHypo::Flush() ( *cmdIt )->SetObject( newName ); } } - if ( !myArgCommands.empty() ) + // Set new hyp name to SetLayerDistribution() cmd + if ( !myArgCommands.empty() && !myArgCommands.back()->IsEmpty() ) myArgCommands.back()->SetArg( 1, newName ); } - // copy hyp1d's creation method and args - // myCreationMethod = hyp1d->GetCreationMethod(); - // myArgs = hyp1d->GetArgs(); - // // make them cleared at conversion - // myArgCommands = hyp1d->GetArgCommands(); - -// // to be cleared at convertion only -// myArgCommands.push_back( theCommand ); - - //my1dHyp.Nullify(); - //_pyHypothesis::Flush(); } //================================================================================ diff --git a/src/SMESH_I/SMESH_2smeshpy.hxx b/src/SMESH_I/SMESH_2smeshpy.hxx index 16926e54d..fc0adb941 100644 --- a/src/SMESH_I/SMESH_2smeshpy.hxx +++ b/src/SMESH_I/SMESH_2smeshpy.hxx @@ -113,7 +113,7 @@ public: int GetOrderNb() const { return myOrderNb; } void SetOrderNb( int theNb ) { myOrderNb = theNb; } int Length() { return myString.Length(); } - void Clear() { myString.Clear(); myBegPos.Clear(); } + void Clear() { myString.Clear(); myBegPos.Clear(); myArgs.Clear(); } bool IsEmpty() const { return myString.IsEmpty(); } TCollection_AsciiString GetIndentation(); const TCollection_AsciiString & GetResultValue(); @@ -373,9 +373,10 @@ DEFINE_STANDARD_HANDLE (_pyComplexParamHypo, _pyHypothesis); class _pyLayerDistributionHypo: public _pyHypothesis { Handle(_pyHypothesis) my1dHyp; + TCollection_AsciiString myAlgoMethod; public: - _pyLayerDistributionHypo(const Handle(_pyCommand)& theCreationCmd): - _pyHypothesis(theCreationCmd) {} + _pyLayerDistributionHypo(const Handle(_pyCommand)& theCreationCmd, const char* algoMethod): + _pyHypothesis(theCreationCmd), myAlgoMethod((char*)algoMethod) {} void Process( const Handle(_pyCommand)& theCommand); void Flush(); bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd, diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index 5b012b59c..3e872a3da 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -208,6 +208,19 @@ namespace SMESH return *this; } + TPythonDump& + TPythonDump:: + operator<<(SMESH::SMESH_Hypothesis_ptr theArg) + { + SALOMEDS::Study_var aStudy = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy(); + SALOMEDS::SObject_var aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg); + if(aSObject->_is_nil() && !CORBA::is_nil(theArg)) + myStream << "hyp_" << theArg->GetId(); + else + *this << CORBA::Object_ptr( theArg ); + return *this; + } + TPythonDump& TPythonDump:: operator<<(SMESH::FilterLibrary_i* theArg) diff --git a/src/SMESH_I/SMESH_PythonDump.hxx b/src/SMESH_I/SMESH_PythonDump.hxx index 10d6dd85c..bde5ae9f7 100644 --- a/src/SMESH_I/SMESH_PythonDump.hxx +++ b/src/SMESH_I/SMESH_PythonDump.hxx @@ -117,6 +117,9 @@ namespace SMESH TPythonDump& operator<<(const SMESH::double_array& theArg); + TPythonDump& + operator<<(SMESH::SMESH_Hypothesis_ptr theArg); + TPythonDump& operator<<(SALOMEDS::SObject_ptr theArg); -- 2.39.2