Table 1 – Required value buffer depending on valueType (on the example of sdaiPrepend but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiPrepend (aggregate, sdaiINTEGER, &val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiPrepend (aggregate, sdaiREAL, &val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiPrepend (aggregate, sdaiBOOLEAN, &val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiPrepend (aggregate, sdaiLOGICAL, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiPrepend (aggregate, sdaiENUM, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiPrepend (aggregate, sdaiBINARY, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiPrepend (aggregate, sdaiSTRING, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiPrepend (aggregate, sdaiUNICODE, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiPrepend (aggregate, sdaiEXPRESSSTRING, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiPrepend (aggregate, sdaiINSTANCE, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiPrepend (aggregate, sdaiAGGR, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiPrepend (aggregate, sdaiADB, val); ifcengine.sdaiPrepend (aggregate, ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
Table 1 – Required value buffer depending on valueType (on the example of sdaiAppend but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiAppend (aggregate, sdaiINTEGER, &val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiAppend (aggregate, sdaiREAL, &val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiAppend (aggregate, sdaiBOOLEAN, &val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiAppend (aggregate, sdaiLOGICAL, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiAppend (aggregate, sdaiENUM, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiAppend (aggregate, sdaiBINARY, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiAppend (aggregate, sdaiSTRING, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiAppend (aggregate, sdaiUNICODE, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiAppend (aggregate, sdaiEXPRESSSTRING, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiAppend (aggregate, sdaiINSTANCE, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiAppend (aggregate, sdaiAGGR, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiAppend (aggregate, sdaiADB, val); ifcengine.sdaiAppend (aggregate, ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
Table 1 – Required value buffer depending on valueType (on the example of sdaiAdd but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiAdd (aggregate, sdaiINTEGER, &val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiAdd (aggregate, sdaiREAL, &val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiAdd (aggregate, sdaiBOOLEAN, &val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiAdd (aggregate, sdaiLOGICAL, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiAdd (aggregate, sdaiENUM, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiAdd (aggregate, sdaiBINARY, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiAdd (aggregate, sdaiSTRING, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiAdd (aggregate, sdaiUNICODE, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiAdd (aggregate, sdaiEXPRESSSTRING, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiAdd (aggregate, sdaiINSTANCE, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiAdd (aggregate, sdaiAGGR, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiAdd (aggregate, sdaiADB, val); ifcengine.sdaiAdd (aggregate, ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
Table 1 – Required value buffer depending on valueType (on the example of sdaiInsertByIndex but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiInsertByIndex (aggregate, index, sdaiINTEGER, &val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiInsertByIndex (aggregate, index, sdaiREAL, &val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiInsertByIndex (aggregate, index, sdaiBOOLEAN, &val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiInsertByIndex (aggregate, index, sdaiLOGICAL, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiInsertByIndex (aggregate, index, sdaiENUM, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiInsertByIndex (aggregate, index, sdaiBINARY, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiInsertByIndex (aggregate, index, sdaiSTRING, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiInsertByIndex (aggregate, index, sdaiUNICODE, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiInsertByIndex (aggregate, index, sdaiEXPRESSSTRING, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiInsertByIndex (aggregate, index, sdaiINSTANCE, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiInsertByIndex (aggregate, index, sdaiAGGR, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiInsertByIndex (aggregate, index, sdaiADB, val); ifcengine.sdaiInsertByIndex (aggregate, index, ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
Table 1 – Required value buffer depending on valueType (on the example of sdaiInsertBefore but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiInsertBefore (iterator, sdaiINTEGER, &val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiInsertBefore (iterator, sdaiREAL, &val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiInsertBefore (iterator, sdaiBOOLEAN, &val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiInsertBefore (iterator, sdaiLOGICAL, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiInsertBefore (iterator, sdaiENUM, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiInsertBefore (iterator, sdaiBINARY, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiInsertBefore (iterator, sdaiSTRING, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiInsertBefore (iterator, sdaiUNICODE, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiInsertBefore (iterator, sdaiEXPRESSSTRING, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiInsertBefore (iterator, sdaiINSTANCE, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiInsertBefore (iterator, sdaiAGGR, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiInsertBefore (iterator, sdaiADB, val); ifcengine.sdaiInsertBefore (iterator, ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
Table 1 – Required value buffer depending on valueType (on the example of sdaiInsertAfter but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiInsertAfter (iterator, sdaiINTEGER, &val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiInsertAfter (iterator, sdaiREAL, &val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiInsertAfter (iterator, sdaiBOOLEAN, &val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiInsertAfter (iterator, sdaiLOGICAL, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiInsertAfter (iterator, sdaiENUM, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiInsertAfter (iterator, sdaiBINARY, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiInsertAfter (iterator, sdaiSTRING, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiInsertAfter (iterator, sdaiUNICODE, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiInsertAfter (iterator, sdaiEXPRESSSTRING, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiInsertAfter (iterator, sdaiINSTANCE, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiInsertAfter (iterator, sdaiAGGR, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiInsertAfter (iterator, sdaiADB, val); ifcengine.sdaiInsertAfter (iterator, ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
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 SdaiBoolean val = sdaiTRUE; 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);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (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.
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
(attributeName) ?
sdaiCreateAggr(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
)
) :
sdaiCreateAggr(
instance,
nullptr
);
Table 1 – Required value buffer depending on valueType (on the example of sdaiRemove but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiRemove (aggregate, sdaiINTEGER, &val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiRemove (aggregate, sdaiREAL, &val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiRemove (aggregate, sdaiBOOLEAN, &val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiRemove (aggregate, sdaiLOGICAL, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiRemove (aggregate, sdaiENUM, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiRemove (aggregate, sdaiBINARY, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiRemove (aggregate, sdaiSTRING, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiRemove (aggregate, sdaiUNICODE, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiRemove (aggregate, sdaiEXPRESSSTRING, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = ... int_t val = ...
sdaiRemove (aggregate, sdaiINSTANCE, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = ... int_t val = ...
sdaiRemove (aggregate, sdaiAGGR, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiAGGR, val);
sdaiADB SdaiADB val = ... int_t val = ...
sdaiRemove (aggregate, sdaiADB, val); ifcengine.sdaiRemove (aggregate, ifcengine.sdaiADB, val);
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.
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
sdaiCreateInstance(
model,
sdaiGetEntity(
model,
entityName
)
);
Table 1 – Required value buffer depending on valueType (on the example of sdaiPutAttr but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiPutAttr (instance, attribute, sdaiINTEGER, &val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiPutAttr (instance, attribute, sdaiREAL, &val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiPutAttr (instance, attribute, sdaiBOOLEAN, &val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiPutAttr (instance, attribute, sdaiLOGICAL, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiPutAttr (instance, attribute, sdaiENUM, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiPutAttr (instance, attribute, sdaiBINARY, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiPutAttr (instance, attribute, sdaiSTRING, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiPutAttr (instance, attribute, sdaiUNICODE, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiPutAttr (instance, attribute, sdaiEXPRESSSTRING, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiPutAttr (instance, attribute, sdaiINSTANCE, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiPutAttr (instance, attribute, sdaiAGGR, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiPutAttr (instance, attribute, sdaiADB, val); ifcengine.sdaiPutAttr (instance, attribute, ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
Table 1 – Required value buffer depending on valueType (on the example of sdaiPutAttrBN but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiPutAttrBN (instance, "attrName", sdaiINTEGER, &val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiPutAttrBN (instance, "attrName", sdaiREAL, &val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiPutAttrBN (instance, "attrName", sdaiBOOLEAN, &val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiPutAttrBN (instance, "attrName", sdaiLOGICAL, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiPutAttrBN (instance, "attrName", sdaiENUM, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiPutAttrBN (instance, "attrName", sdaiBINARY, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiPutAttrBN (instance, "attrName", sdaiSTRING, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiPutAttrBN (instance, "attrName", sdaiUNICODE, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiPutAttrBN (instance, "attrName", sdaiEXPRESSSTRING, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = ifcengine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiPutAttrBN (instance, "attrName", sdaiINSTANCE, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); ifcengine.sdaiPutAttr (val, ifcengine.sdaiINSTANCE, inst);
sdaiPutAttrBN (instance, "attrName", sdaiAGGR, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (ifcengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "IFCINTEGER"); ifcengine.sdaiPutADBTypePath (val, 1, "IFCINTEGER");
sdaiPutAttrBN (instance, "attrName", sdaiADB, val); ifcengine.sdaiPutAttrBN (instance, "attrName", ifcengine.sdaiADB, val);
sdaiDeleteADB (val); ifcengine.sdaiDeleteADB (val);
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .
Technically sdaiPutAttrBN will transform into the following call
sdaiPutAttr(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
),
valueType,
value
);
sdaiUnsetAttr(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
)
);
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
);
Table 1 – Required value buffer depending on valueType (on the example of sdaiIsMember but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiIsMember (sdaiINTEGER, &val); ifcengine.sdaiIsMember (ifcengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiIsMember (sdaiREAL, &val); ifcengine.sdaiIsMember (ifcengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiIsMember (sdaiBOOLEAN, &val); ifcengine.sdaiIsMember (ifcengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiIsMember (sdaiLOGICAL, val); ifcengine.sdaiIsMember (ifcengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiIsMember (sdaiENUM, val); ifcengine.sdaiIsMember (ifcengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiIsMember (sdaiBINARY, val); ifcengine.sdaiIsMember (ifcengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiIsMember (sdaiSTRING, val); ifcengine.sdaiIsMember (ifcengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiIsMember (sdaiUNICODE, val); ifcengine.sdaiIsMember (ifcengine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiIsMember (sdaiEXPRESSSTRING, val); ifcengine.sdaiIsMember (ifcengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = ... int_t val = ...
sdaiIsMember (sdaiINSTANCE, val); ifcengine.sdaiIsMember (ifcengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = ... int_t val = ...
sdaiIsMember (sdaiAGGR, val); ifcengine.sdaiIsMember (ifcengine.sdaiAGGR, val);
sdaiADB SdaiADB val = ... int_t val = ...
sdaiIsMember (sdaiADB, val); ifcengine.sdaiIsMember (ifcengine.sdaiADB, val);
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.
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 Yes Yes Yes Yes Yes Yes Yes Yes Yes .