sdaiGetAttr
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); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiINTEGER, out val);
sdaiREAL or sdaiNUMBER double val; double val;
sdaiGetAttr (instance, attribute, sdaiREAL, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiREAL, out val);
sdaiBOOLEAN SdaiBoolean val; bool val;
sdaiGetAttr (instance, attribute, sdaiBOOLEAN, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiBOOLEAN, out val);
sdaiLOGICAL const TCHAR* val; string val;
sdaiGetAttr (instance, attribute, sdaiLOGICAL, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiLOGICAL, out val);
sdaiENUM const TCHAR* val; string val;
sdaiGetAttr (instance, attribute, sdaiENUM, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiENUM, out val);
sdaiBINARY const TCHAR* val; string val;
sdaiGetAttr (instance, attribute, sdaiBINARY, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiBINARY, out val);
sdaiSTRING const char* val; string val;
sdaiGetAttr (instance, attribute, sdaiSTRING, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiSTRING, out val);
sdaiUNICODE const wchar_t* val; string val;
sdaiGetAttr (instance, attribute, sdaiUNICODE, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiUNICODE, out val);
sdaiEXPRESSSTRING const char* val; string val;
sdaiGetAttr (instance, attribute, sdaiEXPRESSSTRING, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiEXPRESSSTRING, out val);
sdaiINSTANCE SdaiInstance val; int_t val;
sdaiGetAttr (instance, attribute, sdaiINSTANCE, &val); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiINSTANCE, out val);
sdaiAGGR SdaiAggr aggr; int_t aggr;
sdaiGetAttr (instance, attribute, sdaiAGGR, &aggr); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiAGGR, out aggr);
sdaiADB SdaiADB adb = sdaiCreateEmptyADB(); int_t adb = 0; // it is important to initialize
sdaiGetAttr (instance, attribute, sdaiADB, adb); stepengine.sdaiGetAttr (instance, attribute, stepengine.sdaiADB, out adb);
sdaiDeleteADB (adb);
SdaiADB adb = nullptr; // it is important to initialize
sdaiGetAttr (instance, attribute, sdaiADB, &adb);
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 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 .
Note: sdaiGetAttr, stdaiGetAttrBN, engiGetElement will success with any model data, except non-set($)
(Non-standard extensions) sdaiGetADBValue: sdaiADB is allowed and will success when sdaiGetADBTypePath is not NULL, returning ABD value has type path element removed.
Syntax
public const string enginedll = @"engine.dll"; [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x86_sdaiGetAttr(Int32 instance, Int32 attribute, Int32 valueType, out bool value); [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x64_sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out bool value); public static Int32 sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out bool value) { if (IntPtr.Size == 4) { var _result = x86_sdaiGetAttr((Int32)instance, (Int32)attribute, (Int32)valueType, out bool _value); value = _value; return _result; } else { return x64_sdaiGetAttr(instance, attribute, valueType, out value); } } [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x86_sdaiGetAttr(Int32 instance, Int32 attribute, Int32 valueType, out Int32 value); [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x64_sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out Int64 value); public static Int32 sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out Int64 value) { if (IntPtr.Size == 4) { var _result = x86_sdaiGetAttr((Int32)instance, (Int32)attribute, (Int32)valueType, out Int32 _value); value = _value; return _result; } else { return x64_sdaiGetAttr(instance, attribute, valueType, out value); } } [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x86_sdaiGetAttr(Int32 instance, Int32 attribute, Int32 valueType, out double value); [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x64_sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out double value); public static Int32 sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out double value) { if (IntPtr.Size == 4) { var _result = x86_sdaiGetAttr((Int32)instance, (Int32)attribute, (Int32)valueType, out double _value); value = _value; return _result; } else { return x64_sdaiGetAttr(instance, attribute, valueType, out value); } } [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x86_sdaiGetAttr(Int32 instance, Int32 attribute, Int32 valueType, out IntPtr value); [DllImport(enginedll, EntryPoint = "sdaiGetAttr")] public static extern Int32 x64_sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out IntPtr value); public static Int32 sdaiGetAttr(Int64 instance, Int64 attribute, Int64 valueType, out IntPtr value) { if (IntPtr.Size == 4) { var _result = x86_sdaiGetAttr((Int32)instance, (Int32)attribute, (Int32)valueType, out IntPtr _value); value = _value; return _result; } else { return x64_sdaiGetAttr(instance, attribute, valueType, out value); } }
Property instance
Size: 32 bit / 4 byte (value)Property attribute
Size: 32 bit / 4 byte (reference)Property valueType
Size: 32 bit / 4 byte (value)Property value
Size: 32 bit / 4 byte (reference)
Example (based on pure API calls)
Here you can find code snippits that show how the API call sdaiGetAttr can be used.
using RDF; // include at least engine.cs within your solution Int64 localGetAttrBN(Int64 instance, byte[] attributeName, Int64 valueType, out Int64 value) { // // This function is an alternative to the API call sdaiGetAttrBN() // based on sdaiGetAttr(). // // Use of sdaiGetAttr() can lead to performance improvement compared to sdaiGetAttrBN(). // Int64 instanceType = ifcengine.sdaiGetInstanceType(instance), attribute = ifcengine.sdaiGetAttrDefinition(instanceType, attributeName); return ifcengine.sdaiGetAttr(instance, attribute, valueType, out value); } Int64 localGetAttrBN(Int64 instance, byte[] attributeName, Int64 valueType, out double value) { // // This function is an alternative to the API call sdaiGetAttrBN() // based on sdaiGetAttr(). // // Use of sdaiGetAttr() can lead to performance improvement compared to sdaiGetAttrBN(). // Int64 instanceType = ifcengine.sdaiGetInstanceType(instance), attribute = ifcengine.sdaiGetAttrDefinition(instanceType, attributeName); return ifcengine.sdaiGetAttr(instance, attribute, valueType, out value); } Int64 localGetAttrBN(Int64 instance, byte[] attributeName, Int64 valueType, out IntPtr value) { // // This function is an alternative to the API call sdaiGetAttrBN() // based on sdaiGetAttr(). // // Use of sdaiGetAttr() can lead to performance improvement compared to sdaiGetAttrBN(). // Int64 instanceType = ifcengine.sdaiGetInstanceType(instance), attribute = ifcengine.sdaiGetAttrDefinition(instanceType, attributeName); return ifcengine.sdaiGetAttr(instance, attribute, valueType, out value); }