sdaiCreateADB
Table 1 – Required value buffer depending on valueType (on the example of sdaiCreateADB but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
SdaiADB adb = sdaiCreateADB (sdaiINTEGER, &val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
SdaiADB adb = sdaiCreateADB (sdaiREAL, &val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN bool val = true; bool val = true;
SdaiADB adb = sdaiCreateADB (sdaiBOOLEAN, &val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
SdaiADB adb = sdaiCreateADB (sdaiLOGICAL, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
SdaiADB adb = sdaiCreateADB (sdaiENUM, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
SdaiADB adb = sdaiCreateADB (sdaiBINARY, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
SdaiADB adb = sdaiCreateADB (sdaiSTRING, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
SdaiADB adb = sdaiCreateADB (sdaiUNICODE, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
SdaiADB adb = sdaiCreateADB (sdaiEXPRESSSTRING, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
SdaiADB adb = sdaiCreateADB (sdaiINSTANCE, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiAppend (val, sdaiINSTANCE, inst); ifcengine.sdaiAppend (val, ifcengine.sdaiINSTANCE, inst);
SdaiADB adb = sdaiCreateADB (sdaiAGGR, val); int_t adb = ifcengine.sdaiCreateADB (ifcengine.sdaiAGGR, val);
sdaiADB not applicable
TCHAR is “char” or “wchar_t” depending on setStringUnicode.
(Non-standard behavior) sdaiLOGICAL behaves differently from ISO 10303-24-2001: it expects char* while standard declares int_t
(Non-standard extension) sdiADB in C++ has an option to work without sdaiCreateEmptyADB and sdaiDeleteADB as shown in the table
Table 2 - valueType can be requested depending on actual model data.
valueType Works for following values in the model
integer real .T. or .F. .U. other enum binary string instance list $ (empty)
sdaiINTEGER Yes . . . . . . . . .
sdaiREAL . Yes . . . . . . . .
sdaiNUMBER . Yes . . . . . . . .
sdaiBOOLEAN . . Yes . . . . . . .
sdaiLOGICAL . . Yes Yes . . . . . .
sdaiENUM . . Yes Yes Yes . . . . .
sdaiBINARY . . . . . Yes . . . .
sdaiSTRING . . . . . . Yes . . .
sdaiUNICODE . . . . . . Yes . . .
sdaiEXPRESSSTRING . . . . . . Yes . . .
sdaiINSTANCE . . . . . . . Yes . .
sdaiAGGR . . . . . . . . Yes .
sdaiADB . . . . . . . . . .
Syntax
// // Strong typing definition // SdaiADB sdaiCreateADB( SdaiPrimitiveType valueType, const void * value ); static inline SdaiADB sdaiCreateADB( SdaiPrimitiveType valueType, SdaiInstance value ) { return sdaiCreateADB( valueType, (const void*) value ); } // // Weak typing definition // void __declspec(dllexport) * __stdcall sdaiCreateADB( int_t valueType, const void * value ); static inline void * sdaiCreateADB( int_t valueType, int_t value ) { return sdaiCreateADB( valueType, (const void*) value ); }
Property valueType
Size: 32 bit / 4 byte (value)Property value
Size: 32 bit / 4 byte (reference)
Example (based on pure API calls)
Here you can find code snippits that show how the API call sdaiCreateADB can be used.
#include "./include/ifcengine.h" // // #13131 = IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(1.745E-2), #31313); // #31313 = IFCSIUNIT(*, .PLANEANGLEUNIT., $, .RADIAN.); // int_t buildSIUnitInstance(int_t model, char * UnitType, char * Prefix, char * Name) { // #31313 = IFCSIUNIT(*, .PLANEANGLEUNIT., $, .RADIAN.); int_t ifcSIUnitInstance = sdaiCreateInstanceBN(model, "IFCSIUNIT"); sdaiPutAttrBN(ifcSIUnitInstance, "UnitType", sdaiENUM, UnitType); if (Prefix) { sdaiPutAttrBN(ifcSIUnitInstance, "Prefix", sdaiENUM, Prefix); } sdaiPutAttrBN(ifcSIUnitInstance, "Name", sdaiENUM, Name); return ifcSIUnitInstance; } int_t buildMeasureWithUnitInstance(int_t model) { void * valueComponentADB; double valueComponent= 0.01745; // #13131 = IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(1.745E-2), #31313); int_t ifcMeasureWithUnitInstance = sdaiCreateInstanceBN(model, "IFCMEASUREWITHUNIT"); valueComponentADB = sdaiCreateADB(sdaiREAL, &valueComponent); sdaiPutADBTypePath(valueComponentADB, 1, "IFCPLANEANGLEMEASURE"); sdaiPutAttrBN(ifcMeasureWithUnitInstance, "ValueComponent", sdaiADB, (void*) valueComponentADB); sdaiPutAttrBN(ifcMeasureWithUnitInstance, "UnitComponent", sdaiINSTANCE, (void*) buildSIUnitInstance(model, "PLANEANGLEUNIT", 0, "RADIAN")); return ifcMeasureWithUnitInstance; }