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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
/////////////////////////////////////////////////////////////////////////////// 
// 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 OD_DBSORTENTSTABLE_H
#define OD_DBSORTENTSTABLE_H
 
#include "TD_PackPush.h"
 
#include "DbObject.h"
 
#define STL_USING_UTILITY
#include "OdaSTL.h"
 
/** \details
    This template class is a specialization of the std::pair class for OdDbHandle-OdDbSoftPointerId pairs.
*/
typedef std::pair<OdDbHandle, OdDbSoftPointerId> HandlePair;
 
/** \details
    This template class is a specialization of the OdArray class for OdDbHandle-OdDbSoftPointerId pairs.
*/
typedef OdArray<HandlePair> HandlePairsArray;
 
 
/** \details
    This class implements the SortentsTable, which specifies the DrawOrder 
    of entities in an OdDbDatabase instance.
 
    \remarks
    Each instance of this class contains the DrawOrder for a single OdDbBlockRecord. 
    
    When drawing entities in a Block Table Record, an iterator traverses the Block Table Record 
    in the order of ascending handles. If there is a HandlePair in the SortentsTable corresponding
    to the handle of the object about to be drawn, the entity specified by the entity ID in the HandlePair is
    drawn in its stead. If there is no such HandlePair, the entity referenced by the iterator is drawn.
    
    <group OdDb_Classes>
*/
class TOOLKIT_EXPORT OdDbSortentsTable : public OdDbObject
{
public:
  ODDB_DECLARE_MEMBERS(OdDbSortentsTable);
 
  OdDbSortentsTable();
 
  /** \details
    Function returns the handle that indicates the draw order.
  */
  void getSortHandle(const OdDbObjectId& id, OdDbHandle& h) const;
 
  /** \details
    Moves the entities with specified entity IDs to the bottom of this SortentsTable.
 
    \param entityIds [in]  Entity IDs.
  */
  void moveToBottom(
    OdDbObjectIdArray& entityIds);
 
  /** \details
    Moves the entities with specified entity IDs to the top of this SortentsTable.
 
    \param entityIds [in]  Entity IDs.
  */
  void moveToTop(
    OdDbObjectIdArray& entityIds); 
 
  /** \details
    Moves the entities with specified entity IDs below the target entity in this SortentsTable.
 
    \param entityIds [in]  Entity IDs.
    \param targetId [in]  Target entity ID.
  */
  void moveBelow(
    OdDbObjectIdArray& entityIds, 
    OdDbObjectId targetId);
 
  /** \details
    Moves the entities with specified entity IDs above  the target entity in this SortentsTable.
 
    \param entityIds [in]  Entity IDs.
    \param targetId [in]  Target entity ID.
  */
  void moveAbove(
    OdDbObjectIdArray& entityIds, 
    OdDbObjectId targetId);
 
  /** \details
    Swaps the DrawOrder of the specified entities in this SortentsTable.
    
    \param firstId [in]  First entity ID.
    \param secondId [in]  Second entity ID.
  */
  void swapOrder(
    OdDbObjectId firstId, 
    OdDbObjectId secondId);
 
  /** \details
    Returns the Object ID of the Block Table Record to which this SortentsTable belongs.
  */
  OdDbObjectId  blockId() const; 
        
  ///  2005 functions
  ///
 
  /** \details
    Returns true if and only if the first entity is drawn before the second with this SortentsTable.
 
    \param firstID [in]  First entity ID.
    \param secondID [in]  Second entity ID.
    
    \remarks
    Returns eOk if successful, or an appropriate error code if not.
  */
  bool firstEntityIsDrawnBeforeSecond(
    OdDbObjectId firstID, 
    OdDbObjectId secondID) const;
 
  /** \details
    Returns an array of the entity IDs of the entities in the associated Block Table Record,
    in the DrawOrder for this SortentsTable.
 
    \param entityIds [out]  Entity IDs.
    \param honorSortentsMask [in]  SORTENTS mask. 
 
    \remarks
    If (honorSortentsMask ^ SORTENTS) != honorSortentsMask, the entities are returned unsorted.
    
    Returns eOk if successful, or an appropriate error code if not.
    
    \note
    As implemented, honorSortentsMask is ignored.
    It will be fully implemented in a future release.
  */
  void getFullDrawOrder(
    OdDbObjectIdArray& entityIds, 
    OdUInt8 honorSortentsMask = 0) const;
 
  /** \details
    Rearranges the specified entity IDs into their current relative DrawOrder for this SortentsTable.
    
    \param entityIds [in/out] Entity IDs.
    \param honorSortentsMask [in] SORTENTS mask. 
 
    \remarks
    If (honorSortentsMask ^ SORTENTS) != honorSortentsMask, the entities are returned unsorted.
 
    Returns eOk if successful, or an appropriate error code if not.
 
    \note
    As implemented, honorSortentsMask is ignored.
    It will be fully implemented in a future release.
  */
  void getRelativeDrawOrder(
    OdDbObjectIdArray& entityIds, 
    OdUInt8 honorSortentsMask = 0) const;
 
 
  /** \details
    Sets the relative DrawOrder for the specified entities in this SortentsTable.
 
    \param entityIds [in]  Entity IDs in DrawOrder.
 
    \remarks
    The DrawOrder of other entities are unaffected.
    
    Returns eOk if successful, or an appropriate error code if not.
  */
  void setRelativeDrawOrder(
    const OdDbObjectIdArray& entityIds);
 
  /** \details
    Sets this SortentsTable from an array of HandlePair pairs.
    
    \param handlePairs [in]  HandlePairs.
    
    \note
    Use of this function is not recommended.
  */
  void setAbsoluteDrawOrder(
    const HandlePairsArray& handlePairs);
 
  /** \details
    Returns this SortentsTable as an array of HandlePair pairs.
    
    \param handlePairs [out]  Receives an array of HandlePairs.
    
    \note
    Use of this function is not recommended.
  */
  void getAbsoluteDrawOrder(
    HandlePairsArray& handlePairs);
 
  virtual OdResult dwgInFields(
    OdDbDwgFiler* pFiler);
 
  virtual void dwgOutFields(
    OdDbDwgFiler* pFiler) const;
 
  virtual OdResult dxfInFields(
    OdDbDxfFiler* pFiler);
 
  virtual void dxfOutFields(
    OdDbDxfFiler* pFiler) const;
 
  virtual OdResult subGetClassID(
    void* pClsid) const;
};
 
 
/** \details
    This template class is a specialization of the OdSmartPtr class for OdDbSortentsTable object pointers.
*/
typedef OdSmartPtr<OdDbSortentsTable> OdDbSortentsTablePtr;
 
#include "TD_PackPop.h"
 
#endif //OD_DBSORTENTSTABLE_H