/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Teigha(R) software pursuant to a license // agreement with Open Design Alliance. // Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #ifndef _ODDBXREFGRAPH_H_INCLUDED_ #define _ODDBXREFGRAPH_H_INCLUDED_ #include "TD_PackPush.h" #include "DbGraph.h" #include "DbObjectId.h" #include "OdString.h" /** \details */ namespace OdDb { enum XrefStatus { kXrfNotAnXref = 0, // Not an Xref. kXrfResolved = 1, // Resolved. kXrfUnloaded = 2, // Unloaded. kXrfUnreferenced = 3, // Unreferenced. kXrfFileNotFound = 4, // File Not Found. kXrfUnresolved = 5 // Unresolved. }; } class OdDbXrefGraphNode; /** \details This template class is a specialization of the OdSmartPtr class for OdDbXrefGraphNode object pointers. */ typedef OdSmartPtr OdDbXrefGraphNodePtr; /** \details This class is a derived class for representing an Xref database. \remarks OdDbXrefGraph::getFrom() will populate an XrefGraph object with the Xref tree for a specified database. \sa * OdDbGraph * OdDbGraphStack * OdDbXrefGraph * OdDbXrefGraphNode Library: TD_Db */ class TOOLKIT_EXPORT OdDbXrefGraphNode : public OdDbGraphNode { protected: OdDbXrefGraphNode() : m_status(OdDb::kXrfNotAnXref) {} public: ODRX_DECLARE_MEMBERS(OdDbXrefGraphNode); virtual ~OdDbXrefGraphNode(); /** \details Returns the name associated with this XrefGraphNode object. */ OdString name() const { return m_sName; } /** \details Returns the Object ID of the BlockTableRecord associated with this XrefGraphNode object. */ OdDbObjectId blockId() const { return m_blockId; } /** \details Returns the database relevent to this XrefGraphNode object. */ OdDbDatabase* database() const { return (OdDbDatabase*)data(); } /** \details Sets the name associated with this XrefGraphNode object. \param name [in] Name. */ void setName( const OdString& name) { m_sName = name; } /** \details Sets the Object ID of the BlockTableRecord associated with this XrefGraphNode object. \param blockId [in] Object ID of BlockTableRecord. */ void setBlockId( OdDbObjectId blockId) { m_blockId = blockId; } /** \details Sets the database relevent to this XrefGraphNode object. \param pDb [in] Pointer to the database. */ void setDatabase( OdDbDatabase* pDb) { setData(pDb); } /** \details Returns true if and only if this XrefGraphNode represents an Xref that is not directly referenced by the host drawing. */ bool isNested() const { return !isMarkedAs(kFirstLevel); } /** \details Returns the status for this XrefGraphNode object. \remarks xrefStatus() returns one of the following: Name Value Description OdDb::kXrfNotAnXref 0 Not an Xref. OdDb::kXrfResolved 1 Resolved. OdDb::kXrfUnloaded 2 Unloaded. OdDb::kXrfUnreferenced 3 Unreferenced. OdDb::kXrfFileNotFound 4 File Not Found. OdDb::kXrfUnresolved 5 Unresolved.
*/ OdDb::XrefStatus xrefStatus() const { return m_status; } /** \details Sets the status for this XrefGraphNode object. \remarks xrefStatus must be one of the following: Name Value Description OdDb::kXrfNotAnXref 0 Not an Xref. OdDb::kXrfResolved 1 Resolved. OdDb::kXrfUnloaded 2 Unloaded. OdDb::kXrfUnreferenced 3 Unreferenced. OdDb::kXrfFileNotFound 4 File Not Found. OdDb::kXrfUnresolved 5 Unresolved.
*/ void setXrefStatus( OdDb::XrefStatus xrefStatus) { m_status = xrefStatus; } private: OdString m_sName; OdDbObjectId m_blockId; OdDb::XrefStatus m_status; // OdDbDatabase* uses base class data() member }; /** \details This class is a derived class for representing the Xref tree of a database. \remarks This class uses XrefGraphNode objects to represent an Xref database at each node. \sa * OdDbGraph * OdDbGraphStack * OdDbXrefGraph * OdDbXrefGraphNode Library: TD_Db */ class TOOLKIT_EXPORT OdDbXrefGraph : public OdDbGraph { OdDbXrefGraph(const OdDbXrefGraph&); OdDbXrefGraph& operator =(const OdDbXrefGraph&); public: OdDbXrefGraph() {} virtual ~OdDbXrefGraph(); /** \details Returns the XrefGraphNode object corresponding to the specified parameter. \param name [in] Name. \param blockId [in] Object ID of BlockTableRecord. \param pDb [in] Pointer to the database. \param nodeIndex [in] Node index. \remarks Return a null pointer if the specified node is not found. \note getFrom() will populate an XrefGraph object with the Xref tree of a specified database. */ OdDbXrefGraphNode* xrefNode( const OdString& name) const; OdDbXrefGraphNode* xrefNode( OdDbObjectId blockId) const; OdDbXrefGraphNode* xrefNode( const OdDbDatabase* pDb) const; OdDbXrefGraphNode* xrefNode( int nodeIndex) const { return(OdDbXrefGraphNode*)node(nodeIndex); } /** \details Returns the XrefGraphNode associated with the host drawing of this XrefGraph object. \remarks Returns rootNode(). */ OdDbXrefGraphNode* hostDwg() const { return(OdDbXrefGraphNode*)rootNode(); } /** \details Marks the unresolved Xrefs in this XrefGraph object, and their nested Xrefs, with the kUnresTree flag. \remarks Not implemented, reserved. Returns true if and only if there are any unresolved Xrefs. */ bool markUnresolvedTrees(); // cycle detection // virtual bool findCycles(OdDbGraphNode* pStart = 0); /** \details Populate the specified XrefGraph object with the Xref tree of the specified database. \param pDb [in] Pointer to the database. \param xrefGraph [out] Receives the Xref tree. \param includeGhosts [in] Ignored. \remarks xrefGraph is reset at the start of this function. */ static void getFrom( OdDbDatabase* pDb, OdDbXrefGraph& xrefGraph, bool includeGhosts = false); }; #include "TD_PackPop.h" #endif // _ODDBXREFGRAPH_H_INCLUDED_