CFx SDK Documentation 2026 SP0
Loading...
Searching...
No Matches
DbObject.h
Go to the documentation of this file.
1
2// Copyright (C) 2002-2024, Open Design Alliance (the "Alliance").
3// All rights reserved.
4//
5// This software and its documentation and related materials are owned by
6// the Alliance. The software may only be incorporated into application
7// programs owned by members of the Alliance, subject to a signed
8// Membership Agreement and Supplemental Software License Agreement with the
9// Alliance. The structure and organization of this software are the valuable
10// trade secrets of the Alliance and its suppliers. The software is also
11// protected by copyright law and international treaty provisions. Application
12// programs incorporating this software must include the following statement
13// with their copyright notices:
14//
15// This application incorporates Open Design Alliance software pursuant to a license
16// agreement with Open Design Alliance.
17// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.
18// All rights reserved.
19//
20// By use of this software, its documentation or related materials, you
21// acknowledge and accept the above terms.
23
24
25
26
27#ifndef _ODDBXOBJECT_INCLUDED_
28#define _ODDBXOBJECT_INCLUDED_
29
30#include "TD_PackPush.h"
31
32#include "Gi/GiDrawable.h"
33#include "DbObjectId.h"
34#include "OdString.h"
35#include "DbObjectReactor.h"
36#include "IdArrays.h"
37#include "ResBuf.h"
38#include "DebugStuff.h"
39
40class OdDbFiler;
41class OdDbDwgFiler;
42class OdDbDxfFiler;
44class OdGiWorldDraw;
46class OdGsCache;
47class OdDbObjectImpl;
48class OdDbEntity;
49class OdDbDatabase;
50class OdDbIdMapping;
51class OdDbAuditInfo;
52class OdGeMatrix3d;
53class OdDbObjStorage;
54class OdString;
55class OdGePoint3d;
56class OdBinaryData;
57class OdDbIdPair;
58class OdDbField;
59class OdDbDictionary;
60class OdDbXrecord;
61
69
80#define ODDB_DECLARE_MEMBERS(ClassName)\
81protected: \
82 ClassName(OdDbObjectImpl* pImpl); \
83public: \
84ODRX_DECLARE_MEMBERS (ClassName)
85
94#define DBOBJECT_CONSTR(ClassName) OdSmartPtr<ClassName> (new ClassName, kOdRxObjAttach)
95
96
105{
106public:
110 const OdDbObjectId& objectId);
111};
112
113
118namespace OdDb
119{
128 {
129 kDrcNotApplicable = 0, // Not applicable to the object.
130 kDrcIgnore = 1, // If a duplicate record exists, use the existing record
131 // in the *database*, and ignore the clone.
132 kDrcReplace = 2, // If a duplicate record exists, replace it with the cloned record.
133 kDrcXrefMangleName = 3, // Incoming record names are mangled with <Xref>$0$<name>
134 kDrcMangleName = 4, // Incoming record names are mangled with $0$<name>
135 kDrcUnmangleName = 5, // Unmangle the names mangled by kDrcMangleName, then default to kDrcIgnore.
136 // Typically used by RefEdit when checking records into the original *database*.
137 kDrcMax = kDrcUnmangleName // The maximum value of this enum.
138 };
139
146 {
149 };
150
152 {
153 kDwg = 0, // Save as .dwg file
154 kDxf = 1, // Save as .dxf file
155 kDxb = 2, // Save as binary .dxf file
156 kUnknown = -1 // Database was created from scratch
157 };
158}
159
160
213{
214public:
216
217protected:
219public:
221
225 virtual void addRef() override;
226
232 virtual void release() ODRX_NOEXCEPT override;
233
237 virtual long numRefs() const override;
238
246
251
256 { return getDbHandle (); }
257
272
288 virtual void setOwnerId(
290
295
306
315
323
324 // Opens/creates/unerases Xdictionary, and retrieves/creates Xrecord for the given name
325 //
326
341 const OdString& xrecordName,
343
348
356
357 //FELIX_CHANGE_BEGIN
361 void cancel();
362 //FELIX_CHANGE_END
363
394 OdDb::OpenMode mode);
395
396
416 virtual void subClose();
417
429 bool eraseIt = true);
430
462 bool erasing);
463
486 OdDbObject* pNewObject,
487 bool keepXData = true, bool
488 keepExtDict = true);
489
517 virtual void subHandOverTo(
518 OdDbObject* pNewObject);
519
535 OdDbObjectId otherId,
536 bool swapXdata = false,
537 bool swapExtDict = false);
538
562 virtual void subSwapIdWith(
563 const OdDbObjectId& otherId,
564 bool swapXdata = false,
565 bool swapExtDict = false);
566
578 virtual void audit(
579 OdDbAuditInfo* pAuditInfo);
580
590 void dwgIn(
591 OdDbDwgFiler* pFiler);
592
602 void dwgOut(
603 OdDbDwgFiler* pFiler) const;
604
617 OdDbDxfFiler* pFiler);
618
628 virtual void dxfOut(
629 OdDbDxfFiler* pFiler) const;
630
651 OdDbDwgFiler* pFiler);
652
669 virtual void dwgOutFields(
670 OdDbDwgFiler* pFiler) const;
671
692 OdDbDxfFiler* pFiler);
693
710 virtual void dxfOutFields(
711 OdDbDxfFiler* pFiler) const;
712
732 OdDbDxfFiler* pFiler);
733
751 virtual void dxfOutFields_R12(
752 OdDbDxfFiler* pFiler) const;
753
758
774 const OdString& regappName = OdString::kEmpty) const;
775
776
793 virtual void setXData(
794 const OdResBuf* pRb);
795
801 bool hasXData(const OdChar* regappName = nullptr) const;
802
807
811 bool isErased() const;
812
816 bool isReadEnabled() const;
817
821 bool isWriteEnabled() const;
822
826 bool isNotifyEnabled() const;
827
832 bool isModified() const;
833
836// void setModified (bool bModified);
837
841 bool isModifiedXData() const;
842
855 bool isModifiedGraphics() const;
856
860 bool isNewObject() const;
861
865 bool isNotifying() const;
866
870 bool isUndoing() const;
871
872// bool isCancelling() const;
873
881 bool isReallyClosing() const;
882
886 bool isDBRO() const;
887
901 void assertReadEnabled() const;
902
923 bool autoUndo = true,
924 bool recordModified = true);
925
940
951 bool disable);
952
953 //FELIX_CHANGE_BEGIN
955 //FELIX_CHANGE_END
956
973
1001 virtual void applyPartialUndo(
1002 OdDbDwgFiler* pUndoFiler,
1003 OdRxClass* pClassObj);
1004
1014 OdDbObjectReactor* pReactor) const;
1015
1025 OdDbObjectReactor* pReactor) const;
1026
1041 const OdDbObjectId& objId);
1042
1052 const OdDbObjectId& objId);
1053
1060 const OdDbObjectId& objId) const;
1061
1066
1071
1088 const OdDbObject* pSubObj);
1089
1113 virtual void xmitPropagateModify() const;
1114
1141
1164
1188 virtual void appendToOwner(
1189 OdDbIdPair& idPair,
1190 OdDbObject* pOwnerObject,
1191 OdDbIdMapping& idMap);
1192
1200
1206
1217 virtual void copied(
1218 const OdDbObject* pObject,
1219 const OdDbObject* pNewObject);
1220
1221
1232 virtual void erased(
1233 const OdDbObject* pObject,
1234 bool erasing = true);
1235
1247 virtual void goodbye(
1248 const OdDbObject* pObject);
1249
1259 virtual void openedForModify(
1260 const OdDbObject* pObject);
1261
1273 virtual void modified(
1274 const OdDbObject* pObject);
1275
1293 virtual void subObjModified(
1294 const OdDbObject* pObject,
1295 const OdDbObject* pSubObj);
1296
1310 virtual void modifyUndone(
1311 const OdDbObject* pObject);
1312
1327 virtual void modifiedXData(
1328 const OdDbObject* pObject);
1329
1343 virtual void unappended(
1344 const OdDbObject* pObject);
1345
1346
1358 virtual void reappended(
1359 const OdDbObject* pObject);
1360
1364 bool isAProxy() const;
1365
1375 virtual void objectClosed(
1376 const OdDbObjectId& objectId);
1377
1378
1404 virtual void modifiedGraphics(
1405 const OdDbObject* pObject);
1406
1422 virtual void copyFrom(
1423 const OdRxObject* pSource);
1424
1430
1442
1455 virtual OdDb::DwgVersion getObjectSaveVersion(
1456 const OdDbFiler* pFiler,
1457 OdDb::MaintReleaseVer* pMaintVer = 0) const;
1458
1482 OdDb::DwgVersion ver,
1483 OdDbObjectId& replaceId,
1484 bool& exchangeXData);
1485
1510 OdDb::SaveType format,
1511 OdDb::DwgVersion ver,
1512 OdDbObjectId& replaceId,
1513 bool& exchangeXData);
1514
1524 void convertForSave(OdDb::DwgVersion ver);
1525
1546 virtual void composeForLoad(OdDb::SaveType format, OdDb::DwgVersion version, OdDbAuditInfo* pAuditInfo);
1547
1552
1568 OdGiDrawableTraits* pTraits) const;
1569
1570 virtual bool subWorldDraw(
1571 OdGiWorldDraw* pWd) const;
1572
1573 virtual void subViewportDraw(
1574 OdGiViewportDraw* pVd) const;
1575
1584 virtual bool isPersistent() const;
1585
1588 virtual OdDbStub* id() const;
1589
1599
1600 // Override of OdGiDrawable
1601
1607 void setGsNode(OdGsCache* pNode);
1608
1609 // Override of OdGiDrawable
1610
1615
1616 /*
1617 void upgradeFromNotify (bool& wasWritable);
1618 void downgradeToNotify (bool wasWritable);
1619 OdResult closeAndPage (bool onlyWhenClean = true);
1620 virtual void swapReferences (const OdDbIdMapping& idMap);
1621 virtual OdGiDrawable* drawable ();
1622 OdDbObjPtrArray* reactors ();
1623 virtual OdRxObjectPtr clone (OdDbIdMapping& ownerIdMap) const;
1624 */
1625
1650 const OdGeMatrix3d& xfm);
1651
1655 bool hasFields() const;
1656
1663 const OdString& fieldName) const;
1664
1672 const OdString& fieldName,
1673 OdDb::OpenMode mode) const;
1674
1685 const OdString& fieldName,
1686 OdDbField* pField);
1687
1697 OdDbObjectId fieldId);
1698
1708 const OdString& fieldName);
1709
1714
1720 OdDb::OpenMode mode) const;
1721
1722
1726
1729 OdRxClass* pClass) const;
1730
1731protected: // overridables
1732 virtual OdResult subGetClassID(void* pClsid) const;
1733 virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& ownerIdMap, OdDbObject* pOwner, bool bPrimary) const;
1734 virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject* pOwner, bool bPrimary) const;
1735
1739 friend class OdDbObjectImpl;
1741};
1742
1751
1752
1773DBIO_EXPORT OdResBufPtr oddbEntGet( const OdDbObject* pObj, const OdString& regapps = OdString::kEmpty );
1774
1775inline OdResBufPtr oddbEntGet( const OdDbObjectId& id, const OdString& regapps = OdString::kEmpty )
1776{
1777 return oddbEntGet(id.safeOpenObject(), regapps);
1778}
1779
1780
1796
1797inline OdResult oddbEntMod( const OdDbObjectId& id, OdResBuf* pRb )
1798{
1799 return oddbEntMod(id.safeOpenObject(OdDb::kForWrite), pRb);
1800}
1801
1804
1807
1808
1809
1810#include "TD_PackPop.h"
1811
1812#endif //_ODDBXOBJECT_INCLUDED_
1813
1814
OdSmartPtr< OdResBuf > OdResBufPtr
Definition DbDatabase.h:105
#define DBIO_EXPORT
Definition DbExport.h:80
#define TOOLKIT_EXPORT
Definition DbExport.h:40
OdSmartPtr< OdDbXrecord > OdDbXrecordPtr
Definition DbObject.h:68
TOOLKIT_EXPORT OdDbObjectId oddbEntLast(OdDbDatabase *db)
OdSmartPtr< OdDbObject > OdDbObjectPtr
Definition DbObject.h:1750
DBIO_EXPORT OdResBufPtr oddbEntGet(const OdDbObject *pObj, const OdString &regapps=OdString::kEmpty)
DBIO_EXPORT OdResult oddbEntMod(OdDbObject *pObj, OdResBuf *pRb)
DBIO_EXPORT OdResult oddbEntMakeX(OdDbDatabase *pDb, OdResBuf *pRb, OdDbObjectPtr &pObj)
TOOLKIT_EXPORT OdDbObjectId oddbEntNext(OdDbObjectId id, OdDbDatabase *db)
DBIO_EXPORT OdResult oddbEntMake(OdDbDatabase *pDb, OdResBuf *pRb, OdDbObjectPtr &pObj)
OdArray< OdDbObjectReactorPtr > OdDbObjectReactorArray
true
OdArray< OdDbObjectId, OdClrMemAllocator< OdDbObjectId > > OdDbObjectIdArray
Definition IdArrays.h:53
#define ODRX_FINAL
unsigned int OdUInt32
#define ODRX_SEALED_VIRTUAL
#define ODRX_NOEXCEPT
wchar_t OdChar
OdResult
Definition OdResult.h:29
virtual void openedForModify(const OdDbObject *pObject)
void swapIdWith(OdDbObjectId otherId, bool swapXdata=false, bool swapExtDict=false)
virtual OdDb::DwgVersion getObjectSaveVersion(const OdDbFiler *pFiler, OdDb::MaintReleaseVer *pMaintVer=0) const
virtual void unappended(const OdDbObject *pObject)
bool isAProxy() const
virtual void subSwapIdWith(const OdDbObjectId &otherId, bool swapXdata=false, bool swapExtDict=false)
bool isReallyClosing() const
void disableUndoRecording(bool disable)
virtual void applyPartialUndo(OdDbDwgFiler *pUndoFiler, OdRxClass *pClassObj)
bool hasXData(const OdChar *regappName=nullptr) const
virtual void modifiedGraphics(const OdDbObject *pObject)
virtual void release() ODRX_NOEXCEPT override
OdDbObjectIdArray getPersistentReactors() const
ODRX_SEALED_VIRTUAL OdResult getClassID(void *pClsid) const ODRX_FINAL
OdDbObjectId objectId() const
bool isDBRO() const
OdDbHandle handle() const
Definition DbObject.h:255
virtual void xmitPropagateModify() const
virtual OdResult dxfInFields(OdDbDxfFiler *pFiler)
virtual void modifyUndone(const OdDbObject *pObject)
bool isNotifyEnabled() const
void dwgIn(OdDbDwgFiler *pFiler)
bool isModifiedXData() const
virtual OdUInt32 subSetAttributes(OdGiDrawableTraits *pTraits) const
friend class OdDbObjectOverrule
Definition DbObject.h:1737
OdDbHandle getDbHandle() const
virtual OdGiDrawable * drawable()
virtual OdResult subOpen(OdDb::OpenMode mode)
bool hasSaveVersionOverride() const
void xDataTransformBy(const OdGeMatrix3d &xfm)
bool isUndoing() const
virtual OdResult removeField(OdDbObjectId fieldId)
virtual void modifiedXData(const OdDbObject *pObject)
bool isUndoRecordingDisabled() const
friend class OdDbSystemInternals
Definition DbObject.h:1736
bool isEraseStatusToggled() const
virtual void goodbye(const OdDbObject *pObject)
virtual void addPersistentReactor(const OdDbObjectId &objId)
void setGsNode(OdGsCache *pNode)
OdDbObjectId extensionDictionary() const
virtual OdDbObjectPtr subDeepClone(OdDbIdMapping &ownerIdMap, OdDbObject *pOwner, bool bPrimary) const
void assertWriteEnabled(bool autoUndo=true, bool recordModified=true)
void handOverTo(OdDbObject *pNewObject, bool keepXData=true, bool keepExtDict=true)
bool isNewObject() const
bool isReadEnabled() const
virtual OdResult dwgInFields(OdDbDwgFiler *pFiler)
virtual void erased(const OdDbObject *pObject, bool erasing=true)
virtual OdDb::DuplicateRecordCloning mergeStyle() const
virtual void reappended(const OdDbObject *pObject)
OdDbObjectId getFieldDictionary() const
OdDbDatabase * database() const
OdGsCache * gsNode() const
void convertForSave(OdDb::DwgVersion ver)
virtual void objectClosed(const OdDbObjectId &objectId)
void addReactor(OdDbObjectReactor *pReactor) const
void cancel()
virtual bool isPersistent() const
virtual OdResBufPtr xData(const OdString &regappName=OdString::kEmpty) const
OdDbDwgFiler * undoFiler()
friend class OdDbObjectImpl
Definition DbObject.h:1739
void upgradeOpen()
OdResult erase(bool eraseIt=true)
void setOdDbObjectIdsInFlux()
ODDB_DECLARE_MEMBERS(OdDbObject)
void removeReactor(OdDbObjectReactor *pReactor) const
void dwgOut(OdDbDwgFiler *pFiler) const
bool isNotifying() const
virtual void removePersistentReactor(const OdDbObjectId &objId)
virtual OdDbObjectPtr decomposeForSave(OdDb::DwgVersion ver, OdDbObjectId &replaceId, bool &exchangeXData)
virtual OdResult dxfInFields_R12(OdDbDxfFiler *pFiler)
virtual bool subWorldDraw(OdGiWorldDraw *pWd) const
bool hasPersistentReactor(const OdDbObjectId &objId) const
OdDbObjectImpl * m_pImpl
Definition DbObject.h:1740
virtual void modified(const OdDbObject *pObject)
virtual void dwgOutFields(OdDbDwgFiler *pFiler) const
bool releaseExtensionDictionary()
OdDbXrecordPtr createXrecord(const OdString &xrecordName, OdDb::DuplicateRecordCloning style=OdDb::kDrcIgnore)
virtual void dxfOutFields(OdDbDxfFiler *pFiler) const
virtual void subHandOverTo(OdDbObject *pNewObject)
bool isOdDbObjectIdsInFlux() const
virtual OdDbObjectPtr subWblockClone(OdDbIdMapping &ownerIdMap, OdDbObject *pOwner, bool bPrimary) const
virtual void recvPropagateModify(const OdDbObject *pSubObj)
virtual void copied(const OdDbObject *pObject, const OdDbObject *pNewObject)
virtual OdResult dxfIn(OdDbDxfFiler *pFiler)
virtual void subViewportDraw(OdGiViewportDraw *pVd) const
virtual void setXData(const OdResBuf *pRb)
bool hasFields() const
OdDbObjectReactorArray getTransientReactors() const
virtual OdResult subErase(bool erasing)
virtual void dxfOutFields_R12(OdDbDxfFiler *pFiler) const
virtual void audit(OdDbAuditInfo *pAuditInfo)
virtual OdResult subGetClassID(void *pClsid) const
void downgradeOpen()
void setHasSaveVersionOverride(bool hasSaveVersionOverride)
virtual OdDbObjectId setField(const OdString &fieldName, OdDbField *pField)
virtual void dxfOut(OdDbDxfFiler *pFiler) const
virtual long numRefs() const override
ODRX_SEALED_VIRTUAL OdDbObjectPtr wblockClone(OdDbIdMapping &idMap, OdDbObject *pOwner, bool bPrimary=true) const ODRX_FINAL
ODRX_SEALED_VIRTUAL OdDbObjectPtr deepClone(OdDbIdMapping &idMap, OdDbObject *pOwner, bool bPrimary=true) const ODRX_FINAL
bool isWriteEnabled() const
virtual void appendToOwner(OdDbIdPair &idPair, OdDbObject *pOwnerObject, OdDbIdMapping &idMap)
virtual void subClose()
virtual void composeForLoad(OdDb::SaveType format, OdDb::DwgVersion version, OdDbAuditInfo *pAuditInfo)
virtual void addRef() override
virtual void subObjModified(const OdDbObject *pObject, const OdDbObject *pSubObj)
friend class OdDbPropertiesOverrule
Definition DbObject.h:1738
virtual void copyFrom(const OdRxObject *pSource)
virtual void setOwnerId(OdDbObjectId ownerId)
bool isModifiedGraphics() const
void assertReadEnabled() const
bool isErased() const
bool isModified() const
OdDbObjectId getField(const OdString &fieldName) const
OdDbObjectId ownerId() const
void assertNotifyEnabled() const
virtual OdRxClass * saveAsClass(OdRxClass *pClass) const
void createExtensionDictionary()
OdError_XdataSizeExceeded(const OdDbObjectId &objectId)
OdError(OdResult code)
FIRSTDLL_EXPORT_STATIC static const OdString kEmpty
Definition OdString.h:100
GLint GLint GLint GLsizei GLsizei GLenum format
Definition gles2_ext.h:111
DuplicateRecordCloning
Definition DbObject.h:128
@ kDrcUnmangleName
Definition DbObject.h:135
@ kDrcIgnore
Definition DbObject.h:130
@ kDrcXrefMangleName
Definition DbObject.h:133
@ kDrcReplace
Definition DbObject.h:132
@ kDrcMangleName
Definition DbObject.h:134
@ kDrcNotApplicable
Definition DbObject.h:129
@ kDrcMax
Definition DbObject.h:137
SaveType
Definition DbObject.h:152
@ kDwg
Definition DbObject.h:153
@ kDxb
Definition DbObject.h:155
@ kUnknown
Definition DbObject.h:156
@ kDxf
Definition DbObject.h:154
Visibility
Definition DbObject.h:146
@ kInvisible
Definition DbObject.h:147
@ kVisible
Definition DbObject.h:148
@ kForWrite
Definition DbObjectId.h:57