#include <TDataStd_Real.hxx>
#include <TNaming_NamedShape.hxx>
#include <TNaming_Builder.hxx>
-
+#include <TNaming_Tool.hxx>
+#include <TDataStd_Name.hxx>
#include <XCAFDimTolObjects_DatumObject.hxx>
+IMPLEMENT_STANDARD_RTTIEXT(XCAFDoc_Datum,TDF_Attribute)
+
enum ChildLab
{
ChildLab_Name = 1,
+ ChildLab_Position,
ChildLab_Modifiers,
ChildLab_ModifierWithValue,
ChildLab_IsDTarget,
ChildLab_AxisRef,
ChildLab_DTargetLength,
ChildLab_DTargetWidth,
+ ChildLab_DTargetNumber,
ChildLab_DatumTarget,
+ ChildLab_PlaneLoc,
+ ChildLab_PlaneN,
+ ChildLab_PlaneRef,
+ ChildLab_Pnt,
+ ChildLab_PntText,
+ ChildLab_Presentation
};
//=======================================================================
anAttName->Set(theObject->GetName()->String());
}
+ Handle(TDataStd_Integer) aPosition = new TDataStd_Integer();
+ aPosition->Set(theObject->GetPosition());
+ Label().FindChild(ChildLab_Position).AddAttribute(aPosition);
+
if(theObject->GetModifiers().Length() > 0)
{
Handle(TDataStd_IntegerArray) aModifiers;
Handle(TDataStd_RealArray) aN = new TDataStd_RealArray();
Handle(TDataStd_RealArray) aR = new TDataStd_RealArray();
gp_Ax2 anAx = theObject->GetDatumTargetAxis();
- aLoc->SetValue(aLoc->Upper(),anAx.Location().X());
- aLoc->SetValue(aLoc->Upper()+1,anAx.Location().Y());
- aLoc->SetValue(aLoc->Upper()+2,anAx.Location().Z());
- aN->SetValue(aN->Upper(),anAx.Axis().Direction().X());
- aN->SetValue(aN->Upper(),anAx.Axis().Direction().X());
- aN->SetValue(aN->Upper(),anAx.Axis().Direction().X());
+ 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);
- aR->SetValue(aR->Upper(),anAx.Direction().X());
- aR->SetValue(aR->Upper(),anAx.Direction().X());
- aR->SetValue(aR->Upper(),anAx.Direction().X());
+ 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(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);
}
}
}
+ Handle(TDataStd_Integer) aNum = new TDataStd_Integer();
+ aNum->Set(theObject->GetDatumTargetNumber());
+ Label().FindChild(ChildLab_DTargetNumber).AddAttribute(aNum);
+ }
+
+ 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(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(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);
+ }
+
+ 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);
}
+
+ 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);
+ }
+ TopoDS_Shape aPresentation = theObject->GetPresentation();
+ if( !aPresentation.IsNull())
+ {
+ TDF_Label aLPres = Label().FindChild( ChildLab_Presentation);
+ TNaming_Builder tnBuild(aLPres);
+ tnBuild.Generated(aPresentation);
+ Handle(TCollection_HAsciiString) aName = theObject->GetPresentationName();
+ if( !aName.IsNull() )
+ {
+ TCollection_ExtendedString str ( aName->String() );
+ TDataStd_Name::Set ( aLPres, str );
+ }
+ }
+
}
//=======================================================================
}
}
+ Handle(TDataStd_Integer) aPosition;
+ if(Label().FindChild(ChildLab_Position).FindAttribute(TDataStd_Integer::GetID(), aPosition))
+ {
+ anObj->SetPosition(aPosition->Get());
+ }
+
+ Handle(TDataStd_RealArray) aLoc, aN, aR;
+ if(Label().FindChild(ChildLab_PlaneLoc).FindAttribute(TDataStd_RealArray::GetID(), aLoc) && aLoc->Length() == 3 &&
+ Label().FindChild(ChildLab_PlaneN).FindAttribute(TDataStd_RealArray::GetID(), aN) && aN->Length() == 3 &&
+ Label().FindChild(ChildLab_PlaneRef).FindAttribute(TDataStd_RealArray::GetID(), aR) && aR->Length() == 3 )
+ {
+ gp_Pnt aL(aLoc->Value(aLoc->Lower()), aLoc->Value(aLoc->Lower()+1), aLoc->Value(aLoc->Lower()+2));
+ gp_Dir aD(aN->Value(aN->Lower()), aN->Value(aN->Lower()+1), aN->Value(aN->Lower()+2));
+ gp_Dir aDR(aR->Value(aR->Lower()), aR->Value(aR->Lower()+1), aR->Value(aR->Lower()+2));
+ gp_Ax2 anAx(aL, aD, aDR);
+ anObj->SetPlane(anAx);
+ }
+
+ Handle(TDataStd_RealArray) aPnt;
+ if(Label().FindChild(ChildLab_Pnt).FindAttribute(TDataStd_RealArray::GetID(), aPnt) && aPnt->Length() == 3 )
+ {
+ gp_Pnt aP(aLoc->Value(aPnt->Lower()), aPnt->Value(aPnt->Lower()+1), aPnt->Value(aPnt->Lower()+2));
+ anObj->SetPoint(aP);
+ }
+
+ Handle(TDataStd_RealArray) aPntText;
+ if(Label().FindChild(ChildLab_PntText).FindAttribute(TDataStd_RealArray::GetID(), aPntText) && aPntText->Length() == 3 )
+ {
+ gp_Pnt aP (aPntText->Value(aPntText->Lower()), aPntText->Value(aPntText->Lower()+1), aPntText->Value(aPntText->Lower()+2));
+ anObj->SetPointTextAttach(aP);
+ }
+
Handle(TDataStd_Integer) aIsDTarget;
if(Label().FindChild(ChildLab_IsDTarget).FindAttribute(TDataStd_Integer::GetID(), aIsDTarget))
{
}
else
{
- Handle(TDataStd_RealArray) aLoc;
- Handle(TDataStd_RealArray) aN;
- Handle(TDataStd_RealArray) aR;
if(Label().FindChild(ChildLab_AxisLoc).FindAttribute(TDataStd_RealArray::GetID(), aLoc) && aLoc->Length() == 3 &&
Label().FindChild(ChildLab_AxisN).FindAttribute(TDataStd_RealArray::GetID(), aN) && aN->Length() == 3 &&
Label().FindChild(ChildLab_AxisRef).FindAttribute(TDataStd_RealArray::GetID(), aR) && aR->Length() == 3 )
{
- gp_Pnt aL(aLoc->Value(aLoc->Upper()), aLoc->Value(aLoc->Upper()+1), aLoc->Value(aLoc->Upper()+2));
- gp_Dir aD(aN->Value(aN->Upper()), aN->Value(aN->Upper()+1), aN->Value(aN->Upper()+2));
- gp_Dir aDR(aR->Value(aR->Upper()), aR->Value(aR->Upper()+1), aR->Value(aR->Upper()+2));
+ gp_Pnt aL(aLoc->Value(aLoc->Lower()), aLoc->Value(aLoc->Lower()+1), aLoc->Value(aLoc->Lower()+2));
+ gp_Dir aD(aN->Value(aN->Lower()), aN->Value(aN->Lower()+1), aN->Value(aN->Lower()+2));
+ gp_Dir aDR(aR->Value(aR->Lower()), aR->Value(aR->Lower()+1), aR->Value(aR->Lower()+2));
gp_Ax2 anAx(aL, aD, aDR);
anObj->SetDatumTargetAxis(anAx);
}
if(anObj->GetDatumTargetType() != XCAFDimTolObjects_DatumTargetType_Point)
{
Handle(TDataStd_Real) aLen;
- if(Label().FindChild(ChildLab_DTargetLength).FindAttribute(TDataStd_Integer::GetID(), aLen))
+ if(Label().FindChild(ChildLab_DTargetLength).FindAttribute(TDataStd_Real::GetID(), aLen))
{
anObj->SetDatumTargetLength(aLen->Get());
}
if(anObj->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Rectangle)
{
Handle(TDataStd_Real) aWidth;
- if(Label().FindChild(ChildLab_DTargetWidth).FindAttribute(TDataStd_Integer::GetID(), aWidth))
+ if(Label().FindChild(ChildLab_DTargetWidth).FindAttribute(TDataStd_Real::GetID(), aWidth))
{
anObj->SetDatumTargetWidth(aWidth->Get());
}
}
}
}
+ Handle(TDataStd_Integer) aNum;
+ if(Label().FindChild(ChildLab_DTargetNumber).FindAttribute(TDataStd_Integer::GetID(), aNum))
+ {
+ anObj->SetDatumTargetNumber(aNum->Get());
+ }
+ else
+ {
+ anObj->SetDatumTargetNumber(0);
+ }
}
+ Handle(TNaming_NamedShape) aNS;
+ TDF_Label aLPres = Label().FindChild( ChildLab_Presentation);
+ if ( aLPres.FindAttribute(TNaming_NamedShape::GetID(), aNS) )
+ {
+
+ TopoDS_Shape aPresentation = TNaming_Tool::GetShape(aNS);
+ if( !aPresentation.IsNull())
+ {
+ Handle(TDataStd_Name) aNameAtrr;
+ Handle(TCollection_HAsciiString) aPresentName;
+ if (aLPres.FindAttribute(TDataStd_Name::GetID(),aNameAtrr))
+ {
+ const TCollection_ExtendedString& aName = aNameAtrr->Get();
+
+ if( !aName.IsEmpty())
+ aPresentName = new TCollection_HAsciiString(aName);
+ }
+
+ anObj->SetPresentation(aPresentation, aPresentName);
+ }
+ }
return anObj;
}