From 20aa0d3fdd2ef5fe25aa279beece4792cd683578 Mon Sep 17 00:00:00 2001 From: imn Date: Thu, 9 Mar 2017 19:20:43 +0300 Subject: [PATCH] 0028226: Incorrect history support in ShapeUpgrade_UnifySameDomain algorithm - The methods "Modified" and "IsDeleted" have been added for history support in "ShapeUpgrade_UnifySameDomain" class. - The new Draw commands "unifysamedommod" and "unifysamedomisdel" have been added. - Adoption of other algorithms using this one to its new behavior. Removing code duplication Correcting regressions Correcting remarks --- dox/dev_guides/upgrade/upgrade.md | 4 + src/BOPAlgo/BOPAlgo_CellsBuilder.cxx | 15 ++- .../BRepOffsetAPI_MiddlePath.cxx | 59 +++++---- src/SWDRAW/SWDRAW_ShapeUpgrade.cxx | 107 ++++++++++++++--- .../ShapeUpgrade_UnifySameDomain.cxx | 112 ++++++++++++++---- .../ShapeUpgrade_UnifySameDomain.hxx | 21 +++- tests/heal/unify_same_domain/A4 | 109 +++++++++++++++++ 7 files changed, 364 insertions(+), 63 deletions(-) create mode 100644 tests/heal/unify_same_domain/A4 diff --git a/dox/dev_guides/upgrade/upgrade.md b/dox/dev_guides/upgrade/upgrade.md index 313b825b0d..615cf8a451 100644 --- a/dox/dev_guides/upgrade/upgrade.md +++ b/dox/dev_guides/upgrade/upgrade.md @@ -1228,3 +1228,7 @@ The following Grid management methods within class V3d_Viewer do not implicitly * The classes *BOPDS_PassKey* and *BOPDS_PassKeyBoolean* are too excessive and not used any more in Boolean Operations. To replace them the new *BOPDS_Pair* class has been implemented. Thus: - The method *BOPDS_DS::Interferences()* now returns the *BOPDS_MapOfPair*; - The method *BOPDS_Iterator::Value()* takes now only two parameters - the indices of interfering sub-shapes. + +@subsection upgrade_720_UnifySameDomain_history History changes in ShapeUpgrade_UnifySameDomain algorithm + +* The result of Generated and Modified methods in ShapeUpgrade_UnifySameDomain class is now returned list of shape instead only one shape. diff --git a/src/BOPAlgo/BOPAlgo_CellsBuilder.cxx b/src/BOPAlgo/BOPAlgo_CellsBuilder.cxx index 8302bf61a0..04c40471ca 100644 --- a/src/BOPAlgo/BOPAlgo_CellsBuilder.cxx +++ b/src/BOPAlgo/BOPAlgo_CellsBuilder.cxx @@ -667,9 +667,18 @@ Standard_Integer BOPAlgo_CellsBuilder::RemoveInternals(const BOPCol_ListOfShape& aNb = aMG.Extent(); for (i = 1; i <= aNb; ++i) { const TopoDS_Shape& aSS = aMG(i); - const TopoDS_Shape& aSGen = anUnify.Generated(aSS); - if (!aSGen.IsNull() && !aSS.IsSame(aSGen)) { - myMapGenerated.Bind(aSS, aSGen); + const TopTools_ListOfShape& aLSGen = anUnify.Generated(aSS); + TopTools_ListIteratorOfListOfShape aIt(aLSGen); + for (; aIt.More(); aIt.Next()) { + const TopoDS_Shape& aShape = aIt.Value(); + if (!aShape.IsNull() && !aSS.IsSame(aShape)) + myMapGenerated.Bind(aSS, aShape); + } + const TopTools_ListOfShape& aLSMod = anUnify.Modified(aSS); + for (aIt.Init(aLSMod); aIt.More(); aIt.Next()) { + const TopoDS_Shape& aShape = aIt.Value(); + if (!aShape.IsNull() && !aSS.IsSame(aShape)) + myMapGenerated.Bind(aSS, aShape); } } } diff --git a/src/BRepOffsetAPI/BRepOffsetAPI_MiddlePath.cxx b/src/BRepOffsetAPI/BRepOffsetAPI_MiddlePath.cxx index 7ae59c3270..112713abd4 100644 --- a/src/BRepOffsetAPI/BRepOffsetAPI_MiddlePath.cxx +++ b/src/BRepOffsetAPI/BRepOffsetAPI_MiddlePath.cxx @@ -257,6 +257,41 @@ BRepOffsetAPI_MiddlePath::BRepOffsetAPI_MiddlePath(const TopoDS_Shape& aShape, } */ +//======================================================================= +//function : GetUnifiedWire +//purpose : +//======================================================================= +static TopoDS_Wire GetUnifiedWire(const TopoDS_Wire& theWire, + ShapeUpgrade_UnifySameDomain& theUnifier) +{ + BRepLib_MakeWire aWMaker; + BRepTools_WireExplorer wexp(theWire); + TopTools_MapOfShape aGeneratedEdges; + for (; wexp.More(); wexp.Next()) + { + TopoDS_Shape anEdge = wexp.Current(); + const TopTools_ListOfShape& aLSG = theUnifier.Generated(anEdge); + // take care of processing the result of Generated() before getting Modified() + Standard_Boolean isEmpty = aLSG.IsEmpty(); + if (!isEmpty) { + TopTools_ListIteratorOfListOfShape anIt(aLSG); + for (; anIt.More(); anIt.Next()) { + const TopoDS_Shape& aShape = anIt.Value(); + //wire shouldn't contain duplicated generated edges + if (aGeneratedEdges.Add(aShape)) + aWMaker.Add(TopoDS::Edge(aShape)); + } + } + const TopTools_ListOfShape& aLSM = theUnifier.Modified(anEdge); + if (!aLSM.IsEmpty()) + aWMaker.Add(aLSM); + else if (isEmpty) + // no change, put original edge + aWMaker.Add(TopoDS::Edge(anEdge)); + } + return aWMaker.Wire(); +} + //======================================================================= //function : BRepOffsetAPI_MiddlePath //purpose : Constructor @@ -287,28 +322,8 @@ BRepOffsetAPI_MiddlePath::BRepOffsetAPI_MiddlePath(const TopoDS_Shape& aShape, else anEndWire = TopoDS::Wire(EndShape); - BRepLib_MakeWire MWstart; - //TopTools_MapOfShape MapEdges; - BRepTools_WireExplorer wexp(aStartWire); - for (; wexp.More(); wexp.Next()) - { - TopoDS_Shape anEdge = wexp.Current(); - TopoDS_Shape NewEdge = Unifier.Generated(anEdge); - if (!NewEdge.IsNull()) - MWstart.Add(TopoDS::Edge(NewEdge)); - } - myStartWire = MWstart.Wire(); - - BRepLib_MakeWire MWend; - //MapEdges.Clear(); - for (wexp.Init(anEndWire); wexp.More(); wexp.Next()) - { - TopoDS_Shape anEdge = wexp.Current(); - TopoDS_Shape NewEdge = Unifier.Generated(anEdge); - if (!NewEdge.IsNull()) - MWend.Add(TopoDS::Edge(NewEdge)); - } - myEndWire = MWend.Wire(); + myStartWire = GetUnifiedWire(aStartWire, Unifier); + myEndWire = GetUnifiedWire(anEndWire, Unifier); myClosedSection = myStartWire.Closed(); myClosedRing = myStartWire.IsSame(myEndWire); diff --git a/src/SWDRAW/SWDRAW_ShapeUpgrade.cxx b/src/SWDRAW/SWDRAW_ShapeUpgrade.cxx index 22cf8959fc..134d605834 100644 --- a/src/SWDRAW/SWDRAW_ShapeUpgrade.cxx +++ b/src/SWDRAW/SWDRAW_ShapeUpgrade.cxx @@ -19,6 +19,7 @@ //pdn,gka 10.06.99 S4189: command DT_ShapeConvertRev added #include +#include #include #include #include @@ -1358,30 +1359,97 @@ static Standard_Integer unifysamedom(Draw_Interpretor& di, Standard_Integer n, c return 0; } -Standard_Integer unifysamedomgen (Draw_Interpretor& di, - Standard_Integer n, - const char** a) +Standard_Integer unifysamedomgen(Draw_Interpretor& di, + Standard_Integer n, + const char** a) { - if (n!=3) { - di << "use unifysamedomgen newshape oldshape"; + if (n != 3) { + di << "use unifysamedomgen newshape oldshape\n"; return 0; } TopoDS_Shape aShape; - aShape=DBRep::Get(a[2]); + aShape = DBRep::Get(a[2]); if (aShape.IsNull()) { - di<<" null shape is not allowed here\n"; + di << "Null shape is not allowed here\n"; return 1; } - TopoDS_Shape ResShape = Unifier().Generated(aShape); - if (ResShape.IsNull()) { - di << " null shape\n"; + + const TopTools_ListOfShape& aLS = Unifier().Generated(aShape); + + if (aLS.Extent() > 1) { + BRep_Builder aBB; + TopoDS_Compound aRes; + aBB.MakeCompound(aRes); + TopTools_ListIteratorOfListOfShape aIt(aLS); + for (; aIt.More(); aIt.Next()) { + const TopoDS_Shape& aShape = aIt.Value(); + aBB.Add(aRes, aShape); + } + DBRep::Set(a[1], aRes); + } + else if (aLS.Extent() == 1) { + DBRep::Set(a[1], aLS.First()); } else { - DBRep::Set(a[1], ResShape); + di << "No shapes were generated from the shape\n"; } return 0; } +Standard_Integer unifysamedommod(Draw_Interpretor& di, + Standard_Integer n, + const char** a) +{ + if (n != 3) { + di << "use unifysamedommod newshape oldshape\n"; + return 0; + } + TopoDS_Shape aShape; + aShape = DBRep::Get(a[2]); + if (aShape.IsNull()) { + di << "Null shape is not allowed here\n"; + return 1; + } + + const TopTools_ListOfShape& aLS = Unifier().Modified(aShape); + + if (aLS.Extent() > 1) { + BRep_Builder aBB; + TopoDS_Compound aRes; + aBB.MakeCompound(aRes); + TopTools_ListIteratorOfListOfShape aIt(aLS); + for (; aIt.More(); aIt.Next()) { + const TopoDS_Shape& aShape = aIt.Value(); + aBB.Add(aRes, aShape); + } + DBRep::Set(a[1], aRes); + } + else if (aLS.Extent() == 1) { + DBRep::Set(a[1], aLS.First()); + } + else { + di << "The shape has not been modified\n"; + } + return 0; +} + +Standard_Integer unifysamedomisdel(Draw_Interpretor& di, + Standard_Integer n, + const char** a) +{ + if (n < 2) { + di << "Use: unifysamedomisdel shape\n"; + return 1; + } + TopoDS_Shape aShape = DBRep::Get(a[1]); + if (aShape.IsNull()) { + di << "Null shape is not allowed here\n"; + return 1; + } + Standard_Boolean IsDeleted = Unifier().IsDeleted(aShape); + di << "The shape has" << (IsDeleted ? " " : " not ") << "been deleted" << "\n"; + return 0; +} static Standard_Integer copytranslate(Draw_Interpretor& di, Standard_Integer argc, @@ -1588,10 +1656,19 @@ Standard_Integer reshape(Draw_Interpretor& di, theCommands.Add ("unifysamedom", "unifysamedom result shape [s1 s2 ...] [-f] [-e] [+b] [+i] [-t val] [-a val]", __FILE__,unifysamedom,g); - theCommands.Add ("unifysamedomgen", - "unifysamedomgen newshape oldshape : get new shape generated " - "by unifysamedom command from the old one", - __FILE__,unifysamedomgen,g); + theCommands.Add("unifysamedomgen", + "unifysamedomgen newshape oldshape : get new shape generated " + "by unifysamedom command from the old one", + __FILE__, unifysamedomgen, g); + + theCommands.Add("unifysamedommod", + "unifysamedommod newshape oldshape : get new shape modified " + "by unifysamedom command from the old one", + __FILE__, unifysamedommod, g); + + theCommands.Add("unifysamedomisdel", + "unifysamedomisdel shape : shape is deleted ", + __FILE__, unifysamedomisdel, g); theCommands.Add ("copytranslate","result shape dx dy dz",__FILE__,copytranslate,g); diff --git a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx index c9a798be17..7286e158b9 100644 --- a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx +++ b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.cxx @@ -1080,8 +1080,9 @@ static Standard_Boolean MergeSeq (TopTools_SequenceOfShape& SeqEdges, const Standard_Real Tol, const Standard_Boolean ConcatBSplines, Handle(ShapeBuild_ReShape)& theContext, - TopTools_DataMapOfShapeShape& theOldShapes, + TopTools_DataMapOfShapeShape& theOldToGeneratedShapes, const TopTools_MapOfShape& nonMergVert, + TopTools_MapOfShape& RemovedShapes, const TopTools_DataMapOfShapeShape& NewEdges2OldEdges) { NCollection_Sequence SeqOfSubsSeqOfEdges; @@ -1091,15 +1092,27 @@ static Standard_Boolean MergeSeq (TopTools_SequenceOfShape& SeqEdges, { if (SeqOfSubsSeqOfEdges(i).UnionEdges.IsNull()) continue; - theContext->Replace(SeqOfSubsSeqOfEdges(i).SeqsEdges(1), SeqOfSubsSeqOfEdges(i).UnionEdges); - for (Standard_Integer j = 2; j <= SeqOfSubsSeqOfEdges(i).SeqsEdges.Length(); j++) + ShapeAnalysis_Edge sae; + TopoDS_Vertex VF = sae.FirstVertex(SeqOfSubsSeqOfEdges(i).UnionEdges); + TopoDS_Vertex VL = sae.LastVertex(SeqOfSubsSeqOfEdges(i).UnionEdges); + for (Standard_Integer j = 1; j <= SeqOfSubsSeqOfEdges(i).SeqsEdges.Length(); j++) { const TopoDS_Shape& anOldEdge = SeqOfSubsSeqOfEdges(i).SeqsEdges(j); const TopoDS_Shape* pOrigEdge = NewEdges2OldEdges.Seek(anOldEdge); if (!pOrigEdge) pOrigEdge = &anOldEdge; - theOldShapes.Bind(*pOrigEdge, SeqOfSubsSeqOfEdges(i).UnionEdges); - theContext->Remove(SeqOfSubsSeqOfEdges(i).SeqsEdges(j)); + theOldToGeneratedShapes.Bind(*pOrigEdge, SeqOfSubsSeqOfEdges(i).UnionEdges); + if (j == 1) + theContext->Replace(anOldEdge, SeqOfSubsSeqOfEdges(i).UnionEdges); + else + theContext->Remove(anOldEdge); + TopoDS_Vertex V[2]; + TopExp::Vertices(TopoDS::Edge(anOldEdge), V[0], V[1]); + for (int k = 0; k < 2; k++) + { + if (!V[k].IsEqual(VF) && !V[k].IsEqual(VL)) + RemovedShapes.Add(V[k]); + } } } return Standard_True; @@ -1194,8 +1207,9 @@ void ShapeUpgrade_UnifySameDomain::Initialize(const TopoDS_Shape& aShape, myConcatBSplines = ConcatBSplines; myContext->Clear(); - myOldShapes.Clear(); + myOldToGeneratedShapes.Clear(); myKeepShapes.Clear(); + myRemovedShapes.Clear(); } //======================================================================= @@ -1516,6 +1530,28 @@ void ShapeUpgrade_UnifySameDomain::IntUnifyFaces(const TopoDS_Shape& theInpShape Standard_Integer nbWires = 0; TopoDS_Face tmpF = TopoDS::Face(myContext->Apply(faces(1).Oriented(TopAbs_FORWARD))); + + TopTools_IndexedMapOfShape anOldEdges; + for (int j = 1; j <= faces.Length(); j++) { + TopExp::MapShapes(faces(j), TopAbs_EDGE, anOldEdges); + } + TopTools_IndexedMapOfShape aMapEdgesAndVertexes; + for (int j = 1; j <= edges.Length(); j++) { + TopExp::MapShapes(edges(j), aMapEdgesAndVertexes); + } + for (int j = 1; j <= anOldEdges.Extent(); j++) { + const TopoDS_Edge& anEdge = TopoDS::Edge(anOldEdges(j)); + if (!aMapEdgesAndVertexes.Contains(anEdge)) { + myRemovedShapes.Add(anEdge); + TopoDS_Vertex V[2]; + TopExp::Vertices(anEdge, V[0], V[1]); + for (int k = 0; k < 2; k++) { + if (!aMapEdgesAndVertexes.Contains(V[k])) + myRemovedShapes.Add(V[k]); + } + } + } + // connecting wires while (edges.Length()>0) { @@ -1575,6 +1611,7 @@ void ShapeUpgrade_UnifySameDomain::IntUnifyFaces(const TopoDS_Shape& theInpShape if(BRep_Tool::Degenerated(E)) { sewd->Remove(j); isDegRemoved = Standard_True; + myRemovedShapes.Add(E); j--; } } @@ -1752,10 +1789,11 @@ void ShapeUpgrade_UnifySameDomain::IntUnifyFaces(const TopoDS_Shape& theInpShape } // remove the remaining faces - for(i = 2; i <= faces.Length(); i++) + for(i = 1; i <= faces.Length(); i++) { - myOldShapes.Bind(faces(i), theResult); - myContext->Remove(faces(i)); + myOldToGeneratedShapes.Bind(faces(i), theResult); + if (i > 1) + myContext->Remove(faces(i)); } } } // end processing each face @@ -1837,7 +1875,6 @@ void ShapeUpgrade_UnifySameDomain::UnifyEdges() TopTools_MapOfShape SharedVert; - TopTools_IndexedMapOfShape anOldEdges; TopExp::MapShapes(myInitShape, TopAbs_EDGE, anOldEdges); @@ -1860,7 +1897,8 @@ void ShapeUpgrade_UnifySameDomain::UnifyEdges() SharedVert.Clear(); CheckSharedVertices(SeqEdges, aMapEdgesVertex, myKeepShapes, SharedVert); MergeSeq(SeqEdges, Tol, myConcatBSplines, myContext, - myOldShapes, SharedVert, NewEdges2OldEdges); + myOldToGeneratedShapes, SharedVert, + myRemovedShapes, NewEdges2OldEdges); } TopTools_DataMapOfShapeShape oldFaces2NewFaces; @@ -1921,7 +1959,8 @@ void ShapeUpgrade_UnifySameDomain::UnifyEdges() //if (!SharedVert.IsEmpty()) // continue; if ( MergeSeq(SeqEdges, Tol, myConcatBSplines, myContext, - myOldShapes, SharedVert, NewEdges2OldEdges) ) + myOldToGeneratedShapes, SharedVert, + myRemovedShapes, NewEdges2OldEdges)) { //for history /* @@ -1952,7 +1991,8 @@ void ShapeUpgrade_UnifySameDomain::UnifyEdges() SharedVert.Clear(); CheckSharedVertices(aNonSharedEdges, aMapEdgesVertex, myKeepShapes, SharedVert); if ( MergeSeq(aNonSharedEdges, Tol, myConcatBSplines, myContext, - myOldShapes, SharedVert, NewEdges2OldEdges) ) + myOldToGeneratedShapes, SharedVert, + myRemovedShapes, NewEdges2OldEdges)) { TopoDS_Face tmpF = TopoDS::Face(exp.Current()); if ( !ChangedFaces.Contains(tmpF) ) @@ -2081,12 +2121,44 @@ const TopoDS_Shape& ShapeUpgrade_UnifySameDomain::Shape() const //function : Generated //purpose : returns the new shape from the old one //======================================================================= -TopoDS_Shape ShapeUpgrade_UnifySameDomain::Generated(const TopoDS_Shape& aShape) const +const TopTools_ListOfShape& ShapeUpgrade_UnifySameDomain::Generated(const TopoDS_Shape& aShape) { - TopoDS_Shape aNewShape = myContext->Apply(aShape); - - if (aNewShape.IsNull()) - aNewShape = myContext->Apply(myOldShapes(aShape)); - - return aNewShape; + const TopoDS_Shape* aNewShape; + myHistShapes.Clear(); + aNewShape = myOldToGeneratedShapes.Seek(aShape); + if (aNewShape) { + if (myContext->IsRecorded(*aNewShape)) + myHistShapes.Append(myContext->Apply(*aNewShape)); + else + myHistShapes.Append(*aNewShape); + } + return myHistShapes; +} + +//======================================================================= +//function : Modified +//purpose : returns the new modified shape from the old one shape +//======================================================================= +const TopTools_ListOfShape& ShapeUpgrade_UnifySameDomain::Modified(const TopoDS_Shape& aShape) +{ + TopoDS_Shape aNewShape; + Standard_Integer aModifiedStatus; + myHistShapes.Clear(); + if (!myOldToGeneratedShapes.Seek(aShape) && + !myRemovedShapes.Contains(aShape) && + myContext->IsRecorded(aShape)){ + aModifiedStatus = myContext->Status(aShape, aNewShape, Standard_True); + if (aModifiedStatus > 0) + myHistShapes.Append(aNewShape); + } + return myHistShapes; +} + +//======================================================================= +//function : IsDeleted +//purpose : returns true if the shape has been deleted. +//======================================================================= +Standard_Boolean ShapeUpgrade_UnifySameDomain::IsDeleted(const TopoDS_Shape& aShape) +{ + return myRemovedShapes.Contains(aShape); } diff --git a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.hxx b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.hxx index 0206b467fc..79d892dc34 100644 --- a/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.hxx +++ b/src/ShapeUpgrade/ShapeUpgrade_UnifySameDomain.hxx @@ -94,8 +94,21 @@ public: //! Gives the resulting shape Standard_EXPORT const TopoDS_Shape& Shape() const; - //! Gets new common shape from the old one - Standard_EXPORT TopoDS_Shape Generated (const TopoDS_Shape& aShape) const; + //! Returns list of new common shapes from the old one shape. + //! After successful common operation based on list + //! will contain new generated shape. + //! In other cases it will return an empty list + Standard_EXPORT const TopTools_ListOfShape& Generated(const TopoDS_Shape& aShape); + + //! Returns list of new modified shapes. + //! After successful modifying without geometry changes list + //! will contain new modified shape. + //! In other cases it will return an empty list + Standard_EXPORT const TopTools_ListOfShape& Modified(const TopoDS_Shape& aShape); + + //! Returns true if the has been deleted. The + //! result shape of the operation does not contain even trace of . + Standard_EXPORT Standard_Boolean IsDeleted(const TopoDS_Shape& aShape); //! this method makes if possible a common face from each //! group of faces lying on coincident surfaces @@ -133,7 +146,9 @@ private: Standard_Boolean myAllowInternal; TopoDS_Shape myShape; Handle(ShapeBuild_ReShape) myContext; - TopTools_DataMapOfShapeShape myOldShapes; + TopTools_DataMapOfShapeShape myOldToGeneratedShapes; + TopTools_ListOfShape myHistShapes; + TopTools_MapOfShape myRemovedShapes; TopTools_MapOfShape myKeepShapes; diff --git a/tests/heal/unify_same_domain/A4 b/tests/heal/unify_same_domain/A4 new file mode 100644 index 0000000000..82b024edf8 --- /dev/null +++ b/tests/heal/unify_same_domain/A4 @@ -0,0 +1,109 @@ +puts "==========" +puts "OCC28226" +puts "==========" +puts "" +##################################################################### +# Incorrect history support in ShapeUpgrade_UnifySameDomain algorithm +##################################################################### + +restore [locate_data_file bug28228_face.brep] a + +explode a f +explode a_1 v +explode a e + +unifysamedom result a a_3 a_1_3 a_1_4 + +set bug_info [unifysamedomgen res a_9] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "No shapes were generated from the shape"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomgen does not work correctly." +} + +set bug_info [unifysamedomgen res a_10] +if {$bug_info != ""} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomgen does not work correctly." +} + +set bug_info [unifysamedomgen res a_11] +if {$bug_info != ""} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomgen does not work correctly." +} + +set bug_info [unifysamedomgen res a_3] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "No shapes were generated from the shape"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomgen does not work correctly." +} + +set bug_info [unifysamedommod res a_1] +if {$bug_info != ""} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedommod does not work correctly." +} + +set bug_info [unifysamedommod res a_3] +if {$bug_info != ""} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedommod does not work correctly." +} + +set bug_info [unifysamedommod res a_10] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has not been modified"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedommod does not work correctly." +} + +set bug_info [unifysamedommod res a_11] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has not been modified"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedommod does not work correctly." +} + +set bug_info [unifysamedomisdel a_3] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has not been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} + +set bug_info [unifysamedomisdel a_9] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} + +set bug_info [unifysamedomisdel a_1_8] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} + +set bug_info [unifysamedomisdel a_1_9] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} + +set bug_info [unifysamedomisdel a_10] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has not been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} + +set bug_info [unifysamedomisdel a_11] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has not been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} + +unifysamedom result2 a a_3 a_1_3 a_1_4 -e + +set bug_info [unifysamedomisdel a_1_8] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has not been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} + +set bug_info [unifysamedomisdel a_1_9] +set bug_info [string trim [string range $bug_info 0 [expr {[string first "\n" $bug_info] - 1}]]] +if {$bug_info != "The shape has been deleted"} { + puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly." +} \ No newline at end of file