Since 7.2.0 version, method *IsPeriodic()* returns the corresponding status of periodicity of the basis curve regardless of closure status of the adaptor curve (see method *IsClosed()*).
Method *IsClosed()* for adaptor can return false even on periodic curve, in the case if its parametric range is not full period, e.g. for adaptor on circle in range [0, @f$ \pi @f$].
In previous versions, *IsPeriodic()* always returned false if *IsClosed()* returned false.
+
+@subsection upgrade_720_persistence Change in algorithm ShapeUpgrade_UnifySameDomain
+
+The history of the changing of the initial shape was corrected:
+* all shapes created by the algorithm are considered as modified shapes instead of generated ones;
+* method Generated was removed and its calls should be replaced by calls of method History()->Modified.
myIndex(100, myAllocator),
myMaterials(100, myAllocator),
myShapeMaterial(100, myAllocator),
- myMapGenerated(100, myAllocator)
+ myMapModified(100, myAllocator)
{
}
myIndex(100, myAllocator),
myMaterials(100, myAllocator),
myShapeMaterial(100, myAllocator),
- myMapGenerated(100, myAllocator)
+ myMapModified(100, myAllocator)
{
}
myIndex.Clear();
myMaterials.Clear();
myShapeMaterial.Clear();
- myMapGenerated.Clear();
+ myMapModified.Clear();
}
//=======================================================================
{
myShapeMaterial.Clear();
myMaterials.Clear();
- myMapGenerated.Clear();
+ myMapModified.Clear();
//
myShape = myAllParts;
//
//
myMaterials.Clear();
myShapeMaterial.Clear();
- myMapGenerated.Clear();
+ myMapModified.Clear();
//
PrepareHistory();
}
return bRemoved;
}
//
- // fill map of generated shapes
+ // fill map of modified shapes
BOPCol_IndexedMapOfShape aMG;
Standard_Integer i, aNb;
//
aNb = aMG.Extent();
for (i = 1; i <= aNb; ++i) {
const TopoDS_Shape& aSS = aMG(i);
- const TopTools_ListOfShape& aLSGen = anUnify.Generated(aSS);
- TopTools_ListIteratorOfListOfShape aIt(aLSGen);
+ const TopTools_ListOfShape& aLSMod = anUnify.History()->Modified(aSS);
+ TopTools_ListIteratorOfListOfShape aIt(aLSMod);
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aSU = aIt.Value();
if (!aSU.IsNull() && !aSS.IsSame(aSU)) {
- myMapGenerated.Bind(aSS, aSU);
- bRemoved = Standard_True;
- }
- }
- const TopTools_ListOfShape& aLSMod = anUnify.Modified(aSS);
- for (aIt.Init(aLSMod); aIt.More(); aIt.Next()) {
- const TopoDS_Shape& aSU = aIt.Value();
- if (!aSU.IsNull() && !aSS.IsSame(aSU)) {
- myMapGenerated.Bind(aSS, aSU);
+ myMapModified.Bind(aSS, aSU);
bRemoved = Standard_True;
}
}
return bRet;
}
//
- Standard_Boolean bHasImage, bHasGenerated;
+ Standard_Boolean bHasImage, bHasModified;
//
bHasImage = myImages.IsBound(theS);
- bHasGenerated = myMapGenerated.IsBound(theS);
- if (!bHasImage && !bHasGenerated) {
+ bHasModified = myMapModified.IsBound(theS);
+ if (!bHasImage && !bHasModified) {
bRet = !myMapShape.Contains(theS);
return bRet;
}
//
- if (bHasGenerated) {
- const TopoDS_Shape& aSG = myMapGenerated.Find(theS);
+ if (bHasModified) {
+ const TopoDS_Shape& aSG = myMapModified.Find(theS);
if (myMapShape.Contains(aSG)) {
bRet = Standard_False;
return bRet;
const TopoDS_Shape& aSpR = myShapesSD.IsBound(aSp) ?
myShapesSD.Find(aSp) : aSp;
//
- const TopoDS_Shape& aSpRG = myMapGenerated.IsBound(aSpR) ?
- myMapGenerated.Find(aSpR) : aSpR;
+ const TopoDS_Shape& aSpRG = myMapModified.IsBound(aSpR) ?
+ myMapModified.Find(aSpR) : aSpR;
if (myMapShape.Contains(aSpRG)) {
bRet = Standard_False;
break;
}
//=======================================================================
-//function : Generated
+//function : Modified
//purpose :
//=======================================================================
-const TopTools_ListOfShape& BOPAlgo_CellsBuilder::Generated(const TopoDS_Shape& theS)
+const TopTools_ListOfShape& BOPAlgo_CellsBuilder::Modified(const TopoDS_Shape& theS)
{
myHistShapes.Clear();
if (theS.IsNull()) {
return myHistShapes;
}
//
- Standard_Boolean bHasGenerated = myMapGenerated.IsBound(theS);
- if (bHasGenerated) {
- const TopoDS_Shape& aSG = myMapGenerated.Find(theS);
+ Standard_Boolean bHasModified = myMapModified.IsBound(theS);
+ if (bHasModified) {
+ const TopoDS_Shape& aSG = myMapModified.Find(theS);
if (myMapShape.Contains(aSG)) {
myHistShapes.Append(aSG);
}
const TopoDS_Shape& aSpR = myShapesSD.IsBound(aSp) ?
myShapesSD.Find(aSp) : aSp;
//
- if (myMapGenerated.IsBound(aSpR)) {
- const TopoDS_Shape& aSG = myMapGenerated.Find(aSpR);
+ if (myMapModified.IsBound(aSpR)) {
+ const TopoDS_Shape& aSG = myMapModified.Find(aSpR);
if (myMapShape.Contains(aSG)) {
if (aMFence.Add(aSG)) {
myHistShapes.Append(aSG);
}
}
}
+ else if (aMFence.Add(aSpR))
+ {
+ myHistShapes.Append(aSpR);
+ }
}
//
return myHistShapes;
Standard_EXPORT void MakeContainers();
//! Returns the list of shapes generated from the shape theS.
- Standard_EXPORT virtual const TopTools_ListOfShape& Generated(const TopoDS_Shape& theS) Standard_OVERRIDE;
+ Standard_EXPORT virtual const TopTools_ListOfShape& Modified(const TopoDS_Shape& theS) Standard_OVERRIDE;
//! Returns true if the shape theS has been deleted.
Standard_EXPORT virtual Standard_Boolean IsDeleted (const TopoDS_Shape& theS) Standard_OVERRIDE;
BOPCol_IndexedDataMapOfShapeListOfShape myIndex;
BOPCol_DataMapOfIntegerListOfShape myMaterials;
BOPCol_DataMapOfShapeInteger myShapeMaterial;
- BOPCol_DataMapOfShapeShape myMapGenerated;
+ BOPCol_DataMapOfShapeShape myMapModified;
private:
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);
+ const TopTools_ListOfShape& aLS = theUnifier.History()->Modified(anEdge);
+ if (!aLS.IsEmpty())
+ {
+ TopTools_ListIteratorOfListOfShape anIt(aLS);
for (; anIt.More(); anIt.Next()) {
const TopoDS_Shape& aShape = anIt.Value();
//wire shouldn't contain duplicated generated edges
aWMaker.Add(TopoDS::Edge(aShape));
}
}
- const TopTools_ListOfShape& aLSM = theUnifier.Modified(anEdge);
- if (!aLSM.IsEmpty())
- aWMaker.Add(aLSM);
- else if (isEmpty)
+ else
+ {
// no change, put original edge
aWMaker.Add(TopoDS::Edge(anEdge));
+ }
}
return aWMaker.Wire();
}
return 0;
}
-Standard_Integer unifysamedomgen(Draw_Interpretor& di,
- Standard_Integer n,
- const char** a)
-{
- if (n != 3) {
- di << "use unifysamedomgen 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().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& aCurrentShape = aIt.Value();
- aBB.Add(aRes, aCurrentShape);
- }
- DBRep::Set(a[1], aRes);
- }
- else if (aLS.Extent() == 1) {
- DBRep::Set(a[1], aLS.First());
- }
- else {
- di << "No shapes were generated from the shape\n";
- }
- return 0;
-}
-
Standard_Integer unifysamedommod(Draw_Interpretor& di,
Standard_Integer n,
const char** a)
return 1;
}
- const TopTools_ListOfShape& aLS = Unifier().Modified(aShape);
+ const TopTools_ListOfShape& aLS = Unifier().History()->Modified(aShape);
if (aLS.Extent() > 1) {
BRep_Builder aBB;
di << "Null shape is not allowed here\n";
return 1;
}
- Standard_Boolean IsDeleted = Unifier().IsDeleted(aShape);
+ Standard_Boolean IsDeleted = Unifier().History()->IsRemoved(aShape);
di << "The shape has" << (IsDeleted ? " " : " not ") << "been deleted" << "\n";
return 0;
}
theCommands.Add ("unifysamedom",
"unifysamedom result shape [s1 s2 ...] [-f] [-e] [-nosafe] [+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("unifysamedommod",
"unifysamedommod newshape oldshape : get new shape modified "
const Standard_Boolean ConcatBSplines,
const Standard_Boolean isSafeInputMode,
Handle(ShapeBuild_ReShape)& theContext,
- TopTools_DataMapOfShapeShape& theOldToGeneratedShapes,
const TopTools_MapOfShape& nonMergVert,
- TopTools_MapOfShape& RemovedShapes,
- const TopTools_DataMapOfShapeShape& NewEdges2OldEdges)
+ TopTools_MapOfShape& theRemovedVertices)
{
NCollection_Sequence<SubSequenceOfEdges> SeqOfSubsSeqOfEdges;
if (MergeEdges(SeqEdges, theAngTol, ConcatBSplines, isSafeInputMode,
{
if (SeqOfSubsSeqOfEdges(i).UnionEdges.IsNull())
continue;
+
+ theContext->Merge(SeqOfSubsSeqOfEdges(i).SeqsEdges,
+ SeqOfSubsSeqOfEdges(i).UnionEdges);
+
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;
- 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++)
+ for (int k = 0; k < 2; k++)
{
+ TopoDS_Vertex aV = V[k];
if (isSafeInputMode) // vertex might be changed and replaced
- V[k] = TopoDS::Vertex(theContext->Apply(V[k]));
- if (!V[k].IsEqual(VF) && !V[k].IsEqual(VL))
- RemovedShapes.Add(V[k]);
+ aV = TopoDS::Vertex(theContext->Apply(aV));
+ if (!aV.IsEqual(VF) && !aV.IsEqual(VL))
+ theRemovedVertices.Add(V[k]);
}
}
}
myUnifyEdges (Standard_True),
myConcatBSplines (Standard_False),
myAllowInternal (Standard_False),
- mySafeInputMode(Standard_True)
+ mySafeInputMode(Standard_True),
+ myHistory(new BRepTools_History)
{
myContext = new ShapeBuild_ReShape;
}
myConcatBSplines (ConcatBSplines),
myAllowInternal (Standard_False),
mySafeInputMode (Standard_True),
- myShape (aShape)
+ myShape (aShape),
+ myHistory(new BRepTools_History)
{
myContext = new ShapeBuild_ReShape;
}
myConcatBSplines = ConcatBSplines;
myContext->Clear();
- myOldToGeneratedShapes.Clear();
+ myRemoved.Clear();
myKeepShapes.Clear();
- myRemovedShapes.Clear();
}
//=======================================================================
for (int j = 1; j <= edges.Length(); j++) {
TopExp::MapShapes(edges(j), aMapEdgesAndVertexes);
}
- for (int j = 1; j <= anOldEdges.Extent(); j++) {
+
+ for (int j = 1; j <= anOldEdges.Extent(); j++)
+ {
const TopoDS_Edge& anEdge = TopoDS::Edge(anOldEdges(j));
- if (!aMapEdgesAndVertexes.Contains(anEdge)) {
- myRemovedShapes.Add(anEdge);
+ if (!aMapEdgesAndVertexes.Contains(anEdge))
+ {
+ myRemoved.Add(anEdge);
+
TopoDS_Vertex V[2];
TopExp::Vertices(anEdge, V[0], V[1]);
- for (int k = 0; k < 2; k++) {
+ for (int k = 0; k < 2; k++)
+ {
if (!aMapEdgesAndVertexes.Contains(V[k]))
- myRemovedShapes.Add(V[k]);
+ {
+ myRemoved.Add(V[k]);
+ }
}
}
}
if(BRep_Tool::Degenerated(E)) {
sewd->Remove(j);
isDegRemoved = Standard_True;
- myRemovedShapes.Add(E);
+ myRemoved.Add(E);
j--;
}
}
myContext->Replace(aCurrent,CompRes);
}
- // remove the remaining faces
- for(i = 1; i <= faces.Length(); i++)
- {
- myOldToGeneratedShapes.Bind(faces(i), theResult);
- if (i > 1)
- myContext->Remove(faces(i));
- }
+ const TopoDS_Shape aResult3 = myContext->Apply(theResult);
+ myContext->Merge(faces, aResult3);
}
} // end processing each face
SeqEdges.Append(expE.Current());
SharedVert.Clear();
CheckSharedVertices(SeqEdges, aMapEdgesVertex, myKeepShapes, SharedVert);
- MergeSeq(SeqEdges, myAngTol, myConcatBSplines, mySafeInputMode,
- myContext, myOldToGeneratedShapes, SharedVert,
- myRemovedShapes, NewEdges2OldEdges);
+ MergeSeq(SeqEdges, myAngTol, myConcatBSplines, mySafeInputMode, myContext,
+ SharedVert, myRemoved);
}
// processing each face
SharedVert.Clear();
CheckSharedVertices(SeqEdges, aMapEdgesVertex, myKeepShapes, SharedVert);
if (MergeSeq(SeqEdges, myAngTol, myConcatBSplines, mySafeInputMode,
- myContext, myOldToGeneratedShapes, SharedVert,
- myRemovedShapes, NewEdges2OldEdges))
+ myContext, SharedVert, myRemoved))
{
TopoDS_Face tmpF = TopoDS::Face(exp.Current());
if ( !ChangedFaces.Contains(tmpF) )
SharedVert.Clear();
CheckSharedVertices(aNonSharedEdges, aMapEdgesVertex, myKeepShapes, SharedVert);
if (MergeSeq(aNonSharedEdges, myAngTol, myConcatBSplines, mySafeInputMode,
- myContext, myOldToGeneratedShapes, SharedVert,
- myRemovedShapes, NewEdges2OldEdges))
+ myContext, SharedVert, myRemoved))
{
TopoDS_Face tmpF = TopoDS::Face(exp.Current());
if ( !ChangedFaces.Contains(tmpF) )
else if (myUnifyFaces)
UnifyFaces();
- //Done();
-}
-
-//=======================================================================
-//function : Shape
-//purpose : give the resulting shape
-//=======================================================================
-const TopoDS_Shape& ShapeUpgrade_UnifySameDomain::Shape() const
-{
- return myShape;
-}
-
-//=======================================================================
-//function : Generated
-//purpose : returns the new shape from the old one
-//=======================================================================
-const TopTools_ListOfShape& ShapeUpgrade_UnifySameDomain::Generated(const TopoDS_Shape& aShape)
-{
- 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);
+ if (!myHistory.IsNull())
+ {
+ myHistory->Merge(myContext->History());
+ for (TopTools_MapOfShape::Iterator aIt(myRemoved);
+ aIt.More(); aIt.Next())
+ {
+ myHistory->Remove(aIt.Value());
+ }
}
- 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);
+ //Done();
}
#ifndef _ShapeUpgrade_UnifySameDomain_HeaderFile
#define _ShapeUpgrade_UnifySameDomain_HeaderFile
+#include <BRepTools_History.hxx>
#include <Standard.hxx>
#include <Standard_Type.hxx>
//! on the BSpline or Bezier curves with C1 continuity on their common vertices will be merged into one common edge
//! The output result of tool is an unified shape
//! All the modifications of initial shape are recorded during unifying.
-//! Method Generated() can be used to obtain the new (unified) shape from the old one
+//! Methods History are intended to: <br>
+//! - set a place holder for the history of the changing of the sub-shapes of
+//! the initial shape; <br>
+//! - get the collected history. <br>
+//! The algorithm provides a place holder for the history and collects the
+//! history by default.
+//! To avoid collecting of the history the place holder should be set to the null handle.
class ShapeUpgrade_UnifySameDomain : public MMgt_TShared
{
public:
-
-
//! empty constructor
Standard_EXPORT ShapeUpgrade_UnifySameDomain();
Standard_EXPORT void Build();
//! Gives the resulting shape
- Standard_EXPORT const TopoDS_Shape& Shape() const;
-
- //! Returns list of new common shapes from the old one shape.
- //! After successful common operation based on <aShape> 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 <aShape> 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 <aShape> has been deleted. The
- //! result shape of the operation does not contain even trace of <aShape>.
- Standard_EXPORT Standard_Boolean IsDeleted(const TopoDS_Shape& aShape);
+ const TopoDS_Shape& Shape() const
+ {
+ return myShape;
+ }
//! this method makes if possible a common face from each
//! group of faces lying on coincident surfaces
//! this method unifies same domain faces and edges
Standard_EXPORT void UnifyFacesAndEdges();
+ //! Returns the history of the processed shapes.
+ const Handle(BRepTools_History)& History() const
+ {
+ return myHistory;
+ }
-
+ //! Returns the history of the processed shapes.
+ Handle(BRepTools_History)& History()
+ {
+ return myHistory;
+ }
DEFINE_STANDARD_RTTIEXT(ShapeUpgrade_UnifySameDomain,MMgt_TShared)
Standard_Boolean mySafeInputMode;
TopoDS_Shape myShape;
Handle(ShapeBuild_ReShape) myContext;
- TopTools_DataMapOfShapeShape myOldToGeneratedShapes;
- TopTools_ListOfShape myHistShapes;
- TopTools_MapOfShape myRemovedShapes;
TopTools_MapOfShape myKeepShapes;
-
+ Handle(BRepTools_History) myHistory; //!< The history.
+ TopTools_MapOfShape myRemoved;
};
vinit
vsetdispmode 1
-unifysamedomgen x1 b1_1
+unifysamedommod x1 b1_1
vclear
vdisplay x1
vfit
vdump ${imagedir}/${casename}_1.png
-unifysamedomgen x2 b1_2
+unifysamedommod x2 b1_2
vclear
vdisplay x2
vfit
vdump ${imagedir}/${casename}_2.png
-unifysamedomgen x3 b1_3
+unifysamedommod x3 b1_3
vclear
vdisplay x3
vfit
unifysamedom result a a_3 a_1_3 a_1_4
-set bug_info [unifysamedomgen res a_9]
+set bug_info [unifysamedommod 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 != ""} {
+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_3]
+set bug_info [unifysamedommod res a_10]
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"} {
+set bug_info [unifysamedommod res a_11]
+if {$bug_info != ""} {
puts "ERROR: OCC28226 is reproduced. Command unifysamedommod does not work correctly."
}
-set bug_info [unifysamedommod res a_11]
+set bug_info [unifysamedommod res 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 modified"} {
+if {$bug_info != ""} {
puts "ERROR: OCC28226 is reproduced. Command unifysamedommod 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 not been deleted"} {
+if {$bug_info != "The shape has been deleted"} {
puts "ERROR: OCC28226 is reproduced. Command unifysamedomisdel does not work correctly."
}