sdaiPutAttr
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); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiINTEGER, ref val);
sdaiREAL or sdaiNUMBER double val = 123.456; double val = 123.456;
sdaiPutAttr (instance, attribute, sdaiREAL, &val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiREAL, ref val);
sdaiBOOLEAN SdaiBoolean val = sdaiTRUE; bool val = true;
sdaiPutAttr (instance, attribute, sdaiBOOLEAN, &val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiBOOLEAN, ref val);
sdaiLOGICAL const TCHAR* val = "U"; string val = "U";
sdaiPutAttr (instance, attribute, sdaiLOGICAL, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiLOGICAL, val);
sdaiENUM const TCHAR* val = "NOTDEFINED"; string val = "NOTDEFINED";
sdaiPutAttr (instance, attribute, sdaiENUM, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiENUM, val);
sdaiBINARY const TCHAR* val = "0123456ABC"; string val = "0123456ABC";
sdaiPutAttr (instance, attribute, sdaiBINARY, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiBINARY, val);
sdaiSTRING const char* val = "My Simple String"; string val = "My Simple String";
sdaiPutAttr (instance, attribute, sdaiSTRING, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiSTRING, val);
sdaiUNICODE const wchar_t* val = L"Any Unicode String"; string val = "Any Unicode String";
sdaiPutAttr (instance, attribute, sdaiUNICODE, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.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); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiEXPRESSSTRING, val);
sdaiINSTANCE SdaiInstance val = sdaiCreateInstanceBN (model, "PRODUCT"); int_t val = stepengine.sdaiCreateInstanceBN (model, "PRODUCT");
sdaiPutAttr (instance, attribute, sdaiINSTANCE, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiINSTANCE, val);
sdaiAGGR SdaiAggr val = sdaiCreateAggr (inst, 0); int_t val = sdaiCreateAggr (inst, 0);
sdaiPutAttr (val, sdaiINSTANCE, inst); stepengine.sdaiPutAttr (val, stepengine.sdaiINSTANCE, inst);
sdaiPutAttr (instance, attribute, sdaiAGGR, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiAGGR, val);
sdaiADB int_t integerValue = 123; int_t integerValue = 123;
SdaiADB val = sdaiCreateADB (sdaiINTEGER, &integerValue); int_t val = ifcengine.sdaiCreateADB (stepengine.sdaiINTEGER, ref integerValue);
sdaiPutADBTypePath (val, 1, "INTEGER"); stepengine.sdaiPutADBTypePath (val, 1, "INTEGER");
sdaiPutAttr (instance, attribute, sdaiADB, val); stepengine.sdaiPutAttr (instance, attribute, stepengine.sdaiADB, val);
sdaiDeleteADB (val); stepengine.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 .
Syntax
public const string enginedll = @"engine.dll"; [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x86_sdaiPutAttr(Int32 instance, Int32 attribute, Int32 valueType, ref bool value); [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x64_sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref bool value); public static void sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref bool value) { if (IntPtr.Size == 4) { bool _value = (bool)value; x86_sdaiPutAttr((Int32)instance, (Int32)attribute, (Int32)valueType, ref _value); value = _value; } else { x64_sdaiPutAttr(instance, attribute, valueType, ref value); } } [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x86_sdaiPutAttr(Int32 instance, Int32 attribute, Int32 valueType, ref Int32 value); [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x64_sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref Int64 value); public static void sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref Int64 value) { if (IntPtr.Size == 4) { Int32 _value = (Int32)value; x86_sdaiPutAttr((Int32)instance, (Int32)attribute, (Int32)valueType, ref _value); value = _value; } else { x64_sdaiPutAttr(instance, attribute, valueType, ref value); } } [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x86_sdaiPutAttr(Int32 instance, Int32 attribute, Int32 valueType, Int32 value); [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x64_sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, Int64 value); public static void sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, Int64 value) { if (IntPtr.Size == 4) { x86_sdaiPutAttr((Int32)instance, (Int32)attribute, (Int32)valueType, (Int32)value); } else { x64_sdaiPutAttr(instance, attribute, valueType, value); } } [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x86_sdaiPutAttr(Int32 instance, Int32 attribute, Int32 valueType, ref double value); [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x64_sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref double value); public static void sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref double value) { if (IntPtr.Size == 4) { double _value = (double)value; x86_sdaiPutAttr((Int32)instance, (Int32)attribute, (Int32)valueType, ref _value); value = _value; } else { x64_sdaiPutAttr(instance, attribute, valueType, ref value); } } [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x86_sdaiPutAttr(Int32 instance, Int32 attribute, Int32 valueType, ref IntPtr value); [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x64_sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref IntPtr value); public static void sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, ref IntPtr value) { if (IntPtr.Size == 4) { IntPtr _value = (IntPtr)value; x86_sdaiPutAttr((Int32)instance, (Int32)attribute, (Int32)valueType, ref _value); value = _value; } else { x64_sdaiPutAttr(instance, attribute, valueType, ref value); } } [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x86_sdaiPutAttr(Int32 instance, Int32 attribute, Int32 valueType, byte[] value); [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x64_sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, byte[] value); public static void sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, byte[] value) { if (IntPtr.Size == 4) { x86_sdaiPutAttr((Int32)instance, (Int32)attribute, (Int32)valueType, value); } else { x64_sdaiPutAttr(instance, attribute, valueType, value); } } [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x86_sdaiPutAttr(Int32 instance, Int32 attribute, Int32 valueType, string value); [DllImport(enginedll, EntryPoint = "sdaiPutAttr")] public static extern void x64_sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, string value); public static void sdaiPutAttr(Int64 instance, Int64 attribute, Int64 valueType, string value) { if (IntPtr.Size == 4) { x86_sdaiPutAttr((Int32)instance, (Int32)attribute, (Int32)valueType, value); } else { x64_sdaiPutAttr(instance, attribute, valueType, value); } }
Property instance
Size: 64 bit / 8 byte (value)Property attribute
Size: 64 bit / 8 byte (reference)Property valueType
Size: 64 bit / 8 byte (value)Property value
Size: 64 bit / 8 byte (reference)
Example (based on pure API calls)
Here you can find code snippits that show how the API call sdaiPutAttr can be used.
using RDF; // include at least engine.cs within your solution void localPutAttrBN(Int64 instance, string attributeName, double value) { // // This function is an alternative to the API call sdaiCreateAggrBN() // based on sdaiCreateAggr(). // // Use of sdaiCreateAggr() can lead to performance improvement compared to sdaiCreateAggrBN(). // Int64 instanceType = ifcengine.sdaiGetInstanceType(instance), attribute = ifcengine.sdaiGetAttrDefinition(instanceType, attributeName); ifcengine.sdaiPutAttr(instance, attribute, ifcengine.sdaiREAL, ref value); }