]> OCCT Git - occt-copy.git/commitdiff
0031495: Data Exchange: Store Sections visibility status in views.
authordbv <dmitry.bobylev@opencascade.com>
Tue, 11 Feb 2020 14:35:58 +0000 (17:35 +0300)
committerNatalia ERMOLAEVA <nds@nnov.opencascade.com>
Sat, 11 Apr 2020 18:14:34 +0000 (21:14 +0300)
src/XCAFDoc/XCAFDoc.cxx
src/XCAFDoc/XCAFDoc.hxx
src/XCAFDoc/XCAFDoc_ViewTool.cxx
src/XCAFDoc/XCAFDoc_ViewTool.hxx

index e6c123c83efb01f4fae841a94c6935c9c14f82c0..abcc5cbd084047f5b7fa459aa972b9928f460cc7 100644 (file)
@@ -271,6 +271,17 @@ const Standard_GUID& XCAFDoc::ViewRefPlaneGUID()
   return ID;
 }
 
+//=======================================================================
+//function : ViewRefSectionGUID
+//purpose  : 
+//=======================================================================
+
+const Standard_GUID& XCAFDoc::ViewRefSectionGUID()
+{
+  static const Standard_GUID ID("25709d87-4b29-49cd-9982-1a71e34e43fa");
+  return ID;
+}
+
 //=======================================================================
 //function : ViewRefNoteGUID
 //purpose  : 
index f0681980548ccaee866f4e3bd9f564397c84a039..e157d73c776420752d52b5c43e59dbfeb415f77b 100644 (file)
@@ -126,6 +126,9 @@ public:
   //! Return GUIDs for TreeNode representing specified types of View
   Standard_EXPORT static const Standard_GUID& ViewRefPlaneGUID();
 
+  //! Return GUIDs for GraphNode representing Section
+  Standard_EXPORT static const Standard_GUID& ViewRefSectionGUID();
+
   //! Return GUIDs for GraphNode representing specified types of View
   Standard_EXPORT static const Standard_GUID& ViewRefNoteGUID();
 
index 059bd595771ed8590a753a5c29069ebe5ae6664b..1950c918918d43cd0348ef983fd8df9d2db43101 100644 (file)
@@ -464,6 +464,46 @@ void XCAFDoc_ViewTool::SetClippingPlanes(const TDF_LabelSequence& theClippingPla
     aChGNode->SetFather(aPlaneGNode);
   }
 }
+
+//=======================================================================
+//function : SetSections
+//purpose  : 
+//=======================================================================
+void XCAFDoc_ViewTool::SetSections(const TDF_LabelSequence& theSectionsLabels,
+                                         const TDF_Label& theViewL) const
+{
+  if (!IsView(theViewL))
+    return;
+
+  Handle(XCAFDoc_GraphNode) aChGNode;
+  Handle(XCAFDoc_GraphNode) aSectionGNode;
+
+  if (theViewL.FindAttribute(XCAFDoc::ViewRefSectionGUID(), aChGNode)) {
+    while (aChGNode->NbFathers() > 0) {
+      aSectionGNode = aChGNode->GetFather(1);
+      aSectionGNode->UnSetChild(aChGNode);
+      if (aSectionGNode->NbChildren() == 0)
+        aSectionGNode->ForgetAttribute(XCAFDoc::ViewRefSectionGUID());
+    }
+    theViewL.ForgetAttribute(XCAFDoc::ViewRefSectionGUID());
+  }
+
+  if (!theViewL.FindAttribute(XCAFDoc::ViewRefSectionGUID(), aChGNode) && theSectionsLabels.Length() > 0) {
+    aChGNode = new XCAFDoc_GraphNode;
+    aChGNode = XCAFDoc_GraphNode::Set(theViewL);
+    aChGNode->SetGraphID(XCAFDoc::ViewRefSectionGUID());
+  }
+  for (Standard_Integer i = theSectionsLabels.Lower(); i <= theSectionsLabels.Upper(); i++) {
+    if (!theSectionsLabels.Value(i).FindAttribute(XCAFDoc::ViewRefSectionGUID(), aSectionGNode)) {
+      aSectionGNode = new XCAFDoc_GraphNode;
+      aSectionGNode = XCAFDoc_GraphNode::Set(theSectionsLabels.Value(i));
+    }
+    aSectionGNode->SetGraphID(XCAFDoc::ViewRefSectionGUID());
+    aSectionGNode->SetChild(aChGNode);
+    aChGNode->SetFather(aSectionGNode);
+  }
+}
+
 //=======================================================================
 //function : SetEnabledShapes
 //purpose  : 
@@ -657,6 +697,29 @@ Standard_Boolean XCAFDoc_ViewTool::GetRefClippingPlaneLabel(const TDF_Label& the
   return Standard_True;
 }
 
+//=======================================================================
+//function : GetRefSectionsLabels
+//purpose  : 
+//=======================================================================
+Standard_Boolean XCAFDoc_ViewTool::GetRefSectionsLabels(const TDF_Label& theViewL,
+                                                        TDF_LabelSequence& theSectionsLabels) const
+{
+  theSectionsLabels.Clear();
+  Handle(TDataStd_TreeNode) aNode;
+  if (!theViewL.FindAttribute(XCAFDoc::ViewRefGUID(), aNode) || !aNode->HasFather()) {
+    Handle(XCAFDoc_GraphNode) aGNode;
+    if (theViewL.FindAttribute(XCAFDoc::ViewRefSectionGUID(), aGNode) && aGNode->NbFathers() > 0) {
+      for (Standard_Integer i = 1; i <= aGNode->NbFathers(); i++)
+        theSectionsLabels.Append(aGNode->GetFather(i)->Label());
+      return Standard_True;
+    } else
+      return Standard_False;
+  }
+
+  theSectionsLabels.Append(aNode->Father()->Label());
+  return Standard_True;
+}
+
 //=======================================================================
 //function : GetRefEnabledShapesLabel
 //purpose  : 
index d24d4f9eb70de6c5624fadecca32172082504435..4175f9d2919a468a35bd8c04f291005f7ef8f436 100644 (file)
@@ -86,6 +86,11 @@ public:
   //! Set Clipping planes to  given View
   Standard_EXPORT void SetClippingPlanes(const TDF_LabelSequence& theClippingPlaneLabels,
                                          const TDF_Label& theViewL) const;
+
+  //! Set Sections to  given View
+  Standard_EXPORT void SetSections(const TDF_LabelSequence& theSectionsLabels,
+                                   const TDF_Label& theViewL) const;
+
   Standard_EXPORT void  SetEnabledShapes(const TDF_LabelSequence& theShapesTransparencyLabels,
                                          const TDF_Label& theViewL) const;
 
@@ -129,6 +134,10 @@ public:
   //! Returns False if the theViewL is not in View table
   Standard_EXPORT Standard_Boolean GetRefClippingPlaneLabel(const TDF_Label& theViewL, TDF_LabelSequence& theClippingPlaneLabels) const;
 
+  //! Returns Sections labels defined for label theViewL
+  //! Returns False if the theViewL is not in View table
+  Standard_EXPORT Standard_Boolean GetRefSectionsLabels(const TDF_Label& theViewL, TDF_LabelSequence& theSectionsLabels) const;
+
   //! Returns shapes transparency labels defined for label theViewL
   //! Returns False if the theViewL is not in View table
   Standard_EXPORT Standard_Boolean GetRefEnabledShapesLabel(const TDF_Label& theViewL, TDF_LabelSequence& theShapesTranspanencyLabels) const;