From e01ce0cd52b37150679c833d1db2cc5edd620341 Mon Sep 17 00:00:00 2001 From: ona Date: Mon, 27 Jun 2022 17:12:11 +0300 Subject: [PATCH] 0029854: XCAF GD&T: Clear contents of reserved labels only Clear attributes from reserved child labels only --- src/XCAFDoc/XCAFDoc_Datum.cxx | 11 ++-- src/XCAFDoc/XCAFDoc_Dimension.cxx | 11 ++-- src/XCAFDoc/XCAFDoc_GeomTolerance.cxx | 11 ++-- tests/bugs/xde/bug29854 | 74 +++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 15 deletions(-) create mode 100644 tests/bugs/xde/bug29854 diff --git a/src/XCAFDoc/XCAFDoc_Datum.cxx b/src/XCAFDoc/XCAFDoc_Datum.cxx index b70cd88ac0..83c9d7fd16 100644 --- a/src/XCAFDoc/XCAFDoc_Datum.cxx +++ b/src/XCAFDoc/XCAFDoc_Datum.cxx @@ -33,7 +33,8 @@ IMPLEMENT_STANDARD_RTTIEXT(XCAFDoc_Datum,TDF_Attribute) enum ChildLab { - ChildLab_Name = 1, + ChildLab_Begin = 1, + ChildLab_Name = ChildLab_Begin, ChildLab_Position, ChildLab_Modifiers, ChildLab_ModifierWithValue, @@ -51,7 +52,8 @@ enum ChildLab ChildLab_PlaneRef, ChildLab_Pnt, ChildLab_PntText, - ChildLab_Presentation + ChildLab_Presentation, + ChildLab_End }; //======================================================================= @@ -176,10 +178,9 @@ void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theOb TDataStd_Name::Set(Label(), str); } - TDF_ChildIterator anIter(Label()); - for(;anIter.More(); anIter.Next()) + for (int aChild = ChildLab_Begin; aChild < ChildLab_End; aChild++) { - anIter.Value().ForgetAllAttributes(); + Label().FindChild(aChild).ForgetAllAttributes(); } if (!theObject->GetName().IsNull() && !theObject->GetName()->IsEmpty()) Handle(TDataStd_AsciiString) anAttName = TDataStd_AsciiString::Set(Label().FindChild(ChildLab_Name), diff --git a/src/XCAFDoc/XCAFDoc_Dimension.cxx b/src/XCAFDoc/XCAFDoc_Dimension.cxx index dd2acbac26..5347c340f5 100644 --- a/src/XCAFDoc/XCAFDoc_Dimension.cxx +++ b/src/XCAFDoc/XCAFDoc_Dimension.cxx @@ -33,7 +33,8 @@ IMPLEMENT_DERIVED_ATTRIBUTE(XCAFDoc_Dimension,TDataStd_GenericEmpty) enum ChildLab { - ChildLab_Type = 1, + ChildLab_Begin = 1, + ChildLab_Type = ChildLab_Begin, ChildLab_Value, ChildLab_Qualifier, ChildLab_AngularQualifier, @@ -50,7 +51,8 @@ enum ChildLab ChildLab_PntText, ChildLab_Presentation, ChildLab_Descriptions, - ChildLab_DescriptionNames + ChildLab_DescriptionNames, + ChildLab_End }; //======================================================================= @@ -104,10 +106,9 @@ void XCAFDoc_Dimension::SetObject (const Handle(XCAFDimTolObjects_DimensionObjec TDataStd_Name::Set(Label(), str); } - TDF_ChildIterator anIter(Label()); - for(;anIter.More(); anIter.Next()) + for (int aChild = ChildLab_Begin; aChild < ChildLab_End; aChild++) { - anIter.Value().ForgetAllAttributes(); + Label().FindChild(aChild).ForgetAllAttributes(); } Handle(TDataStd_Integer) aType = TDataStd_Integer::Set(Label().FindChild(ChildLab_Type), theObject->GetType()); diff --git a/src/XCAFDoc/XCAFDoc_GeomTolerance.cxx b/src/XCAFDoc/XCAFDoc_GeomTolerance.cxx index 3eb81bdddd..76f8b6e2f7 100644 --- a/src/XCAFDoc/XCAFDoc_GeomTolerance.cxx +++ b/src/XCAFDoc/XCAFDoc_GeomTolerance.cxx @@ -32,7 +32,8 @@ IMPLEMENT_DERIVED_ATTRIBUTE(XCAFDoc_GeomTolerance,TDataStd_GenericEmpty) enum ChildLab { - ChildLab_Type = 1, + ChildLab_Begin = 1, + ChildLab_Type = ChildLab_Begin, ChildLab_TypeOfValue, ChildLab_Value, ChildLab_MatReqModif, @@ -49,7 +50,8 @@ enum ChildLab ChildLab_Pnt, ChildLab_PntText, ChildLab_Presentation, - ChildLab_AffectedPlane + ChildLab_AffectedPlane, + ChildLab_End }; //======================================================================= @@ -105,10 +107,9 @@ void XCAFDoc_GeomTolerance::SetObject (const Handle(XCAFDimTolObjects_GeomTolera TDataStd_Name::Set(Label(), str); } - TDF_ChildIterator anIter(Label()); - for(;anIter.More(); anIter.Next()) + for (int aChild = ChildLab_Begin; aChild < ChildLab_End; aChild++) { - anIter.Value().ForgetAllAttributes(); + Label().FindChild(aChild).ForgetAllAttributes(); } Handle(TDataStd_Integer) aType = TDataStd_Integer::Set(Label().FindChild(ChildLab_Type), theObject->GetType()); diff --git a/tests/bugs/xde/bug29854 b/tests/bugs/xde/bug29854 new file mode 100644 index 0000000000..2e32414f06 --- /dev/null +++ b/tests/bugs/xde/bug29854 @@ -0,0 +1,74 @@ +puts "============" +puts "0029854: XCAF GD&T: Clear contents of reserved labels only" +puts "============" +puts "" + +pload DCAF + +box b 10 10 10 + +# create document with object +NewDocument D +set L [XAddShape D b] + +# create datum with reserved children +set datumL [XAddDatum D $L] +set aTagNumber 20 +for {set i 1} {${i}<${aTagNumber}} {incr i} { + NewChild D $datumL +} + +set val 100 + +# add datum child with attribute +set childL [NewChild D $datumL] +SetInteger D $childL $val + +# call setObject func +XSetDatumPosition D $datumL 2 + +# check that the new child attribute exists and correct +set currVal [GetInteger D $childL] +if { ${val} != ${currVal} } { + puts "Error: TDataStd_Integer attribute value is not expected for datum child" +} + +# create tolerance with reserved children +set TL [XAddGeomTolerance D $L] +set aTagNumber 19 +for {set i 1} {${i}<${aTagNumber}} {incr i} { + NewChild D $TL +} + +# add tolerance child with attribute +set childL [NewChild D $TL] +SetInteger D $childL $val + +# call setObject func +XSetToleranceValue D $L 0.5 + +# check that the new child attribute exists and correct +set currVal [GetInteger D $childL] +if { ${val} != ${currVal} } { + puts "Error: TDataStd_Integer attribute value is not expected for tolerance child" +} + +# create dimension with reserved children +set DL [XAddDimension D $L] +set aTagNumber 19 +for {set i 1} {${i}<${aTagNumber}} {incr i} { + NewChild D $DL +} + +# add dimension child with attribute +set childL [NewChild D $DL] +SetInteger D $childL $val + +# call setObject func +XSetDimensionValue D $L 0.5 + +# check that the new child attribute exists and correct +set currVal [GetInteger D $childL] +if { ${val} != ${currVal} } { + puts "Error: TDataStd_Integer attribute value is not expected for dimension child" +}