// Created on: 2000-09-27 // Created by: Pavel TELKOV. // Copyright (c) 2000-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef _XCAFDoc_GraphNode_HeaderFile #define _XCAFDoc_GraphNode_HeaderFile #include "Standard.hxx" #include "NCollection_Sequence.hxx" #include "Standard_GUID.hxx" #include "TDF_Attribute.hxx" #include "Standard_Integer.hxx" #include "Standard_OStream.hxx" class XCAFDoc_GraphNode; class TDF_Label; class TDF_RelocationTable; class TDF_DataSet; //! This attribute allow user multirelation tree of labels. //! This GraphNode is experimental Graph that not control looping and redundance. //! Attribute containing sequence of father's and child's labels. //! Provide create and work with Graph in XCAFDocument. class XCAFDoc_GraphNode : public TDF_Attribute { public: //! class methods working on the node //! ================================= //! Shortcut to search a Graph node attribute with default //! GraphID. Returns true if found. Standard_EXPORT static bool Find(const TDF_Label& L, occ::handle& G); //! Finds or Creates a GraphNode attribute on the label //! with the default Graph ID, returned by the method //! . Returns the created/found GraphNode //! attribute. Standard_EXPORT static occ::handle Set(const TDF_Label& L); //! Finds or Creates a GraphNode attribute on the label //! , with an explicit tree ID. is //! the ID returned by method. //! Returns the found/created GraphNode attribute. Standard_EXPORT static occ::handle Set(const TDF_Label& L, const Standard_GUID& ExplicitGraphID); //! returns a default Graph ID. this ID is used by the //! method without explicit tree ID. //! Instance methods: //! ================ Standard_EXPORT static const Standard_GUID& GetDefaultGraphID(); Standard_EXPORT XCAFDoc_GraphNode(); Standard_EXPORT void SetGraphID(const Standard_GUID& explicitID); //! Set GraphNode as father of me and returns index of //! in Sequence that containing Fathers GraphNodes. //! return index of from GraphNodeSequnece Standard_EXPORT int SetFather(const occ::handle& F); //! Set GraphNode as child of me and returns index of //! in Sequence that containing Children GraphNodes. //! return index of from GraphNodeSequnece Standard_EXPORT int SetChild(const occ::handle& Ch); //! Remove from Fathers GraphNodeSequence. //! and remove link between father and child. Standard_EXPORT void UnSetFather(const occ::handle& F); //! Remove Father GraphNode by index from Fathers GraphNodeSequence. //! and remove link between father and child. Standard_EXPORT void UnSetFather(const int Findex); //! Remove from GraphNodeSequence. //! and remove link between father and child. Standard_EXPORT void UnSetChild(const occ::handle& Ch); //! Remove Child GraphNode by index from Children GraphNodeSequence. //! and remove link between father and child. Standard_EXPORT void UnSetChild(const int Chindex); //! Return GraphNode by index from GraphNodeSequence. Standard_EXPORT occ::handle GetFather(const int Findex) const; //! Return GraphNode by index from GraphNodeSequence. Standard_EXPORT occ::handle GetChild(const int Chindex) const; //! Return index of , or zero if there is no such Graphnode. Standard_EXPORT int FatherIndex(const occ::handle& F) const; //! Return index of , or zero if there is no such Graphnode. Standard_EXPORT int ChildIndex(const occ::handle& Ch) const; //! returns TRUE if is father of . Standard_EXPORT bool IsFather(const occ::handle& Ch) const; //! returns TRUE if is child of . Standard_EXPORT bool IsChild(const occ::handle& F) const; //! return Number of Fathers GraphNodes. Standard_EXPORT int NbFathers() const; //! return Number of Childrens GraphNodes. //! Implementation of Attribute methods: //! =================================== Standard_EXPORT int NbChildren() const; //! Returns the Graph ID (default or explicit one depending //! on the Set method used). Standard_EXPORT const Standard_GUID& ID() const override; Standard_EXPORT void Restore(const occ::handle& with) override; Standard_EXPORT void Paste(const occ::handle& into, const occ::handle& RT) const override; Standard_EXPORT occ::handle NewEmpty() const override; Standard_EXPORT void References(const occ::handle& aDataSet) const override; Standard_EXPORT Standard_OStream& Dump(Standard_OStream& anOS) const override; Standard_EXPORT void BeforeForget() override; //! Dumps the content of me into the stream Standard_EXPORT void DumpJson(Standard_OStream& theOStream, int theDepth = -1) const override; DEFINE_STANDARD_RTTIEXT(XCAFDoc_GraphNode, TDF_Attribute) private: //! remove link between father and child. Standard_EXPORT void UnSetFatherlink(const occ::handle& F); //! remove link between father and child. Standard_EXPORT void UnSetChildlink(const occ::handle& C); NCollection_Sequence> myFathers; NCollection_Sequence> myChildren; Standard_GUID myGraphID; }; #endif // _XCAFDoc_GraphNode_HeaderFile