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
/////////////////////////////////////////////////////////////////////////////// 
// 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   _XREFMAN_H_
#define   _XREFMAN_H_
 
#include "RxObject.h"
#include "SmartPtr.h"
#include "DbLayerTableRecord.h"
#include "DbBlockTableRecord.h"
#include "DbLinetypeTableRecord.h"
#include "DbTextStyleTableRecord.h"
#include "DbSecurity.h"
 
#include "TD_PackPush.h"
 
/** \details
    This class manages External References (Xrefs) in an OdDbDatabase object.
    <group OdDb_Classes>
*/
class TOOLKIT_EXPORT OdDbXRefMan
{
public:
  /** \details
    Loads of specified Xref(s) if not currently loaded.
    \param pHostDb [in]  Pointer to the host database.
    \param xrefBlockname [in]  Xref block name to load.
    
    \remarks
    Returns eOk if successful, or an appropriate error code if not.
  */
  static OdResult load(OdDbDatabase* pHostDb, const OdString& xrefBlockname);
 
  /** \param xrefBTRids [in]  Array of the object IDs of the Block Table Records of the Xrefs to load.
  */
  static OdResult load(OdDbObjectIdArray& xrefBTRids);
 
  /** \param pBTR [in]  Pointer to the Block Table Record of the Xref to load.
  */
  static OdResult load(OdDbBlockTableRecord* pBTR);
 
  /** \details
    Loads of all Xrefs not currently loaded.
    \param pHostDb [in]  Pointer to the host database.
    \param verify [in]  Verify.
    \remarks
    If verify is true, this function attempts to load those Xrefs that
    are not unloaded, not unresolved, and not resolved.
 
    Returns eOk if successful, or an appropriate error code if not.
  */
  static OdResult loadAll(OdDbDatabase* pHostDb, bool verify = false);
 
  /** \details
    Unloads the specified Xref(s).
    \param pBTR [in]  Pointer to the Block Table Record of the Xref to unload.
  */
  static void unload(OdDbBlockTableRecord* pBTR);
 
  /** \param xrefBTRids [in]  Array of the object IDs of the Block Table Records of the Xrefs to nload.
  */
  static void unload(OdDbObjectIdArray& xrefBTRids);
 
  /** \details
    Unloads all loaded Xrefs.
    \param pHostDb [in]  Pointer to the host database.
  */
  static void unloadAll(OdDbDatabase* pHostDb);
 
  /** \details
    Binds the specified Xref.
    \param pBTR [in]  Pointer to the Block Table Record of the Xref to bind.
    \param insertBind [in]  True for Xref Insert, false for Xref Bind.
  */
  static OdResult bind(OdDbBlockTableRecord* pBTR, bool insertBind = false);
 
  /** \details
    Detaches the specfied Xref.
    \param pBTR [in]  Pointer to the Block Table Record of the Xref to detach.
  */
  static OdResult detach(OdDbBlockTableRecord* pBTR);
 
  /** \details
    Controls the reference type fo the specified Xref.
    \param pBTR [in]  Pointer to the Block Table Record of the Xref to detach.
    \param overlaid [in]  True for Xref Overlay, false for Xref Attach.
  */
  static void setOverlaid(OdDbBlockTableRecord* pBTR, bool  overlaid = true);
 
};
 
/** \details
    This class is the Xref Manager Extenstion class.
    
    \remarks
    This class creates and augments Xref blocks in OdDbDatabase instances. 
    
    <group OdDb_Classes>
*/
class TOOLKIT_EXPORT OdDbXRefManExt
{
public:
  /** \details
    Creates an Xref block in the specified database.
 
    \param pDb [in]  Pointer to the database.
    \param pathName [in]  Path and filename for Xref block.
    \param blockName [in]  Name of Xref block.
    \param overlaid [in]  True for Xref Overlay, false for Xref Attach.
    \param password [in]  Password for file.
    \param handle [in]  Handle for Xref block.
    
    \remarks
    Returns a SmartPointer to the newly added Block Table Record.
  */
  static OdDbBlockTableRecordPtr     
    addNewXRefDefBlock(OdDbDatabase* pDb, const OdString& pathName, 
                        const OdString& blockName, bool overlaid, 
                        const OdPassword& password = OdPassword(),
                        OdDbHandle handle = 0);
 
  /** \details
    Adds an Xref dependent layer to the specified Xref block.
    
    \param pXRefBlock [in]  Pointer to the Xref Block Table Record.
    \param layerName [in]  Name of the layer.
 
    \remarks
    Returns a SmartPointer to the newly added Layer Table Record.
  */
  static OdDbLayerTableRecordPtr     
    addNewXRefDependentLayer(const OdDbBlockTableRecord* pXRefBlock, const OdString& layerName);
 
  /** \param xRefBlockId [in]  Object ID of the Xref Block Table Record.
  */
  static OdDbLayerTableRecordPtr addNewXRefDependentLayer(OdDbObjectId xRefBlockId, const OdString& layerName)
  { return addNewXRefDependentLayer(OdDbBlockTableRecordPtr(xRefBlockId.safeOpenObject()), layerName); }
 
  /** \details
    Adds an Xref dependent linetype to the specified Xref block.
    
    \param pXRefBlock [in]  Pointer to the Xref Block Table Record.
    \param linetypeName [in]  Name of the linetype.
 
    \remarks
    Returns a SmartPointer to the newly added Linetype Table Record.
  */
  static OdDbLinetypeTableRecordPtr     
    addNewXRefDependentLinetype(const OdDbBlockTableRecord* pXRefBlock, const OdString& linetypeName);
 
  /** \param xRefBlockId [in]  Object ID of the Xref Block Table Record.
  */
  static OdDbLinetypeTableRecordPtr
    addNewXRefDependentLinetype(OdDbObjectId xRefBlockId, const OdString& linetypeName)
  { return addNewXRefDependentLinetype(OdDbBlockTableRecordPtr(xRefBlockId.safeOpenObject()), linetypeName); }
 
  /** \details
    Adds an Xref dependent text style to the specified Xref block.
    
    \param pXRefBlock [in]  Pointer to the Xref Block Table Record.
    \param textStyleName [in]  Name of the text style.
 
    \remarks
    Returns a SmartPointer to the newly added Text Style Table Record.
  */
  static OdDbTextStyleTableRecordPtr     
    addNewXRefDependentTextStyle(const OdDbBlockTableRecord* pXRefBlock, const OdString& textStyleName);
 
  /** \param xRefBlockId [in]  Object ID of the Xref Block Table Record.
  */
  static OdDbTextStyleTableRecordPtr
    addNewXRefDependentTextStyle(OdDbObjectId xRefBlockId, const OdString& textStyleName)
  { return addNewXRefDependentTextStyle(OdDbBlockTableRecordPtr(xRefBlockId.safeOpenObject()), textStyleName); }
 
  /** \details
    Adds nested XRef Id to parent block.
  */
  static void addNestedXRefId(OdDbBlockTableRecord* pXRefBlock, OdDbObjectId nestedBlockId);
 
  /** \details
    Gets nested XRef Ids.
  */
  static void getNestedXRefIds(OdDbBlockTableRecord* pXRefBlock, OdDbObjectIdArray& ids);
 
  /** \details
    Gets block Id for a table record.
  */
  static OdDbObjectId getSymbolTableRecordXrefBlockId(const OdDbSymbolTableRecord* pRec);
};
 
#include "TD_PackPop.h"
 
#endif //_XREFMAN_H_