From 1137dd744f03ab3f86869189f4b833cc2ac696b8 Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 11 Oct 2017 15:27:38 +0300 Subject: [PATCH] 0023493: EDF 15626 - Problem with Dump Study - Fixed problem with GetExistingSubObjects() function dumping --- src/GEOM/GEOM_PythonDump.cxx | 30 +++++++++++---------- src/GEOM/GEOM_PythonDump.hxx | 6 ++--- src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 26 +++++++++--------- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/GEOM/GEOM_PythonDump.cxx b/src/GEOM/GEOM_PythonDump.cxx index 1dfd4ba91..ae1d80289 100644 --- a/src/GEOM/GEOM_PythonDump.cxx +++ b/src/GEOM/GEOM_PythonDump.cxx @@ -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); } diff --git a/src/GEOM/GEOM_PythonDump.hxx b/src/GEOM/GEOM_PythonDump.hxx index a189af2e1..9cd8bcccc 100644 --- a/src/GEOM/GEOM_PythonDump.hxx +++ b/src/GEOM/GEOM_PythonDump.hxx @@ -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 diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index 53f3c9269..34db98229 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -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); -- 2.30.2