Salome HOME
0020431: EDF 1020 SMESH : Radial Mesh of a cylinder
authoreap <eap@opencascade.com>
Fri, 22 Jan 2010 11:33:35 +0000 (11:33 +0000)
committereap <eap@opencascade.com>
Fri, 22 Jan 2010 11:33:35 +0000 (11:33 +0000)
* Fix conversion of LayerDistribution hypothesis

src/SMESH_I/SMESH_2smeshpy.cxx
src/SMESH_I/SMESH_2smeshpy.hxx
src/SMESH_I/SMESH_DumpPython.cxx
src/SMESH_I/SMESH_PythonDump.hxx

index 5eae71db828f5da30f85e64a25bb631d06f41a30..ee137822cf1de3bc1284aba0d833bf0ba798b361 100644 (file)
@@ -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 <geom> for theMesh
-  Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, theMesh, this );
-  if ( !algo.IsNull() ) {
+    // find RadialPrism algo created on <geom> 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();
 }
 
 //================================================================================
index 16926e54d1d53cd71e32f6e166d2e5e6049aaaa9..fc0adb941e777d681d5247248498737032400f22 100644 (file)
@@ -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,
index 5b012b59cfc4cf48b5500a28f2a5c52c416e0431..3e872a3da2daf0d10b84b7fcd0ef0b9ad1c95aeb 100644 (file)
@@ -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)
index 10d6dd85c8a65d112d21a9e23ac08ab8ebdb40f9..bde5ae9f7880f0b14357b1970deec21aca1d113a 100644 (file)
@@ -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);