0027970: Improvement of standard attributes usability - containers.
[occt.git] / src / XCAFDoc / XCAFDoc_Datum.cxx
index 2e4538a..141c805 100644 (file)
@@ -178,24 +178,21 @@ void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theOb
     anIter.Value().ForgetAllAttributes();
   }
   if (!theObject->GetName().IsNull() && !theObject->GetName()->IsEmpty())
-       Handle(TDataStd_AsciiString) anAttName = TDataStd_AsciiString::Set(Label().FindChild(ChildLab_Name),
-                                                    theObject->GetName()->String());
+    Handle(TDataStd_AsciiString) anAttName = TDataStd_AsciiString::Set(Label().FindChild(ChildLab_Name),
+                                             theObject->GetName()->String());
 
   Handle(TDataStd_Integer) aPosition = TDataStd_Integer::Set(Label().FindChild(ChildLab_Position),
-                                          theObject->GetPosition());
+                                       theObject->GetPosition());
 
   if(theObject->GetModifiers().Length() > 0)
-  {
-    Handle(TDataStd_IntegerArray) aModifiers;
-    if(!Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), aModifiers))
-    {
-      aModifiers = new TDataStd_IntegerArray();
-      Label().FindChild(ChildLab_Modifiers).AddAttribute(aModifiers);
-    }
+  {   
     Handle(TColStd_HArray1OfInteger) anArr = new TColStd_HArray1OfInteger(1,theObject->GetModifiers().Length());
     for(Standard_Integer i = 1; i <= theObject->GetModifiers().Length(); i++)
       anArr->SetValue(i,theObject->GetModifiers().Value(i));
-    aModifiers->ChangeArray(anArr);
+    Handle(TDataStd_IntegerArray) aModifiers = TDataStd_IntegerArray::Set(Label().FindChild(ChildLab_Modifiers), 
+                                               1, theObject->GetModifiers().Length());
+    if(!aModifiers.IsNull())
+      aModifiers->ChangeArray(anArr);
   }
 
   XCAFDimTolObjects_DatumModifWithValue aM;
@@ -204,19 +201,19 @@ void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theOb
   if(aM != XCAFDimTolObjects_DatumModifWithValue_None)
   {
     Handle(TDataStd_Integer) aModifierWithValueM = 
-                                               TDataStd_Integer::Set(Label().FindChild(ChildLab_ModifierWithValue), aM);
+      TDataStd_Integer::Set(Label().FindChild(ChildLab_ModifierWithValue), aM);
 
     Handle(TDataStd_Real) aModifierWithValueV = 
-                                                  TDataStd_Real::Set(Label().FindChild(ChildLab_ModifierWithValue), aV);
+      TDataStd_Real::Set(Label().FindChild(ChildLab_ModifierWithValue), aV);
   }
 
   Handle(TDataStd_Integer) aIsTarget = TDataStd_Integer::Set(Label().FindChild(ChildLab_IsDTarget), 
-                                          theObject->IsDatumTarget());
+                                       theObject->IsDatumTarget());
 
   if(theObject->IsDatumTarget())
   {
     Handle(TDataStd_Integer) aType = TDataStd_Integer::Set(Label().FindChild(ChildLab_DTargetType), 
-                                            theObject->GetDatumTargetType());
+                                     theObject->GetDatumTargetType());
 
     if(theObject->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Area)
     {
@@ -228,94 +225,90 @@ void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theOb
     }
     else if (theObject->HasDatumTargetParams())
     {
-      Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
-      Handle(TDataStd_RealArray) aN = new TDataStd_RealArray();
-      Handle(TDataStd_RealArray) aR = new TDataStd_RealArray();
       gp_Ax2 anAx = theObject->GetDatumTargetAxis();
 
       Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
       for (Standard_Integer i = 1; i <= 3; i++)
         aLocArr->SetValue(i, anAx.Location().Coord(i));
-      aLoc->ChangeArray(aLocArr);
+      Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_AxisLoc), 1, 3);
+      if(!aLoc.IsNull())
+        aLoc->ChangeArray(aLocArr);
 
       Handle(TColStd_HArray1OfReal) aNArr = new TColStd_HArray1OfReal(1, 3);
       for (Standard_Integer i = 1; i <= 3; i++)
         aNArr->SetValue(i, anAx.Direction().Coord(i));
-      aN->ChangeArray(aNArr);
+      Handle(TDataStd_RealArray) aN = TDataStd_RealArray::Set(Label().FindChild(ChildLab_AxisN), 1, 3);
+      if(!aN.IsNull())
+        aN->ChangeArray(aNArr);
 
       Handle(TColStd_HArray1OfReal) aRArr = new TColStd_HArray1OfReal(1, 3);
       for (Standard_Integer i = 1; i <= 3; i++)
         aRArr->SetValue(i, anAx.XDirection().Coord(i));
-      aR->ChangeArray(aRArr);
-
-      Label().FindChild(ChildLab_AxisLoc).AddAttribute(aLoc);
-      Label().FindChild(ChildLab_AxisN).AddAttribute(aN);
-      Label().FindChild(ChildLab_AxisRef).AddAttribute(aR);
+      Handle(TDataStd_RealArray) aR = TDataStd_RealArray::Set(Label().FindChild(ChildLab_AxisRef), 1, 3);
+      if(!aR.IsNull())
+        aR->ChangeArray(aRArr);
 
       if(theObject->GetDatumTargetType() != XCAFDimTolObjects_DatumTargetType_Point)
       {
         Handle(TDataStd_Real) aLen = TDataStd_Real::Set(Label().FindChild(ChildLab_DTargetLength),
-                                                theObject->GetDatumTargetLength());
+                                     theObject->GetDatumTargetLength());
         if(theObject->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Rectangle)
           Handle(TDataStd_Real) aWidth = TDataStd_Real::Set(Label().FindChild(ChildLab_DTargetWidth),
-                                                    theObject->GetDatumTargetWidth());
+                                         theObject->GetDatumTargetWidth());
       }
     }
     Handle(TDataStd_Integer) aNum = TDataStd_Integer::Set(Label().FindChild(ChildLab_DTargetNumber), 
-                                           theObject->GetDatumTargetNumber());
+                                    theObject->GetDatumTargetNumber());
   }
 
   if (theObject->HasPlane())
   {
-    Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
-    Handle(TDataStd_RealArray) aN = new TDataStd_RealArray();
-    Handle(TDataStd_RealArray) aR = new TDataStd_RealArray();
     gp_Ax2 anAx = theObject->GetPlane();
 
     Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
       aLocArr->SetValue(i, anAx.Location().Coord(i));
-    aLoc->ChangeArray(aLocArr);
+    Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PlaneLoc), 1, 3);
+    if(!aLoc.IsNull())
+      aLoc->ChangeArray(aLocArr);
 
     Handle(TColStd_HArray1OfReal) aNArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
       aNArr->SetValue(i, anAx.Direction().Coord(i));
-    aN->ChangeArray(aNArr);
+    Handle(TDataStd_RealArray) aN = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PlaneN), 1, 3);
+    if(!aN.IsNull())
+      aN->ChangeArray(aNArr);
 
     Handle(TColStd_HArray1OfReal) aRArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
       aRArr->SetValue(i, anAx.XDirection().Coord(i));
-    aR->ChangeArray(aRArr);
-
-    Label().FindChild(ChildLab_PlaneLoc).AddAttribute(aLoc);
-    Label().FindChild(ChildLab_PlaneN).AddAttribute(aN);
-    Label().FindChild(ChildLab_PlaneRef).AddAttribute(aR);
+    Handle(TDataStd_RealArray) aR = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PlaneRef), 1, 3);
+    if(!aR.IsNull())
+      aR->ChangeArray(aRArr);
   }
 
   if (theObject->HasPoint())
   {
-    Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
     gp_Pnt aPnt = theObject->GetPoint();
 
     Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
       aLocArr->SetValue(i, aPnt.Coord(i));
-    aLoc->ChangeArray(aLocArr);
-
-    Label().FindChild(ChildLab_Pnt).AddAttribute(aLoc);
+    Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_Pnt), 1, 3);
+    if(!aLoc.IsNull())
+      aLoc->ChangeArray(aLocArr);
   }
 
   if (theObject->HasPointText())
   {
-    Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
     gp_Pnt aPntText = theObject->GetPointTextAttach();
 
     Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
       aLocArr->SetValue(i, aPntText.Coord(i));
-    aLoc->ChangeArray(aLocArr);
-
-    Label().FindChild(ChildLab_PntText).AddAttribute(aLoc);
+    Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PntText), 1, 3);
+    if(!aLoc.IsNull())
+      aLoc->ChangeArray(aLocArr);
   }
   TopoDS_Shape aPresentation = theObject->GetPresentation();
   if( !aPresentation.IsNull())