Salome HOME
0023493: EDF 15626 - Problem with Dump Study
authorvsr <vsr@opencascade.com>
Wed, 11 Oct 2017 12:27:38 +0000 (15:27 +0300)
committervsr <vsr@opencascade.com>
Wed, 11 Oct 2017 12:27:38 +0000 (15:27 +0300)
- Fixed problem with GetExistingSubObjects() function dumping

src/GEOM/GEOM_PythonDump.cxx
src/GEOM/GEOM_PythonDump.hxx
src/GEOMImpl/GEOMImpl_IShapesOperations.cxx

index 1dfd4ba91e2c2b1bd37c735ad0f310d5eeb1ad9b..ae1d802892f7e66058ae216ee577ed9d43945b41 100644 (file)
@@ -170,41 +170,43 @@ namespace GEOM
     return *this;
   }
 
-  Handle(GEOM_Object) GetCreatedLast(const Handle(GEOM_Object)& theObj1,
-                                     const Handle(GEOM_Object)& theObj2)
+  Handle(GEOM_BaseObject) GetCreatedLast(const Handle(Standard_Transient)& theObj1,
+                                         const Handle(Standard_Transient)& theObj2)
   {
-    if (theObj1.IsNull()) return theObj2;
-    if (theObj2.IsNull()) return theObj1;
+    Handle(GEOM_BaseObject) bo1 = Handle(GEOM_Object)::DownCast(theObj1);
+    Handle(GEOM_BaseObject) bo2 = Handle(GEOM_Object)::DownCast(theObj2);
+    if (bo1.IsNull()) return bo2;
+    if (bo2.IsNull()) return bo1;
 
     TColStd_ListOfInteger aTags1, aTags2;
-    TDF_Tool::TagList(theObj1->GetEntry(), aTags1);
-    TDF_Tool::TagList(theObj2->GetEntry(), aTags2);
+    TDF_Tool::TagList(bo1->GetEntry(), aTags1);
+    TDF_Tool::TagList(bo2->GetEntry(), aTags2);
     TColStd_ListIteratorOfListOfInteger aListIter1(aTags1), aListIter2(aTags2);
     for (; aListIter1.More(); aListIter1.Next(), aListIter2.Next()) {
       if (!aListIter2.More())
-        return theObj1; // anObj1 is stored under anObj2
+        return bo1; // anObj1 is stored under anObj2
 
       if (aListIter1.Value() > aListIter2.Value())
-        return theObj1;
+        return bo1;
       else if (aListIter1.Value() < aListIter2.Value())
-        return theObj2;
+        return bo2;
     }
-    return theObj1;
+    return bo1;
   }
 
-  Handle(GEOM_Object) GetCreatedLast(const Handle(TColStd_HSequenceOfTransient)& theObjects)
+  Handle(GEOM_BaseObject) GetCreatedLast(const Handle(TColStd_HSequenceOfTransient)& theObjects)
   {
-    Handle(GEOM_Object) anObject, aLatest;
+    Handle(GEOM_BaseObject) anObject, aLatest;
     int i, aLen = theObjects->Length();
     if (aLen < 1)
       return aLatest;
 
     for (i = 1; i <= aLen; i++) {
-      anObject = Handle(GEOM_Object)::DownCast(theObjects->Value(i));
+      anObject = Handle(GEOM_BaseObject)::DownCast(theObjects->Value(i));
       if ( anObject.IsNull() ) {
         Handle(GEOM_Function) fun = Handle(GEOM_Function)::DownCast(theObjects->Value(i));
         if ( !fun.IsNull() )
-          anObject = GEOM_Object::GetObject( fun->GetOwnerEntry() );
+          anObject = GEOM_BaseObject::GetObject( fun->GetOwnerEntry() );
       }
       aLatest = GetCreatedLast(aLatest, anObject);
     }
index a189af2e18cff82818d94ba469e1900ee76bb4d5..9cd8bcccc2c575d1d67d04fd75189ac11f6969c6 100644 (file)
@@ -67,12 +67,12 @@ namespace GEOM
 
   /*! Returns an object from two given, which has the latest entry
    */
-  Standard_EXPORT Handle(::GEOM_Object) GetCreatedLast (const Handle(::GEOM_Object)& theObj1,
-                                      const Handle(::GEOM_Object)& theObj2);
+  Standard_EXPORT Handle(::GEOM_BaseObject) GetCreatedLast (const Handle(Standard_Transient)& theObj1,
+                                                            const Handle(Standard_Transient)& theObj2);
 
   /*! Returns an object from \a theObjects, which has the latest entry
    */
-  Standard_EXPORT Handle(::GEOM_Object) GetCreatedLast (const Handle(TColStd_HSequenceOfTransient)& theObjects);
+  Standard_EXPORT Handle(::GEOM_BaseObject) GetCreatedLast (const Handle(TColStd_HSequenceOfTransient)& theObjects);
 }
 
 #endif
index 53f3c9269ff93e8cf2ecd36e6a66e8db83050074..34db98229f27a306da5e6ff8aca241c385860ba9 100644 (file)
@@ -1231,7 +1231,7 @@ GEOMImpl_IShapesOperations::GetGlueShapes (std::list< Handle(GEOM_Object) >& the
   TopoDS_Shape aShape;
   TopTools_SequenceOfShape shapes;
   std::list< Handle(GEOM_Object) >::iterator s = theShapes.begin();
-  Handle(GEOM_Object) lastCreatedGO;
+  Handle(GEOM_BaseObject) lastCreatedGO;
   for ( ; s != theShapes.end(); ++s )
   {
     Handle(GEOM_Object) go = *s;
@@ -1414,23 +1414,23 @@ GEOMImpl_IShapesOperations::GetExistingSubObjects(Handle(GEOM_Object)    theShap
   Standard_Integer types = theGroupsOnly ? Groups : Groups|SubShapes;
   Handle(TColStd_HSequenceOfTransient) results = GetExistingSubObjects(theShape, types);
 
+  Handle(GEOM_BaseObject) lastCreatedGO = GEOM::GetCreatedLast(results);
+  lastCreatedGO = GEOM::GetCreatedLast(lastCreatedGO, theShape);
+
   if (results->Length() > 0) {
-    //Make a Python command
-    TCollection_AsciiString anAsciiList;
-    for (int i = 1; i <= results->Length(); i++)
+    // Make a Python command
+    GEOM::TPythonDump pd (lastCreatedGO->GetLastFunction(), /*append=*/true);
+    pd << "[";
+    Standard_Integer i, aLen = results->Length();
+    for (i = 1; i <= aLen; i++)
     {
-      Handle(GEOM_BaseObject) obj = Handle(GEOM_BaseObject)::DownCast( results->Value(i));
-      obj->GetEntryString();
-      if ( i < results->Length() )
-        anAsciiList += ",";
+      Handle(GEOM_BaseObject) obj = Handle(GEOM_BaseObject)::DownCast(results->Value(i));
+      pd << obj << ((i < aLen) ? ", " : "");
     }
-    
-    GEOM::TPythonDump pd (theShape->GetLastFunction(), /*append=*/true);
-    pd << "[" << anAsciiList.ToCString();
     pd << "] = geompy.GetExistingSubObjects(";
     pd << theShape << ", " << (bool)theGroupsOnly << ")";
   }
-
   return results;
 }
 
@@ -4419,7 +4419,7 @@ Handle(TColStd_HSequenceOfInteger)
   // Make a Python command
 
   // The GetShapesOnCylinder() doesn't change object so no new function is required.
-  Handle(GEOM_Object) lastObj = GEOM::GetCreatedLast(theShape,theTopLeftPoint);
+  Handle(GEOM_BaseObject) lastObj = GEOM::GetCreatedLast(theShape,theTopLeftPoint);
   lastObj = GEOM::GetCreatedLast(lastObj,theTopRigthPoint);
   lastObj = GEOM::GetCreatedLast(lastObj,theBottomRigthPoint);
   lastObj = GEOM::GetCreatedLast(lastObj,theBottomLeftPoint);