From 136270a5cf0d57036b25ae18c301bca14983dc9d Mon Sep 17 00:00:00 2001 From: jfa Date: Thu, 9 Apr 2009 09:08:39 +0000 Subject: [PATCH] Bug 0020229: Perf of MakeSphere and RemoveObject. Allow to re-use empty label, following the _lastCleared one. --- src/GEOM/GEOM_Engine.cxx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/GEOM/GEOM_Engine.cxx b/src/GEOM/GEOM_Engine.cxx index 101c994ea..3b700a01d 100644 --- a/src/GEOM/GEOM_Engine.cxx +++ b/src/GEOM/GEOM_Engine.cxx @@ -210,7 +210,13 @@ Handle(GEOM_Object) GEOM_Engine::AddObject(int theDocID, int theType) if (_lastCleared.Root() == aDoc->Main().Root()) { useExisting = true; aChild = _lastCleared; - _lastCleared.Nullify(); + // 0020229: if next label exists and is empty, try to reuse it + Standard_Integer aNextTag = aChild.Tag() + 1; + TDF_Label aNextL = aDoc->Main().FindChild(aNextTag, Standard_False); + if (!aNextL.IsNull() && !aNextL.HasAttribute()) + _lastCleared = aNextL; + else + _lastCleared.Nullify(); } } if (!useExisting) { @@ -250,7 +256,13 @@ Handle(GEOM_Object) GEOM_Engine::AddSubShape(Handle(GEOM_Object) theMainShape, if (_lastCleared.Root() == aDoc->Main().Root()) { useExisting = true; aChild = _lastCleared; - _lastCleared.Nullify(); + // 0020229: if next label exists and is empty, try to reuse it + Standard_Integer aNextTag = aChild.Tag() + 1; + TDF_Label aNextL = aDoc->Main().FindChild(aNextTag, Standard_False); + if (!aNextL.IsNull() && !aNextL.HasAttribute()) + _lastCleared = aNextL; + else + _lastCleared.Nullify(); } } if (!useExisting) { -- 2.39.2