]> OCCT Git - occt.git/commitdiff
0029854: XCAF GD&T: Clear contents of reserved labels only IR-2022-07-01
authorona <ona@opencascade.com>
Mon, 27 Jun 2022 14:12:11 +0000 (17:12 +0300)
committersmoskvin <smoskvin@opencascade.com>
Thu, 30 Jun 2022 16:33:37 +0000 (19:33 +0300)
Clear attributes from reserved child labels only

src/XCAFDoc/XCAFDoc_Datum.cxx
src/XCAFDoc/XCAFDoc_Dimension.cxx
src/XCAFDoc/XCAFDoc_GeomTolerance.cxx
tests/bugs/xde/bug29854 [new file with mode: 0644]

index b70cd88ac01bf6bacf822f5192d8ac11aa8d4539..83c9d7fd16f60a0cf351c9e3219bc2888cdb27ee 100644 (file)
@@ -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),
index dd2acbac268ff5a13beb799d2a2ac9334a5ad37b..5347c340f561e5efe9424ba52a4ae81afbd89dc2 100644 (file)
@@ -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());
 
index 3eb81bdddd503c0ae7056d5a38fb65f043f85216..76f8b6e2f7a2e2f216233c498e4191d01e80ea87 100644 (file)
@@ -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 (file)
index 0000000..2e32414
--- /dev/null
@@ -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"
+}