zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/////////////////////////////////////////////////////////////////////////////// 
// 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 _ODDBOBJECTITERATOR_INCLUDED_
#define _ODDBOBJECTITERATOR_INCLUDED_
 
#include "RxObject.h"
#include "DbObjectId.h"
 
class OdDbEntity;
/** \details
  This template class is a specialization of the OdSmartPtr class for OdDbEntity object pointers.
*/
typedef OdSmartPtr<OdDbEntity> OdDbEntityPtr;
 
/** \details
    This class defines bidirectional Iterator objects that traverse entities contained in complex entities.
    
    
    OdDbBlock Table Records in an OdDbDatabase instance.
 
    \sa
    TD_Db
    
    \remarks
    Complex entities include the following:
    
    <table>
    Entity               Iterated entities
    OdDbBlockReference   All
    OdDb2dPolyline       Vertex
    OdDb3dPolyline       Vertex
    OdDbPolyFaceMesh     Vertex
    OdDbPolygonMesh      Vertex
    </table>
 
    This class cannot directly instantiated, but must be instantiated with the
    iterator creation methods of the class to be iterated through.
 
    <group OdDb_Classes>
*/
class TOOLKIT_EXPORT OdDbObjectIterator : public OdRxObject
{
public:
  ODRX_DECLARE_MEMBERS(OdDbObjectIterator);
 
  OdDbObjectIterator() {}
 
  /** \details
    Sets this Iterator object to reference the entity that it would normally return first.
     
    \remarks
    Allows multiple traversals of the iterator list.
 
    \param atBeginning [in]  True to start at the beginning, false to start at the end. 
    \param skipErased [in]  If and only if true, erased records are skipped.
  */
    virtual void start(
    bool atBeginning = true, 
    bool skipErased = true) = 0;
 
  /** \details
    Returns true if and only if the traversal by this Iterator object is complete.
  */
    virtual bool done() const = 0;
 
  /** \details
    Returns the Object ID of the entity currently referenced by this Iterator object.
  */
  virtual OdDbObjectId objectId() const = 0;
 
  /** \details
    Opens and returns the entity currently referenced by this Iterator object.
 
    \param openMode [in]  Mode in which to open the entity.
    \param openErasedEntity [in]  If and only if true, erased records will be opened or retrieved.
 
    \remarks
    Returns a SmartPointer to the opened entity if successful, otherwise a null SmartPointer.
  */
  virtual OdDbEntityPtr entity(
    OdDb::OpenMode openMode = OdDb::kForRead, 
    bool openErasedEntity = false) = 0;
 
  /** \details
    Steps this Iterator object.
 
    \param forward [in]  True to step forward, false to step backward.
    \param skipErased [in]  If and only if true, erased records are skipped.
  */
  virtual void step(
    bool forward = true, 
    bool skipErased = true) = 0;
 
  /** \details
    Positions this Iterator object at the specified record.
    \param objectId [in]  Object ID of the entity.
    \param pEntity [in] Pointer to the entity.
  */
    virtual bool seek(
    OdDbObjectId objectId) = 0;
  virtual bool seek(
    const OdDbEntity* pEntity) = 0;
};
 
/** \details
  This template class is a specialization of the OdSmartPtr class for OdDbObjectIterator object pointers.
*/
typedef OdSmartPtr<OdDbObjectIterator> OdDbObjectIteratorPtr;
 
#endif //_ODDBOBJECTITERATOR_INCLUDED_