diff --git a/src/XCAFDoc/XCAFDoc_View.cxx b/src/XCAFDoc/XCAFDoc_View.cxx index b9eea2f9c6..fefff54517 100644 --- a/src/XCAFDoc/XCAFDoc_View.cxx +++ b/src/XCAFDoc/XCAFDoc_View.cxx @@ -48,7 +48,8 @@ enum ChildLab ChildLab_ClippingExpression, ChildLab_GDTPoints, ChildLab_Image, - ChildLab_EnabledShapes + ChildLab_EnabledShapes, + ChildLab_NotePoints }; //======================================================================= @@ -170,6 +171,14 @@ void XCAFDoc_View::SetObject (const Handle(XCAFView_Object)& theObject) TDataStd_Integer::Set(aShapeTranspLabel.FindChild(i), aValue); } } + //note points + if (theObject->HasNotePoints()) + { + TDF_Label aPointsLabel = Label().FindChild(ChildLab_NotePoints); + for (Standard_Integer i = 1; i <= theObject->NbNotePoints(); i++) { + TDataXtd_Point::Set(aPointsLabel.FindChild(i), theObject->NotePoint(i)); + } + } } //======================================================================= @@ -298,6 +307,19 @@ Handle(XCAFView_Object) XCAFDoc_View::GetObject() const anObj->SetEnabledShape(i, aValue); } } + + // Note Points + if (!Label().FindChild(ChildLab_NotePoints, Standard_False).IsNull()) { + TDF_Label aPointsLabel = Label().FindChild(ChildLab_NotePoints); + anObj->CreateNotePoints(aPointsLabel.NbChildren()); + for (Standard_Integer i = 1; i <= aPointsLabel.NbChildren(); i++) { + gp_Pnt aPoint; + Handle(TDataXtd_Point) aPointAttr; + aPointsLabel.FindChild(i).FindAttribute(TDataXtd_Point::GetID(), aPointAttr); + TDataXtd_Geometry::Point(aPointAttr->Label(), aPoint); + anObj->SetNotePoint(i, aPoint); + } + } return anObj; } diff --git a/src/XCAFView/XCAFView_Object.cxx b/src/XCAFView/XCAFView_Object.cxx index 9421d1ace2..bf86ecbb03 100644 --- a/src/XCAFView/XCAFView_Object.cxx +++ b/src/XCAFView/XCAFView_Object.cxx @@ -30,6 +30,7 @@ XCAFView_Object::XCAFView_Object() myGDTPoints = NULL; myImage = NULL; myEnabledShapes = NULL; + myNotePoints = NULL; } //======================================================================= @@ -54,5 +55,6 @@ XCAFView_Object::XCAFView_Object(const Handle(XCAFView_Object)& theObj) myGDTPoints = NULL; myImage = theObj->myImage; myEnabledShapes = NULL; + myGDTPoints = NULL; } diff --git a/src/XCAFView/XCAFView_Object.hxx b/src/XCAFView/XCAFView_Object.hxx index c02713dafb..9924c128f3 100644 --- a/src/XCAFView/XCAFView_Object.hxx +++ b/src/XCAFView/XCAFView_Object.hxx @@ -270,6 +270,41 @@ public: else return Standard_False; } + Standard_EXPORT void CreateNotePoints(const Standard_Integer theLenght) + { + if (theLenght > 0) + myNotePoints = new TColgp_HArray1OfPnt(1, theLenght); + } + + Standard_EXPORT Standard_Boolean HasNotePoints() + { + return (!myNotePoints.IsNull()); + } + + Standard_EXPORT Standard_Integer NbNotePoints() + { + if (myNotePoints.IsNull()) + return 0; + return myNotePoints->Length(); + } + + Standard_EXPORT void SetNotePoint(const Standard_Integer theIndex, const gp_Pnt thePoint) + { + if (myNotePoints.IsNull()) + return; + if (theIndex > 0 && theIndex <= myNotePoints->Length()) + myNotePoints->SetValue(theIndex, thePoint); + } + + Standard_EXPORT gp_Pnt NotePoint(const Standard_Integer theIndex) + { + if (myNotePoints.IsNull()) + return gp_Pnt(); + if (theIndex > 0 && theIndex <= myNotePoints->Length()) + return myNotePoints->Value(theIndex); + else + return gp_Pnt(); + } DEFINE_STANDARD_RTTIEXT(XCAFView_Object,Standard_Transient) @@ -292,6 +327,7 @@ private: Handle(TColgp_HArray1OfPnt) myGDTPoints; // Point for each GDT to describe position of GDT frame in View. Handle(TColStd_HArray1OfByte) myImage; Handle(TColStd_HArray1OfBoolean) myEnabledShapes; + Handle(TColgp_HArray1OfPnt) myNotePoints; }; #endif // _XCAFView_Object_HeaderFile