sdaiCreateAggrBN

This call creates an aggregation. The instance has to be present, the attributeName argument can be NULL (0) in case the aggregation is an nested aggregation for this specific instance, prefered use would be use of sdaiCreateNestedAggr in such a case. Technically sdaiCreateAggrBN will transform into the following call

    (attributeName) ?
        sdaiCreateAggr(
                instance,
                sdaiGetAttrDefinition(
                        sdaiGetInstanceType(
                                instance
                            ),
                        attributeName
                    )
            ) :
        sdaiCreateAggr(
                instance,
                nullptr
            );

Syntax

public const string ifcenginedll = @"ifcengine.dll";

[DllImport(IFCEngineDLL, EntryPoint = "sdaiCreateAggrBN")]
public static extern Int32 sdaiCreateAggrBN(int_t instance, string attributeName);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiCreateAggrBN")]
public static extern Int32 sdaiCreateAggrBN(int_t instance, byte[] attributeName);    

Property instance

Size: 32 bit / 4 byte (value)
...

Property attributeName

Size: 32 bit / 4 byte (reference)
...

Example (based on pure API calls)

Here you can find code snippits that show how the API call sdaiCreateAggrBN can be used.

using RDF;      //  include at least engine.cs within your solution

//
//  Created result when stored as IFC:
//  #31313 = IFCPOSTALADDRESS($, $, $, $, ('RDF Ltd.', 'Main Office'), '32', 'Bankya', 'Sofia', '1320', 'Bulgaria');
//
Int64 ifcPostalAddressInstance = IfcEngine.x64.sdaiCreateInstanceBN(model, System.Text.Encoding.UTF8.GetBytes("IFCPOSTALADDRESS"));

Int64 addressLines = IfcEngine.x64.sdaiCreateAggrBN(ifcPostalAddressInstance, System.Text.Encoding.UTF8.GetBytes("AddressLines"));
IfcEngine.x64.sdaiAppend(addressLines, IfcEngine.x64.sdaiSTRING, System.Text.Encoding.UTF8.GetBytes("RDF Ltd."));
IfcEngine.x64.sdaiAppend(addressLines, IfcEngine.x64.sdaiSTRING, System.Text.Encoding.UTF8.GetBytes("Main Office"));

IfcEngine.x64.sdaiPutAttrBN(ifcPostalAddressInstance, System.Text.Encoding.UTF8.GetBytes("PostalBox"), IfcEngine.x64.sdaiSTRING, System.Text.Encoding.UTF8.GetBytes("32"));
IfcEngine.x64.sdaiPutAttrBN(ifcPostalAddressInstance, System.Text.Encoding.UTF8.GetBytes("Town"), IfcEngine.x64.sdaiSTRING, System.Text.Encoding.UTF8.GetBytes("Bankya"));
IfcEngine.x64.sdaiPutAttrBN(ifcPostalAddressInstance, System.Text.Encoding.UTF8.GetBytes("Region"), IfcEngine.x64.sdaiSTRING, System.Text.Encoding.UTF8.GetBytes("Sofia"));         //  It is allowed to mix sdaiUNICODE and sdaiSTRING
IfcEngine.x64.sdaiPutAttrBN(ifcPostalAddressInstance, System.Text.Encoding.UTF8.GetBytes("PostalCode"), IfcEngine.x64.sdaiUNICODE, System.Text.Encoding.Unicode.GetBytes("1320"));  //  as long as each call is consitent in itself.
IfcEngine.x64.sdaiPutAttrBN(ifcPostalAddressInstance, System.Text.Encoding.UTF8.GetBytes("Country"), IfcEngine.x64.sdaiSTRING, System.Text.Encoding.UTF8.GetBytes("Bulgaria"));