From ee80d29c6f762ef5766175aae4263c35203a87ba Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 20 Jun 2012 09:48:48 +0000 Subject: [PATCH] 0021672: [CEA 565] Dump Study from script Add functions for editing commands if the last function of group is not the last function in the study, to avoid dump of group exploding (which is appended to the last function of group) before filling group with objects retrieved after group creation --- src/GEOMImpl/GEOMImpl_IGroupOperations.cxx | 93 +++++++++++++++------- 1 file changed, 63 insertions(+), 30 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx b/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx index 522d5cf38..db55c72b6 100644 --- a/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IGroupOperations.cxx @@ -114,7 +114,7 @@ void GEOMImpl_IGroupOperations::AddObject(Handle(GEOM_Object) theGroup, int theS SetErrorCode(KO); if(theGroup.IsNull()) return; - Handle(GEOM_Function) aFunction = theGroup->GetFunction(1); + Handle(GEOM_Function) aFunction = theGroup->GetLastFunction(); if(aFunction.IsNull()) return; GEOM_ISubShape aSSI (aFunction); @@ -152,7 +152,15 @@ void GEOMImpl_IGroupOperations::AddObject(Handle(GEOM_Object) theGroup, int theS } } aNewSeq->SetValue(aLength+1, theSubShapeID); - aSSI.SetIndices(aNewSeq); + if ( aFunction->IsLastFuntion() ) { + aSSI.SetIndices(aNewSeq); + } + else { + aFunction = theGroup->AddFunction( GEOM_Object::GetSubShapeID(), 0, true ); + GEOM_ISubShape aSSI2 (aFunction); + aSSI2.SetIndices(aNewSeq); + aSSI2.SetMainShape( aSSI.GetMainShape() ); + } } // As we do not recompute here our group, lets mark it as Modified @@ -177,7 +185,7 @@ void GEOMImpl_IGroupOperations::RemoveObject (Handle(GEOM_Object) theGroup, int SetErrorCode(KO); if(theGroup.IsNull()) return; - Handle(GEOM_Function) aFunction = theGroup->GetFunction(1); + Handle(GEOM_Function) aFunction = theGroup->GetLastFunction(); if(aFunction.IsNull()) return; GEOM_ISubShape aSSI(aFunction); @@ -219,7 +227,15 @@ void GEOMImpl_IGroupOperations::RemoveObject (Handle(GEOM_Object) theGroup, int } } - aSSI.SetIndices(aNewSeq); + if ( aFunction->IsLastFuntion() ) { + aSSI.SetIndices(aNewSeq); + } + else { + aFunction = theGroup->AddFunction( GEOM_Object::GetSubShapeID(), 0, true ); + GEOM_ISubShape aSSI2 (aFunction); + aSSI2.SetIndices(aNewSeq); + aSSI2.SetMainShape( aSSI.GetMainShape() ); + } // As we do not recompute here our group, lets mark it as Modified TDF_Label aLabel = aSSI.GetMainShape()->GetOwnerEntry(); @@ -255,7 +271,7 @@ void GEOMImpl_IGroupOperations::UnionList (Handle(GEOM_Object) theGroup, return; } - Handle(GEOM_Function) aFunction = theGroup->GetFunction(1); + Handle(GEOM_Function) aFunction = theGroup->GetLastFunction(); if (aFunction.IsNull()) return; GEOM_ISubShape aSSI (aFunction); @@ -361,20 +377,22 @@ void GEOMImpl_IGroupOperations::UnionList (Handle(GEOM_Object) theGroup, for (; aNewIDsIter.More(); aNewIDsIter.Next(), k++) { aNewSeq->SetValue(k, aNewIDsIter.Value()); } - - aSSI.SetIndices(aNewSeq); - + if ( aFunction->IsLastFuntion() ) { + aSSI.SetIndices(aNewSeq); + } + else { + aFunction = theGroup->AddFunction( GEOM_Object::GetSubShapeID(), 0, true ); + GEOM_ISubShape aSSI2 (aFunction); + aSSI2.SetIndices(aNewSeq); + aSSI2.SetMainShape(aMainShapeFunc); + } // As we do not recompute here our group, lets mark it as Modified Standard_Integer aTic = aMainObj->GetTic(); // tic of main shape theGroup->SetTic(aTic - 1); } //Make a Python command - Handle(GEOM_Object) aLatest = GEOM::GetCreatedLast(theSubShapes); - aLatest = GEOM::GetCreatedLast(aLatest, theGroup); - Handle(GEOM_Function) aLastFunc = aLatest->GetLastFunction(); - - GEOM::TPythonDump pd (aLastFunc, /*append=*/true); + GEOM::TPythonDump pd (aFunction, /*append=*/true); pd << "geompy.UnionList(" << theGroup << ", ["; for (i = 1; i <= aLen; i++) { @@ -403,7 +421,7 @@ void GEOMImpl_IGroupOperations::DifferenceList (Handle(GEOM_Object) theGroup, return; } - Handle(GEOM_Function) aFunction = theGroup->GetFunction(1); + Handle(GEOM_Function) aFunction = theGroup->GetLastFunction(); if (aFunction.IsNull()) return; GEOM_ISubShape aSSI (aFunction); @@ -504,19 +522,22 @@ void GEOMImpl_IGroupOperations::DifferenceList (Handle(GEOM_Object) theGroup, aNewSeq->SetValue(1, -1); } - aSSI.SetIndices(aNewSeq); - + if ( aFunction->IsLastFuntion() ) { + aSSI.SetIndices(aNewSeq); + } + else { + aFunction = theGroup->AddFunction( GEOM_Object::GetSubShapeID(), 0, true ); + GEOM_ISubShape aSSI2 (aFunction); + aSSI2.SetIndices(aNewSeq); + aSSI2.SetMainShape(aMainShapeFunc); + } // As we do not recompute here our group, lets mark it as Modified Standard_Integer aTic = aMainObj->GetTic(); // tic of main shape theGroup->SetTic(aTic - 1); } //Make a Python command - Handle(GEOM_Object) aLatest = GEOM::GetCreatedLast(theSubShapes); - aLatest = GEOM::GetCreatedLast(aLatest, theGroup); - Handle(GEOM_Function) aLastFunc = aLatest->GetLastFunction(); - - GEOM::TPythonDump pd (aLastFunc, /*append=*/true); + GEOM::TPythonDump pd (aFunction, /*append=*/true); pd << "geompy.DifferenceList(" << theGroup << ", ["; for (i = 1; i <= aLen; i++) { @@ -545,7 +566,7 @@ void GEOMImpl_IGroupOperations::UnionIDs (Handle(GEOM_Object) theGroup, return; } - Handle(GEOM_Function) aFunction = theGroup->GetFunction(1); + Handle(GEOM_Function) aFunction = theGroup->GetLastFunction(); if (aFunction.IsNull()) return; GEOM_ISubShape aSSI (aFunction); @@ -602,9 +623,15 @@ void GEOMImpl_IGroupOperations::UnionIDs (Handle(GEOM_Object) theGroup, for (; aNewIDsIter.More(); aNewIDsIter.Next(), k++) { aNewSeq->SetValue(k, aNewIDsIter.Value()); } - - aSSI.SetIndices(aNewSeq); - + if ( aFunction->IsLastFuntion() ) { + aSSI.SetIndices(aNewSeq); + } + else { + aFunction = theGroup->AddFunction( GEOM_Object::GetSubShapeID(), 0, true ); + GEOM_ISubShape aSSI2 (aFunction); + aSSI2.SetIndices(aNewSeq); + aSSI2.SetMainShape(aMainShapeFunc); + } // As we do not recompute here our group, lets mark it as Modified Standard_Integer aTic = aMainObj->GetTic(); // tic of main shape theGroup->SetTic(aTic - 1); @@ -638,7 +665,7 @@ void GEOMImpl_IGroupOperations::DifferenceIDs (Handle(GEOM_Object) theGroup, return; } - Handle(GEOM_Function) aFunction = theGroup->GetFunction(1); + Handle(GEOM_Function) aFunction = theGroup->GetLastFunction(); if (aFunction.IsNull()) return; GEOM_ISubShape aSSI (aFunction); @@ -699,9 +726,15 @@ void GEOMImpl_IGroupOperations::DifferenceIDs (Handle(GEOM_Object) theGroup, aNewSeq = new TColStd_HArray1OfInteger(1,1); aNewSeq->SetValue(1, -1); } - - aSSI.SetIndices(aNewSeq); - + if ( aFunction->IsLastFuntion() ) { + aSSI.SetIndices(aNewSeq); + } + else { + aFunction = theGroup->AddFunction( GEOM_Object::GetSubShapeID(), 0, true ); + GEOM_ISubShape aSSI2 (aFunction); + aSSI2.SetIndices(aNewSeq); + aSSI2.SetMainShape(aMainShapeFunc); + } // As we do not recompute here our group, lets mark it as Modified Standard_Integer aTic = aMainObj->GetTic(); // tic of main shape theGroup->SetTic(aTic - 1); @@ -775,7 +808,7 @@ Handle(TColStd_HArray1OfInteger) GEOMImpl_IGroupOperations::GetObjects(Handle(GE if(theGroup.IsNull()) return NULL; - Handle(GEOM_Function) aFunction = theGroup->GetFunction(1); + Handle(GEOM_Function) aFunction = theGroup->GetLastFunction(); if(aFunction.IsNull()) return NULL; GEOM_ISubShape aSSI(aFunction); -- 2.39.2