Attributes repository and fileName will be ignored, they are their because of backward compatibility.
A handle to the model will be returned, or 0 in case something went wrong.
Attributes repository and fileName will be ignored, they are their because of backward compatibility.
A handle to the model will be returned, or 0 in case something went wrong.
Attribute repository will be ignored, they are their because of backward compatibility.
A handle to the model will be returned, or 0 in case something went wrong.
Attribute repository will be ignored, they are their because of backward compatibility.
A handle to the model will be returned, or 0 in case something went wrong.
Attribute repository will be ignored, they are their because of backward compatibility.
A handle to the model will be returned, or 0 in case something went wrong.
sdaiGetEntityExtent(
model,
sdaiGetEntity(
model,
entityName
)
);
engiGetAttrDerived(
entity,
sdaiGetAttrDefinition(
entity,
attributeName
)
);
engiIsAttrInverse(
sdaiGetAttrDefinition(
entity,
attributeName
)
);
engiIsAttrOptional(
sdaiGetAttrDefinition(
entity,
attributeName
)
);
engiGetAttrDomainName(
sdaiGetAttrDefinition(
entity,
attributeName
),
domainName
);
engiIsEntityAbstract(
sdaiGetEntity(
model,
entityName
)
);
Table 1 – Required value buffer depending on valueType (on the example of sdaiGetADBValue but valid for all get-functions)
valueType C/C++ C#
sdaiINTEGER int_t val; int_t val;
sdaiGetADBValue (ADB, sdaiINTEGER, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiINTEGER, out val);
sdaiREAL or sdaiNUMBER double val; double val;
sdaiGetADBValue (ADB, sdaiREAL, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiREAL, out val);
sdaiBOOLEAN SdaiBoolean val; bool val;
sdaiGetADBValue (ADB, sdaiBOOLEAN, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiBOOLEAN, out val);
sdaiLOGICAL const TCHAR* val; string val;
sdaiGetADBValue (ADB, sdaiLOGICAL, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiLOGICAL, out val);
sdaiENUM const TCHAR* val; string val;
sdaiGetADBValue (ADB, sdaiENUM, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiENUM, out val);
sdaiBINARY const TCHAR* val; string val;
sdaiGetADBValue (ADB, sdaiBINARY, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiBINARY, out val);
sdaiSTRING const char* val; string val;
sdaiGetADBValue (ADB, sdaiSTRING, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiSTRING, out val);
sdaiUNICODE const wchar_t* val; string val;
sdaiGetADBValue (ADB, sdaiUNICODE, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiUNICODE, out val);
sdaiEXPRESSSTRING const char* val; string val;
sdaiGetADBValue (ADB, sdaiEXPRESSSTRING, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiEXPRESSSTRING, out val);
sdaiINSTANCE SdaiInstance val; int_t val;
sdaiGetADBValue (ADB, sdaiINSTANCE, &val); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiINSTANCE, out val);
sdaiAGGR SdaiAggr aggr; int_t aggr;
sdaiGetADBValue (ADB, sdaiAGGR, &aggr); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiAGGR, out aggr);
sdaiADB SdaiADB adb = sdaiCreateEmptyADB(); int_t adb = IFCEngine.sdaiCreateEmptyADB();
sdaiGetADBValue (ADB, sdaiADB, adb); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiADB, adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
SdaiADB adb = nullptr; int_t adb = 0; // it is important to initialize
sdaiGetADBValue (ADB, sdaiADB, &adb); IFCEngine.sdaiGetADBValue (ADB, IFCEngine.sdaiADB, out adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
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 has an option to work without sdaiCreateEmptyADB and sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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
sdaiINTEGER Yes Yes * . . . . . . .
sdaiREAL Yes Yes . . . . . . .
sdaiNUMBER Yes Yes . . . . . . .
sdaiBOOLEAN . . Yes . . . . . .
sdaiLOGICAL . . Yes Yes . . . . .
sdaiENUM . . Yes Yes Yes . . . .
sdaiBINARY . . . . . Yes . . .
sdaiSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiUNICODE Yes Yes Yes Yes Yes Yes Yes . .
sdaiEXPRESSSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiINSTANCE . . . . . . . Yes .
sdaiAGGR . . . . . . . . Yes
sdaiADB Yes Yes Yes Yes Yes Yes Yes Yes Yes
(Non-standard extensions) sdaiGetADBValue: sdaiADB is allowed and will success when sdaiGetADBTypePath is not NULL, returning ABD value has type path element removed.
Table 1 – Required value buffer depending on valueType (on the example of sdaiPutADBValue but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiPutADBValue (ADB, sdaiINTEGER, &val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiPutADBValue (ADB, sdaiREAL, &val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiPutADBValue (ADB, sdaiBOOLEAN, &val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiPutADBValue (ADB, sdaiLOGICAL, val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiPutADBValue (ADB, sdaiENUM, val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiPutADBValue (ADB, sdaiBINARY, val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiPutADBValue (ADB, sdaiSTRING, val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiPutADBValue (ADB, sdaiUNICODE, val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiPutADBValue (ADB, sdaiEXPRESSSTRING, val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = IFCEngine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiPutADBValue (ADB, sdaiINSTANCE, val); IFCEngine.sdaiPutADBValue (ADB, 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);
sdaiPutADBValue (ADB, sdaiAGGR, val); IFCEngine.sdaiPutADBValue (ADB, 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");
sdaiPutADBValue (ADB, sdaiADB, val); IFCEngine.sdaiPutADBValue (ADB, IFCEngine.sdaiADB, val);
... ...
sdaiDeleteADB (val); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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 sdaiGetAggrByIndex but valid for all get-functions)
valueType C/C++ C#
sdaiINTEGER int_t val; int_t val;
sdaiGetAggrByIndex (aggregate, index, sdaiINTEGER, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiINTEGER, out val);
sdaiREAL or sdaiNUMBER double val; double val;
sdaiGetAggrByIndex (aggregate, index, sdaiREAL, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiREAL, out val);
sdaiBOOLEAN SdaiBoolean val; bool val;
sdaiGetAggrByIndex (aggregate, index, sdaiBOOLEAN, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiBOOLEAN, out val);
sdaiLOGICAL const TCHAR* val; string val;
sdaiGetAggrByIndex (aggregate, index, sdaiLOGICAL, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiLOGICAL, out val);
sdaiENUM const TCHAR* val; string val;
sdaiGetAggrByIndex (aggregate, index, sdaiENUM, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiENUM, out val);
sdaiBINARY const TCHAR* val; string val;
sdaiGetAggrByIndex (aggregate, index, sdaiBINARY, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiBINARY, out val);
sdaiSTRING const char* val; string val;
sdaiGetAggrByIndex (aggregate, index, sdaiSTRING, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiSTRING, out val);
sdaiUNICODE const wchar_t* val; string val;
sdaiGetAggrByIndex (aggregate, index, sdaiUNICODE, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiUNICODE, out val);
sdaiEXPRESSSTRING const char* val; string val;
sdaiGetAggrByIndex (aggregate, index, sdaiEXPRESSSTRING, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiEXPRESSSTRING, out val);
sdaiINSTANCE SdaiInstance val; int_t val;
sdaiGetAggrByIndex (aggregate, index, sdaiINSTANCE, &val); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiINSTANCE, out val);
sdaiAGGR SdaiAggr aggr; int_t aggr;
sdaiGetAggrByIndex (aggregate, index, sdaiAGGR, &aggr); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiAGGR, out aggr);
sdaiADB SdaiADB adb = sdaiCreateEmptyADB(); int_t adb = IFCEngine.sdaiCreateEmptyADB();
sdaiGetAggrByIndex (aggregate, index, sdaiADB, adb); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiADB, adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
SdaiADB adb = nullptr; int_t adb = 0; // it is important to initialize
sdaiGetAggrByIndex (aggregate, index, sdaiADB, &adb); IFCEngine.sdaiGetAggrByIndex (aggregate, index, IFCEngine.sdaiADB, out adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
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 has an option to work without sdaiCreateEmptyADB and sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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
sdaiINTEGER Yes Yes * . . . . . . .
sdaiREAL Yes Yes . . . . . . .
sdaiNUMBER Yes Yes . . . . . . .
sdaiBOOLEAN . . Yes . . . . . .
sdaiLOGICAL . . Yes Yes . . . . .
sdaiENUM . . Yes Yes Yes . . . .
sdaiBINARY . . . . . Yes . . .
sdaiSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiUNICODE Yes Yes Yes Yes Yes Yes Yes . .
sdaiEXPRESSSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiINSTANCE . . . . . . . Yes .
sdaiAGGR . . . . . . . . Yes
sdaiADB Yes Yes Yes Yes Yes Yes Yes Yes Yes
(Non-standard extensions) sdaiGetADBValue: sdaiADB is allowed and will success when sdaiGetADBTypePath is not NULL, returning ABD value has type path element removed.
Table 1 – Required value buffer depending on valueType (on the example of sdaiPutAggrByIndex but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiPutAggrByIndex (aggregate, index, sdaiINTEGER, &val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiPutAggrByIndex (aggregate, index, sdaiREAL, &val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiPutAggrByIndex (aggregate, index, sdaiBOOLEAN, &val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiPutAggrByIndex (aggregate, index, sdaiLOGICAL, val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiPutAggrByIndex (aggregate, index, sdaiENUM, val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiPutAggrByIndex (aggregate, index, sdaiBINARY, val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiPutAggrByIndex (aggregate, index, sdaiSTRING, val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiPutAggrByIndex (aggregate, index, sdaiUNICODE, val); IFCEngine.sdaiPutAggrByIndex (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\\";
sdaiPutAggrByIndex (aggregate, index, sdaiEXPRESSSTRING, val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = IFCEngine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiPutAggrByIndex (aggregate, index, sdaiINSTANCE, val); IFCEngine.sdaiPutAggrByIndex (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);
sdaiPutAggrByIndex (aggregate, index, sdaiAGGR, val); IFCEngine.sdaiPutAggrByIndex (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");
sdaiPutAggrByIndex (aggregate, index, sdaiADB, val); IFCEngine.sdaiPutAggrByIndex (aggregate, index, IFCEngine.sdaiADB, val);
... ...
sdaiDeleteADB (val); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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 sdaiGetAttr but valid for all get-functions)
valueType C/C++ C#
sdaiINTEGER int_t val; int_t val;
sdaiGetAttr (instance, attribute, sdaiINTEGER, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiINTEGER, out val);
sdaiREAL or sdaiNUMBER double val; double val;
sdaiGetAttr (instance, attribute, sdaiREAL, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiREAL, out val);
sdaiBOOLEAN SdaiBoolean val; bool val;
sdaiGetAttr (instance, attribute, sdaiBOOLEAN, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiBOOLEAN, out val);
sdaiLOGICAL const TCHAR* val; string val;
sdaiGetAttr (instance, attribute, sdaiLOGICAL, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiLOGICAL, out val);
sdaiENUM const TCHAR* val; string val;
sdaiGetAttr (instance, attribute, sdaiENUM, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiENUM, out val);
sdaiBINARY const TCHAR* val; string val;
sdaiGetAttr (instance, attribute, sdaiBINARY, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiBINARY, out val);
sdaiSTRING const char* val; string val;
sdaiGetAttr (instance, attribute, sdaiSTRING, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiSTRING, out val);
sdaiUNICODE const wchar_t* val; string val;
sdaiGetAttr (instance, attribute, sdaiUNICODE, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiUNICODE, out val);
sdaiEXPRESSSTRING const char* val; string val;
sdaiGetAttr (instance, attribute, sdaiEXPRESSSTRING, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiEXPRESSSTRING, out val);
sdaiINSTANCE SdaiInstance val; int_t val;
sdaiGetAttr (instance, attribute, sdaiINSTANCE, &val); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiINSTANCE, out val);
sdaiAGGR SdaiAggr aggr; int_t aggr;
sdaiGetAttr (instance, attribute, sdaiAGGR, &aggr); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiAGGR, out aggr);
sdaiADB SdaiADB adb = sdaiCreateEmptyADB(); int_t adb = IFCEngine.sdaiCreateEmptyADB();
sdaiGetAttr (instance, attribute, sdaiADB, adb); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiADB, adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
SdaiADB adb = nullptr; int_t adb = 0; // it is important to initialize
sdaiGetAttr (instance, attribute, sdaiADB, &adb); IFCEngine.sdaiGetAttr (instance, attribute, IFCEngine.sdaiADB, out adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
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 has an option to work without sdaiCreateEmptyADB and sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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
sdaiINTEGER Yes Yes * . . . . . . .
sdaiREAL Yes Yes . . . . . . .
sdaiNUMBER Yes Yes . . . . . . .
sdaiBOOLEAN . . Yes . . . . . .
sdaiLOGICAL . . Yes Yes . . . . .
sdaiENUM . . Yes Yes Yes . . . .
sdaiBINARY . . . . . Yes . . .
sdaiSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiUNICODE Yes Yes Yes Yes Yes Yes Yes . .
sdaiEXPRESSSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiINSTANCE . . . . . . . Yes .
sdaiAGGR . . . . . . . . Yes
sdaiADB Yes Yes Yes Yes Yes Yes Yes Yes Yes
(Non-standard extensions) sdaiGetADBValue: sdaiADB is allowed and will success when sdaiGetADBTypePath is not NULL, returning ABD value has type path element removed.
Table 1 – Required value buffer depending on valueType (on the example of sdaiGetAttrBN but valid for all get-functions)
valueType C/C++ C#
sdaiINTEGER int_t val; int_t val;
sdaiGetAttrBN (instance, "attrName", sdaiINTEGER, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiINTEGER, out val);
sdaiREAL or sdaiNUMBER double val; double val;
sdaiGetAttrBN (instance, "attrName", sdaiREAL, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiREAL, out val);
sdaiBOOLEAN SdaiBoolean val; bool val;
sdaiGetAttrBN (instance, "attrName", sdaiBOOLEAN, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiBOOLEAN, out val);
sdaiLOGICAL const TCHAR* val; string val;
sdaiGetAttrBN (instance, "attrName", sdaiLOGICAL, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiLOGICAL, out val);
sdaiENUM const TCHAR* val; string val;
sdaiGetAttrBN (instance, "attrName", sdaiENUM, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiENUM, out val);
sdaiBINARY const TCHAR* val; string val;
sdaiGetAttrBN (instance, "attrName", sdaiBINARY, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiBINARY, out val);
sdaiSTRING const char* val; string val;
sdaiGetAttrBN (instance, "attrName", sdaiSTRING, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiSTRING, out val);
sdaiUNICODE const wchar_t* val; string val;
sdaiGetAttrBN (instance, "attrName", sdaiUNICODE, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiUNICODE, out val);
sdaiEXPRESSSTRING const char* val; string val;
sdaiGetAttrBN (instance, "attrName", sdaiEXPRESSSTRING, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiEXPRESSSTRING, out val);
sdaiINSTANCE SdaiInstance val; int_t val;
sdaiGetAttrBN (instance, "attrName", sdaiINSTANCE, &val); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiINSTANCE, out val);
sdaiAGGR SdaiAggr aggr; int_t aggr;
sdaiGetAttrBN (instance, "attrName", sdaiAGGR, &aggr); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiAGGR, out aggr);
sdaiADB SdaiADB adb = sdaiCreateEmptyADB(); int_t adb = IFCEngine.sdaiCreateEmptyADB();
sdaiGetAttrBN (instance, "attrName", sdaiADB, adb); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiADB, adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
SdaiADB adb = nullptr; int_t adb = 0; // it is important to initialize
sdaiGetAttrBN (instance, "attrName", sdaiADB, &adb); IFCEngine.sdaiGetAttrBN (instance, "attrName", IFCEngine.sdaiADB, out adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
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 has an option to work without sdaiCreateEmptyADB and sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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
sdaiINTEGER Yes Yes * . . . . . . .
sdaiREAL Yes Yes . . . . . . .
sdaiNUMBER Yes Yes . . . . . . .
sdaiBOOLEAN . . Yes . . . . . .
sdaiLOGICAL . . Yes Yes . . . . .
sdaiENUM . . Yes Yes Yes . . . .
sdaiBINARY . . . . . Yes . . .
sdaiSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiUNICODE Yes Yes Yes Yes Yes Yes Yes . .
sdaiEXPRESSSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiINSTANCE . . . . . . . Yes .
sdaiAGGR . . . . . . . . Yes
sdaiADB Yes Yes Yes Yes Yes Yes Yes Yes Yes
(Non-standard extensions) sdaiGetADBValue: sdaiADB is allowed and will success when sdaiGetADBTypePath is not NULL, returning ABD value has type path element removed.
Technically sdaiGetAttrBN will transform into the following call
sdaiGetAttr(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
),
valueType,
value
);
char * rValue = 0;
sdaiGetAttr(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
),
sdaiSTRING,
&rValue
);
return rValue;
SdaiInstance inst = 0;
sdaiGetAttr(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
),
sdaiINSTANCE,
&inst
);
return inst;
SdaiAggr aggr = 0;
sdaiGetAttr(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
),
sdaiAGGR,
&aggr
);
return aggr;
sdaiIsKindOf(
instance,
sdaiGetEntity(
engiGetEntityModel(
sdaiGetInstanceType(
instance
)
),
entityName
);
engiGetAttrType(
sdaiGetAttrDefinition(
entity,
attributeName
)
);
engiGetInstanceAttrType(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
)
);
sdaiIsInstanceOf(
instance,
sdaiGetEntity(
engiGetEntityModel(
sdaiGetInstanceType(
instance
)
),
entityName
)
);
sdaiValidateAttribute(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
)
);
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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 .
double segmentationLength = 0.;
getSegmentation(model, nullptr, &segmentationLength);
setSegmentation(model, circles, segmentationLength);
int_t segmentationParts = 0;
getSegmentation(model, &segmentationParts, nullptr);
setSegmentation(model, segmentationParts, length);
xxxxGetEntityAndSubTypesExtent(
model,
sdaiGetEntity(
model,
entityName
)
);
Table 1 – Required value buffer depending on valueType (on the example of sdaiGetAggrByIterator but valid for all get-functions)
valueType C/C++ C#
sdaiINTEGER int_t val; int_t val;
sdaiGetAggrByIterator (iterator, sdaiINTEGER, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiINTEGER, out val);
sdaiREAL or sdaiNUMBER double val; double val;
sdaiGetAggrByIterator (iterator, sdaiREAL, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiREAL, out val);
sdaiBOOLEAN SdaiBoolean val; bool val;
sdaiGetAggrByIterator (iterator, sdaiBOOLEAN, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiBOOLEAN, out val);
sdaiLOGICAL const TCHAR* val; string val;
sdaiGetAggrByIterator (iterator, sdaiLOGICAL, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiLOGICAL, out val);
sdaiENUM const TCHAR* val; string val;
sdaiGetAggrByIterator (iterator, sdaiENUM, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiENUM, out val);
sdaiBINARY const TCHAR* val; string val;
sdaiGetAggrByIterator (iterator, sdaiBINARY, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiBINARY, out val);
sdaiSTRING const char* val; string val;
sdaiGetAggrByIterator (iterator, sdaiSTRING, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiSTRING, out val);
sdaiUNICODE const wchar_t* val; string val;
sdaiGetAggrByIterator (iterator, sdaiUNICODE, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiUNICODE, out val);
sdaiEXPRESSSTRING const char* val; string val;
sdaiGetAggrByIterator (iterator, sdaiEXPRESSSTRING, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiEXPRESSSTRING, out val);
sdaiINSTANCE SdaiInstance val; int_t val;
sdaiGetAggrByIterator (iterator, sdaiINSTANCE, &val); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiINSTANCE, out val);
sdaiAGGR SdaiAggr aggr; int_t aggr;
sdaiGetAggrByIterator (iterator, sdaiAGGR, &aggr); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiAGGR, out aggr);
sdaiADB SdaiADB adb = sdaiCreateEmptyADB(); int_t adb = IFCEngine.sdaiCreateEmptyADB();
sdaiGetAggrByIterator (iterator, sdaiADB, adb); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiADB, adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
SdaiADB adb = nullptr; int_t adb = 0; // it is important to initialize
sdaiGetAggrByIterator (iterator, sdaiADB, &adb); IFCEngine.sdaiGetAggrByIterator (iterator, IFCEngine.sdaiADB, out adb);
... ...
sdaiDeleteADB (adb); // optional IFCEngine.sdaiDeleteADB (adb); // optional
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 has an option to work without sdaiCreateEmptyADB and sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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
sdaiINTEGER Yes Yes * . . . . . . .
sdaiREAL Yes Yes . . . . . . .
sdaiNUMBER Yes Yes . . . . . . .
sdaiBOOLEAN . . Yes . . . . . .
sdaiLOGICAL . . Yes Yes . . . . .
sdaiENUM . . Yes Yes Yes . . . .
sdaiBINARY . . . . . Yes . . .
sdaiSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiUNICODE Yes Yes Yes Yes Yes Yes Yes . .
sdaiEXPRESSSTRING Yes Yes Yes Yes Yes Yes Yes . .
sdaiINSTANCE . . . . . . . Yes .
sdaiAGGR . . . . . . . . Yes
sdaiADB Yes Yes Yes Yes Yes Yes Yes Yes Yes
(Non-standard extensions) sdaiGetADBValue: sdaiADB is allowed and will success when sdaiGetADBTypePath is not NULL, returning ABD value has type path element removed.
Table 1 – Required value buffer depending on valueType (on the example of sdaiPutAggrByIterator but valid for all put-functions)
valueType C/C++ C#
sdaiINTEGER int_t val = 123; int_t val = 123;
sdaiPutAggrByIterator (iterator, sdaiINTEGER, &val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiPutAggrByIterator (iterator, sdaiREAL, &val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiPutAggrByIterator (iterator, sdaiBOOLEAN, &val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiPutAggrByIterator (iterator, sdaiLOGICAL, val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiPutAggrByIterator (iterator, sdaiENUM, val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiPutAggrByIterator (iterator, sdaiBINARY, val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiPutAggrByIterator (iterator, sdaiSTRING, val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiPutAggrByIterator (iterator, sdaiUNICODE, val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiUNICODE, val);
sdaiEXPRESSSTRING const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\"; string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
sdaiPutAggrByIterator (iterator, sdaiEXPRESSSTRING, val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "IFCSITE"); int_t val = IFCEngine.sdaiCreateInstanceBN (model, "IFCSITE");
sdaiPutAggrByIterator (iterator, sdaiINSTANCE, val); IFCEngine.sdaiPutAggrByIterator (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);
sdaiPutAggrByIterator (iterator, sdaiAGGR, val); IFCEngine.sdaiPutAggrByIterator (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");
sdaiPutAggrByIterator (iterator, sdaiADB, val); IFCEngine.sdaiPutAggrByIterator (iterator, IFCEngine.sdaiADB, val);
... ...
sdaiDeleteADB (val); // optional IFCEngine.sdaiDeleteADB (val); // optional
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 has an option to work without sdaiDeleteADB as shown in the table (all open ADB's will be deleted on model close).
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 .
xxxxGetAttrType(
instance,
sdaiGetAttrDefinition(
sdaiGetInstanceType(
instance
),
attributeName
),
attributeType
);
bit 0: (__KNOWN_ENTITY) entity is defined in the schema
bit 1: (__NO_OF_ARGUMENTS) number of arguments
bit 2: (__ARGUMENT_EXPRESS_TYPE) argument value is correct entity, defined type or enumeration value
bit 3: (__ARGUMENT_PRIM_TYPE) argument value has correct primitive type
bit 4: (__REQUIRED_ARGUMENTS) non-optional arguments values are provided
bit 5: (__ARRGEGATION_EXPECTED) aggregation is provided when expected
bit 6: (__AGGREGATION_NOT_EXPECTED) aggregation is not used when not expected
bit 7: (__AGGREGATION_SIZE) aggregation size
bit 8: (__AGGREGATION_UNIQUE) elements in aggregations are unique when required
bit 9: (__COMPLEX_INSTANCE) complex instances contains full parent chains
bit 10: (__REFERENCE_EXISTS) referenced instance exists
bit 11: (__ABSTRACT_ENTITY) abstract entity should not instantiate
bit 12: (__WHERE_RULE) where-rule check
bit 13: (__UNIQUE_RULE) unique-rule check
bit 14: (__STAR_USAGE) * is used only for derived arguments
bit 15: (__CALL_ARGUMENT) validateModel/validateInstance function argument should be model/instance
bit 63: (__INTERNAL_ERROR) unspecified error
bit 0: (__KNOWN_ENTITY) entity is defined in the schema
bit 1: (__NO_OF_ARGUMENTS) number of arguments
bit 2: (__ARGUMENT_EXPRESS_TYPE) argument value is correct entity, defined type or enumeration value
bit 3: (__ARGUMENT_PRIM_TYPE) argument value has correct primitive type
bit 4: (__REQUIRED_ARGUMENTS) non-optional arguments values are provided
bit 5: (__ARRGEGATION_EXPECTED) aggregation is provided when expected
bit 6: (__AGGREGATION_NOT_EXPECTED) aggregation is not used when not expected
bit 7: (__AGGREGATION_SIZE) aggregation size
bit 8: (__AGGREGATION_UNIQUE) elements in aggregations are unique when required
bit 9: (__COMPLEX_INSTANCE) complex instances contains full parent chains
bit 10: (__REFERENCE_EXISTS) referenced instance exists
bit 11: (__ABSTRACT_ENTITY) abstract entity should not instantiate
bit 12: (__WHERE_RULE) where-rule check
bit 13: (__UNIQUE_RULE) unique-rule check
bit 14: (__STAR_USAGE) * is used only for derived arguments
bit 15: (__CALL_ARGUMENT) validateModel/validateInstance function argument should be model/instance
bit 63: (__INTERNAL_ERROR) unspecified error
value 0: (__NONE) no status set
value 1: (__COMPLETE_ALL) all issues proceed
value 2: (__COMPLETE_NOT_ALL) completed but some issues were excluded by option settings
value 3: (__TIME_EXCEED) validation was finished because of reach time limit
value 4: (__COUNT_EXCEED) validation was finished because of reach of issue's numbers limit
bit 0: (__KNOWN_ENTITY) entity is defined in the schema
bit 1: (__NO_OF_ARGUMENTS) number of arguments
bit 2: (__ARGUMENT_EXPRESS_TYPE) argument value is correct entity, defined type or enumeration value
bit 3: (__ARGUMENT_PRIM_TYPE) argument value has correct primitive type
bit 4: (__REQUIRED_ARGUMENTS) non-optional arguments values are provided
bit 5: (__ARRGEGATION_EXPECTED) aggregation is provided when expected
bit 6: (__AGGREGATION_NOT_EXPECTED) aggregation is not used when not expected
bit 7: (__AGGREGATION_SIZE) aggregation size
bit 8: (__AGGREGATION_UNIQUE) elements in aggregations are unique when required
bit 9: (__COMPLEX_INSTANCE) complex instances contains full parent chains
bit 10: (__REFERENCE_EXISTS) referenced instance exists
bit 11: (__ABSTRACT_ENTITY) abstract entity should not instantiate
bit 12: (__WHERE_RULE) where-rule check
bit 13: (__UNIQUE_RULE) unique-rule check
bit 14: (__STAR_USAGE) * is used only for derived arguments
bit 15: (__CALL_ARGUMENT) validateModel/validateInstance function argument should be model/instance
bit 63: (__INTERNAL_ERROR) unspecified error