CFx SDK Documentation 2026 SP0
Loading...
Searching...
No Matches
FxBIM.h
Go to the documentation of this file.
1//
2// (C) Copyright 2020-2025 by Graebert GmbH.
3//
4// Permission to use, copy, modify, and distribute this software in
5// object code form for any purpose and without fee is hereby granted,
6// provided that the above copyright notice appears in all copies and
7// that both that copyright notice and the limited warranty and
8// restricted rights notice below appear in all supporting
9// documentation.
10//
11// GRAEBERT PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
12// GRAEBERT SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
13// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. GRAEBERT GMBH
14// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
15// UNINTERRUPTED OR ERROR FREE.
16
17#pragma once
18
19#include "FxBIMDefs.h"
20
21#if defined( QT_VERSION )
22#include <QtCore/QString>
23#endif
24
25#include <OdaCommon.h>
26#include <OdaDefs.h>
27#include <DbDatabase.h>
28#include <DbBlockReference.h>
29
31
32#include <memory>
33#include <map>
34#include <vector>
35
36class CFxVariant;
37class CFxString;
38
70
71namespace FxBIM
72{
74}
75
76namespace FxBIM
77{
78 constexpr auto kBIMModuleName = __OD_T( "FxBIM" ); // `OD_T` involves a C-style cast (potentially `reinterpret_cast`),
79 // so it cannot be used in constant expressions.
80
82 {
83 k2019 = 1,
84 k2020 = 2,
85 k2021 = 3,
86 k2022 = 4,
87 k2023 = 5,
88 k2024 = 5,
89 k2025 = 6,
90 kSP0 = 0,
91 kSP1 = 1,
92 kSP2 = 2,
93 kSP3 = 3,
94 };
95
96 //TODO: verify what version it should be
99 constexpr OdInt16 kCurrenVersionRevision = 0; //Versions for all entities
100
102 FXBIM_API std::tuple<OdInt16, OdInt16, OdInt16> bimVersion( OdInt64 fileVersion );
104}
105
106#if defined( QT_VERSION )
107FXBIM_COMMON_CODE_API OdString convert( const QString& qstr );
108FXBIM_COMMON_CODE_API QString convert( const OdString& odstr );
109#endif
110
111class CFxBIMObject;
112typedef std::shared_ptr< CFxBIMObject > CFxBIMObjectPtr;
113
114class FXBIM_API CFxBIMObject : public std::enable_shared_from_this< CFxBIMObject >
115{
116protected:
118 virtual ~CFxBIMObject();
119};
120
121#include <DbObjectId.h>
122
123namespace FxBIM
124{
125 template <typename T>
126 std::shared_ptr<T> cast( CFxBIMObjectPtr pBase )
127 {
128 std::shared_ptr<T> p = std::dynamic_pointer_cast< T, CFxBIMObject >( pBase );
129 return( p );
130 }
131
132 template <typename T>
133 OdSmartPtr<T> cast( OdDbObjectId id, OdDb::OpenMode mode = OdDb::kForRead, bool openErased = false )
134 {
135 OdSmartPtr<T> p = T::cast( id.openObject( mode, openErased ) );
136 return( p );
137 }
138}
139
140class CFxBIMIterator;
141typedef std::shared_ptr< CFxBIMIterator > CFxBIMIteratorPtr;
142class CFxBIMIteratorRA;
143typedef std::shared_ptr< CFxBIMIteratorRA > CFxBIMIteratorRAPtr;
144class CFxBIMDbIterator;
145typedef std::shared_ptr< CFxBIMDbIterator > CFxBIMDbIteratorPtr;
147typedef std::shared_ptr< CFxBIMDbIteratorRA > CFxBIMDbIteratorRAPtr;
148
149#include <functional>
150
152{
153public:
154 virtual ~CFxBIMIterator() {};
155 virtual void SetPredicate( std::function< bool( CFxBIMObjectPtr ) > p ) = 0;
156 virtual void Start() = 0;
157 virtual bool Done() = 0;
158 virtual void Next() = 0;
159
160 virtual CFxBIMObjectPtr Object() = 0;
161};
162
164{
165public:
166 virtual ~CFxBIMIteratorRA() {};
167 virtual size_t Count() = 0;
168 virtual CFxBIMObjectPtr Object( size_t index ) = 0;
169};
170
171#include <DbObjectId.h>
172
174{
175public:
176 virtual ~CFxBIMDbIterator() {};
177 virtual void SetPredicate( std::function< bool( OdDbObjectId ) > p ) = 0;
178 virtual void Start() = 0;
179 virtual bool Done() = 0;
180 virtual void Next() = 0;
181
182 virtual OdDbObjectId Object() = 0;
183};
184
186{
187public:
189 virtual size_t Count() = 0;
190 virtual OdDbObjectId Object( size_t index ) = 0;
191};
192
193enum class BimStandards
194{
195 eUnset = -2,
197 eISO = 0,
198 eANSI = 1,
199};
200
202{
204 eFeet = 1,
205 eInch = 2,
206 eM = 3,
207 eDM = 4,
208 eCM = 5,
209 eMM = 6,
210};
211
213{
214 eAuto = 0, // Will choose the style according the BIMUNITSLENGTH
215 eSuperscript = 1, // Force m^2, ft^2 style
216 ePrefix = 2, // Force sq m, sq ft syle
217};
218
220{
221 eAuto = 0,
224};
225
226enum class BimUnitsArea
227{
232 eSqDM = 4,
233 eSqCM = 5,
235};
236
238{
239 //TODO: Update the list
247};
248
249enum class EBIMView
250{
253};
254
260
271
281
283{
287};
288
289namespace FxBIM
290{
291 FXBIM_COMMON_CODE_API OdString ToString( const BimLevelSymbolType eLevelSymbolType, const bool bForUser = false );
292}
293
294namespace FxBIM
295{
297 {
298 public:
299 explicit Standard( const OdString& name );
300
301 const OdString& Name() const;
302 const BimStandards& Type() const;
303
304 bool operator< ( const Standard& other ) const;
305
306 static OdString ToString( BimStandards standard );
307 static BimStandards FromString( const OdString& standard );
308
309 protected:
312 };
313
316
317 FXBIM_API double BIMHPSCALE( const OdDbDatabase* pDb );
318 FXBIM_API void SetBIMHPSCALE( OdDbDatabase* pDb, const double& value );
319
322
325
328
331
334
337
340
343
346
349
352
355
358
361
364
367
370
373
376
379
382}
383
384namespace FxBIM
385{
388
391
394
397
399 FXBIM_API void SetBIMBREAKLINESIZE( OdDbDatabase* pDb, const double& value );
400
403
406
409
412
415
418
421
424}
425
426namespace FxBIM
427{
428 enum class EFileType
429 {
430 eModelDrawing = 0x0, //Files in 'models' directory
431 eFlatshotDrawing = 0x1 //Files in 'drawings' directory
432 };
433
434 FXBIM_API Error resolvePath( const OdDbDatabase* pDb, OdString& path, EFileType eFileType );
435}
436
437namespace FxBIM
438{
440#if defined( QT_VERSION )
441 FXBIM_API QString GetAbsoluteFilePath( const QString& sPath, OdDbDatabase* pCurrentDb );
442#endif
443}
444
445#if !defined( FX_BIM_CONVERTERS )
446namespace FxBIM
447{
451#if !defined( FX_BIM_CONVERTERS )
454#endif
455
456 /*
457 * Given a database, it tried to find the scale applied to the import. It then return a scale that
458 * can be used for call-outs and labels to have a nice representation
459 */
461}
462
463#endif // !defined( FX_BIM_CONVERTERS )
464
465class CFxDocument;
467
468class CFxBIMStorage;
469
471{
472public:
473 virtual ~CFxBIMReactor() {};
474
475 virtual void StorageCreated( CFxBIMStorage* p ) {};
476 virtual void StorageLoaded( CFxBIMStorage* p ) {};
477};
478
479namespace FxBIM
480{
483
486
488 {
489 virtual void JoinWalls( CFxDocumentPtr pFxDoc ) = 0;
490 };
491
492 using CFxSectionWallJoinImplPtr = std::shared_ptr< CFxSectionWallJoinImpl >;
493
496} // namespace FxBIM
@ kFit
@ kCenter
OdSmartPtr< OdDbBlockReference > OdDbBlockReferencePtr
OdSmartPtr< OdDbDatabase > OdDbDatabasePtr
Definition DbDatabase.h:203
#define eNotImplemented
EBIMView
Definition FxBIM.h:250
@ e3DView
Definition FxBIM.h:251
@ e2DView
Definition FxBIM.h:252
std::shared_ptr< CFxBIMDbIterator > CFxBIMDbIteratorPtr
Definition FxBIM.h:145
BimLevelSymbolType
Definition FxBIM.h:273
OdSmartPtr< CFxDocument > CFxDocumentPtr
Definition FxBIM.h:466
std::shared_ptr< CFxBIMDbIteratorRA > CFxBIMDbIteratorRAPtr
Definition FxBIM.h:147
Error
Definition FxBIM.h:40
@ eCVTViewUnset
Definition FxBIM.h:64
@ eNullBmDatabase
Definition FxBIM.h:51
@ eNullBmObjectId
Definition FxBIM.h:53
@ eGeomIsNotGElement
Definition FxBIM.h:47
@ eNullFamSymbol
Definition FxBIM.h:45
@ eNullBmObject
Definition FxBIM.h:52
@ eWrongRVTFormat
Definition FxBIM.h:58
@ eFail
Definition FxBIM.h:42
@ eDegenerateTopology
Definition FxBIM.h:49
@ eDegenerateGeometry
Definition FxBIM.h:50
@ eUnsupportedTRBGeometryDefinition
Definition FxBIM.h:67
@ eOk
Definition FxBIM.h:41
@ eCVTInvalidConversionType
Definition FxBIM.h:60
@ eGeomIsNotNode
Definition FxBIM.h:46
@ eCancelCommmand
Definition FxBIM.h:68
@ eNullDbObjectId
Definition FxBIM.h:54
@ eWrongIFCFormat
Definition FxBIM.h:57
@ eCVTUnsupportedPlatform
Definition FxBIM.h:65
@ eNotFound
Definition FxBIM.h:55
@ eNotThatKindOfClass
Definition FxBIM.h:56
@ eAbort
Definition FxBIM.h:43
@ eCVTInvalidSource
Definition FxBIM.h:61
@ eCVTInvalidParameter
Definition FxBIM.h:59
@ eWrongTRBGeometryDefinition
Definition FxBIM.h:66
@ eCVTInvalidDestinationFolder
Definition FxBIM.h:62
@ eInvalidParameter
Definition FxBIM.h:44
@ eCVTInvalidDestinationExists
Definition FxBIM.h:63
BimUnitsLength
Definition FxBIM.h:202
BimStandards
Definition FxBIM.h:194
eBIMSplitDrawingMode
Definition FxBIM.h:262
std::shared_ptr< CFxBIMIteratorRA > CFxBIMIteratorRAPtr
Definition FxBIM.h:143
BimUnitsVolume
Definition FxBIM.h:238
@ eCubicCentimeters
Definition FxBIM.h:245
@ eCubicDecimeters
Definition FxBIM.h:244
@ eCubicMilimeters
Definition FxBIM.h:246
eBIMOuterWallsPlacement
Definition FxBIM.h:256
BimAutoLabelType
Definition FxBIM.h:283
BimUnitsStyle
Definition FxBIM.h:213
BimLabelUnitsPolicy
Definition FxBIM.h:220
std::shared_ptr< CFxBIMObject > CFxBIMObjectPtr
Definition FxBIM.h:112
BimUnitsArea
Definition FxBIM.h:227
std::shared_ptr< CFxBIMIterator > CFxBIMIteratorPtr
Definition FxBIM.h:141
#define FXBIM_API
Definition FxBIMDefs.h:4
#define FXBIM_COMMON_CODE_API
Definition FxBIMDefs.h:5
eUnset
short OdInt16
#define __OD_T(x)
bool operator<(const OdString &s1, const OdString &s2)
Definition OdString.h:1317
virtual void Start()=0
virtual bool Done()=0
virtual void Next()=0
virtual ~CFxBIMDbIterator()
Definition FxBIM.h:176
virtual void SetPredicate(std::function< bool(OdDbObjectId) > p)=0
virtual OdDbObjectId Object()=0
virtual ~CFxBIMDbIteratorRA()
Definition FxBIM.h:188
virtual size_t Count()=0
virtual OdDbObjectId Object(size_t index)=0
virtual void Start()=0
virtual ~CFxBIMIterator()
Definition FxBIM.h:154
virtual bool Done()=0
virtual void Next()=0
virtual void SetPredicate(std::function< bool(CFxBIMObjectPtr) > p)=0
virtual CFxBIMObjectPtr Object()=0
virtual ~CFxBIMIteratorRA()
Definition FxBIM.h:166
virtual CFxBIMObjectPtr Object(size_t index)=0
virtual size_t Count()=0
virtual ~CFxBIMObject()
virtual ~CFxBIMReactor()
Definition FxBIM.h:473
virtual void StorageLoaded(CFxBIMStorage *p)
Definition FxBIM.h:476
virtual void StorageCreated(CFxBIMStorage *p)
Definition FxBIM.h:475
OdString m_Name
Definition FxBIM.h:310
Standard(const OdString &name)
static OdString ToString(BimStandards standard)
static BimStandards FromString(const OdString &standard)
BimStandards m_Type
Definition FxBIM.h:311
const BimStandards & Type() const
const OdString & Name() const
GLuint index
Definition gles2_ext.h:265
GLuint const GLchar * name
Definition gles2_ext.h:265
GLsizei const GLfloat * value
Definition gles2_ext.h:302
Definition FxBIM.h:72
FXBIM_API bool BIMOUTERWALLSCOLLECTINTERNAL(OdDbDatabase *pDb)
FXBIM_API OdInt64 currentVersion()
FXBIM_API Error setBlockProperty(OdDbBlockReferencePtr pBlkRef, const CFxString &sName, const CFxVariant &oValue)
FXBIM_API void SetBIMBREAKLINESIZE(OdDbDatabase *pDb, const double &value)
FXBIM_API bool VIEWPORTRESIZEONRELOAD(const OdDbDatabase *pDb)
FXBIM_API int BIMSPLITDRAWINGMODE(const OdDbDatabase *db)
FXBIM_API void SetBIMCURRENTDIMSTYLE(OdDbDatabase *pDb, const OdString &value)
FXBIM_API bool BIMAUTOPROCESSESMODE(const OdDbDatabase *pDb)
FXBIM_API void SetBIMOUTERWALLSABSOLUTEDISTANCE(OdDbDatabase *pDb, const double &value)
FXBIM_API void SetBIMADDDEFAULTLEVELS(OdDbDatabase *pDb, const bool &value)
FXBIM_API void SetBIMSHOWVPEDITWARNING(OdDbDatabase *pDb, const bool &value)
FXBIM_API bool BIMSHOWCREATEPLANWARNING(const OdDbDatabase *pDb)
FXBIM_API void SetVIEWPORTRESIZEONRELOAD(OdDbDatabase *pDb, const bool &value)
FXBIM_API OdString BIMCALLOUTBLOCKELEVATION(const OdDbDatabase *pDb)
FXBIM_API double BIMBREAKLINESIZE(const OdDbDatabase *pDb)
FXBIM_API void SetBIMCALLOUTSFILE(OdDbDatabase *pDb, const OdString &value)
FXBIM_API void SetBIMCALLOUTBLOCKSECTIONALT(OdDbDatabase *pDb, const OdString &value)
FXBIM_API OdString BIMCALLOUTSFILE(const OdDbDatabase *pDb)
FXBIM_API OdString BIMAUTOFILTER(const OdDbDatabase *pDb)
FXBIM_API void SetBIMAUTOFILTER(OdDbDatabase *pDb, const OdString &value)
FXBIM_API void SetBIMBREAKLINEDISTANCE(OdDbDatabase *pDb, const double &value)
FXBIM_API void SetBIMUNITSSTYLE(OdDbDatabase *pDb, const int &value)
constexpr OdInt16 kCurrenVersionMinor
Definition FxBIM.h:98
FXBIM_API bool BIMCALLOUTSONOFF(const OdDbDatabase *pDb)
FXBIM_API CFxSectionWallJoinImplPtr GetWallJoiner()
FXBIM_API Error resolvePath(const OdDbDatabase *pDb, OdString &path, EFileType eFileType)
FXBIM_API bool BIMADDDEFAULTLEVELS(OdDbDatabase *pDb)
FXBIM_API Error RemoveReactor(CFxBIMObjectPtr p)
FXBIM_API void SetBIMOUTERWALLSCOLLECTINTERNAL(OdDbDatabase *pDb, const bool &value)
FXBIM_API void SetBIMVPSCALE(OdDbDatabase *pDb, const OdString &value)
FXBIM_API OdString BIMCALLOUTBLOCKSECTION(const OdDbDatabase *pDb)
FXBIM_API void SetBIMCALLOUTBLOCKSECTION(OdDbDatabase *pDb, const OdString &value)
FXBIM_API void SetBIMCALLOUTBLOCKELEVATION(OdDbDatabase *pDb, const OdString &value)
FXBIM_API Error getBlockProperty(const OdDbBlockReferencePtr pBlkRef, const CFxString &sName, CFxVariant &oValue)
FXBIM_API OdString GetAbsoluteFilePath(const OdString &sPath, OdDbDatabase *pCurrentDb)
constexpr OdInt16 kCurrenVersionRevision
Definition FxBIM.h:99
FXBIM_API void SetBIMBREAKLINEOFFSET(OdDbDatabase *pDb, const double &value)
std::shared_ptr< CFxSectionWallJoinImpl > CFxSectionWallJoinImplPtr
Definition FxBIM.h:492
constexpr auto kBIMModuleName
Definition FxBIM.h:78
FXBIM_API OdInt64 bimVersion(OdInt16 major, OdInt16 minor, OdInt16 revision)
FXBIM_API bool BIMSHOWVPEDITWARNING(const OdDbDatabase *pDb)
FXBIM_API OdString BIMCALLOUTBLOCKPLAN(const OdDbDatabase *pDb)
FXBIM_API OdString BIMPROJECTPATH(const OdDbDatabase *pDb)
FXBIM_API bool BIMOUTERWALLSJOINDIMENSIONS(OdDbDatabase *pDb)
FXBIM_API void SetBIMAUTOPUBLISH(OdDbDatabase *pDb, const bool &value)
FXBIM_API void SetBIMAUTOLABELTYPE(OdDbDatabase *pDb, const int &value)
FXBIM_API Error setRotation(OdDbBlockReferencePtr pBlkRef, double angle)
FXBIM_API int BIMUNITSSTYLE(const OdDbDatabase *pDb)
FXBIM_API void SetBIMAUTOTEMPLATE(OdDbDatabase *pDb, const OdString &value)
FXBIM_COMMON_CODE_API int BIMUNITSLENGTH(const OdDbDatabase *pDb)
FXBIM_API double BIMBREAKLINEOFFSET(const OdDbDatabase *pDb)
FXBIM_API void SetBIMLEVELSYMBOLTYPE(OdDbDatabase *db, const int &value)
Version
Definition FxBIM.h:82
@ kSP3
Definition FxBIM.h:93
@ kSP2
Definition FxBIM.h:92
@ k2022
Definition FxBIM.h:86
@ kSP0
Definition FxBIM.h:90
@ k2024
Definition FxBIM.h:88
@ k2020
Definition FxBIM.h:84
@ k2021
Definition FxBIM.h:85
@ kSP1
Definition FxBIM.h:91
@ k2025
Definition FxBIM.h:89
@ k2023
Definition FxBIM.h:87
@ k2019
Definition FxBIM.h:83
FXBIM_API void SetBIMCALLOUTSONOFF(OdDbDatabase *pDb, const bool &value)
FXBIM_API void SetBIMOUTERWALLSJOINDIMENSIONS(OdDbDatabase *pDb, const bool &value)
FXBIM_API int BIMOUTERWALLSCHAINDISTANCES(OdDbDatabase *pDb)
FXBIM_API int BIMROOMSECTIONCROSS(const OdDbDatabase *pDb)
FXBIM_API OdDbObjectId GetDetailDashedLineType(OdDbDatabasePtr pDb)
FXBIM_API void SetWallJoiner(CFxSectionWallJoinImplPtr pWallJoiner)
FXBIM_API void SetBIMSPLITDRAWINGMODE(OdDbDatabase *db, const int &value)
EFileType
Definition FxBIM.h:429
FXBIM_API Error setMirrorState(OdDbBlockReferencePtr pBlkRef, bool isMirrored)
FXBIM_API void SetBIMSHOWCREATEPLANWARNING(OdDbDatabase *pDb, const bool &value)
FXBIM_API OdString BIMCURRENTDIMSTYLE(const OdDbDatabase *pDb)
FXBIM_API int BIMLEVELSYMBOLTYPE(const OdDbDatabase *db)
FXBIM_API void SetBIMHPSCALE(OdDbDatabase *pDb, const double &value)
FXBIM_API void SetBIMPROJECTPATH(OdDbDatabase *pDb, const OdString &value)
FXBIM_API void SetBIMCALLOUTBLOCKPLAN(OdDbDatabase *pDb, const OdString &value)
FXBIM_COMMON_CODE_API void SetBIMUNITSLENGTH(OdDbDatabase *pDb, const int &value)
FXBIM_API void SetBIMAUTOPROCESSESMODE(OdDbDatabase *pDb, const bool &value)
FXBIM_COMMON_CODE_API OdString ToString(const Error &e)
FXBIM_API OdString BIMVPSCALE(const OdDbDatabase *pDb)
FXBIM_API void SetBIMSTANDARD(OdDbDatabase *pDb, const OdString &value)
FXBIM_API Error getRotation(OdDbBlockReferencePtr pBlkRef, double &angle)
FXBIM_API void SetBIMCLIPPINGBOXONOFF(OdDbDatabase *pDb, const bool &value)
FXBIM_API double BIMOUTERWALLSABSOLUTEDISTANCE(OdDbDatabase *pDb)
FXBIM_API bool BIMAUTOPUBLISH(const OdDbDatabase *pDb)
FXBIM_API void SetBIMVIEWTITLEBLOCK(OdDbDatabase *pDb, const OdString &value)
FXBIM_API double BIMBREAKLINEDISTANCE(const OdDbDatabase *pDb)
FXBIM_API bool BIMCLIPPINGBOXONOFF(const OdDbDatabase *pDb)
FXBIM_API void SetBIMOUTERWALLSPLACEMENT(OdDbDatabase *pDb, int value)
FXBIM_API Error AddReactor(CFxBIMObjectPtr p)
FXBIM_API OdString BIMAUTOTEMPLATE(const OdDbDatabase *pDb)
FXBIM_API OdString BIMCALLOUTBLOCKSECTIONALT(const OdDbDatabase *pDb)
FXBIM_API void SetBIMOUTERWALLSISABSOLUTEDISTANCE(OdDbDatabase *pDb, const bool &value)
FXBIM_API bool BIMOUTERWALLSISABSOLUTEDISTANCE(OdDbDatabase *pDb)
FXBIM_API void SetBIMROOMSECTIONCROSS(OdDbDatabase *pDb, const int &value)
constexpr OdInt16 kCurrenVersionMajor
Definition FxBIM.h:97
FXBIM_API void SetBIMOUTERWALLSCHAINDISTANCES(OdDbDatabase *pDb, const int &value)
FXBIM_API OdString BIMSTANDARD(const OdDbDatabase *pDb)
FXBIM_API double getImportScaleLabel(OdDbDatabasePtr database)
FXBIM_API int BIMAUTOLABELTYPE(const OdDbDatabase *pDb)
FXBIM_API OdDbObjectId GetGridLineDashedLineType(OdDbDatabasePtr pDb)
FXBIM_API OdString BIMVIEWTITLEBLOCK(const OdDbDatabase *pDb)
FXBIM_API double BIMHPSCALE(const OdDbDatabase *pDb)
FXBIM_API int BIMOUTERWALLSPLACEMENT(OdDbDatabase *pDb)
std::shared_ptr< T > cast(CFxBIMObjectPtr pBase)
Definition FxBIM.h:126
@ kForRead
Definition DbObjectId.h:56
virtual void JoinWalls(CFxDocumentPtr pFxDoc)=0