sdaiGetEntity

This call retrieves a handle to an entity based on a given entity name.

Syntax

public const string IFCEngineDLL = @"IFCEngine.dll";

[DllImport(IFCEngineDLL, EntryPoint = "sdaiGetEntity")]
public static extern Int64 sdaiGetEntity(Int64 model, string entityName);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiGetEntity")]
public static extern Int64 sdaiGetEntity(Int64 model, byte[] entityName);    

Property model

Size: 64 bit / 8 byte (value)
Handle of the model containing the IFC file, this handle is needed in many other calls and given when the model is created.

Property entityName

Size: 64 bit / 8 byte (reference)
Name of the entity (schema item/class), for example IFCWALLSTANDARDCASE as defined in IFC4.exp.

Examples

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

void GetInstanceProperties(Int64 model, Int64 ifcColumnInstance)
{
    Int64 isDefinedByInstances = 0,
          ifcRelDefinesByType_TYPE = IfcEngine.x64.sdaiGetEntity(model, System.Text.Encoding.UTF8.GetBytes("IFCRELDEFINESBYTYPE")),
          ifcRelDefinesByProperties_TYPE = IfcEngine.x64.sdaiGetEntity(model, System.Text.Encoding.UTF8.GetBytes("IFCRELDEFINESBYPROPERTIES"));
    IfcEngine.x64.sdaiGetAttrBN(ifcColumnInstance, System.Text.Encoding.UTF8.GetBytes("IsDefinedBy"), IfcEngine.x64.sdaiAGGR, out isDefinedByInstances);

    if (isDefinedByInstances != 0)
    {
        Int64 typeCnt = 0,
                isDefinedByInstancesCnt = IfcEngine.x64.sdaiGetMemberCount(isDefinedByInstances);
        for (Int64 i = 0; i < isDefinedByInstancesCnt; i++) {
            Int64 isDefinedByInstance = 0;
            IfcEngine.x64.engiGetAggrElement(isDefinedByInstances, i, IfcEngine.x64.sdaiINSTANCE, out isDefinedByInstance);

            if  (IfcEngine.x64.sdaiGetInstanceType(isDefinedByInstance) == ifcRelDefinesByType_TYPE) {
                ...
            } else if  (IfcEngine.x64.sdaiGetInstanceType(isDefinedByInstance) == ifcRelDefinesByProperties_TYPE) {
                ...
            } else {
                ...
            }
        }
    }
}

void GetColumns(Int64 model)
{
    Int64 ifcColumnInstances = IfcEngine.x64.sdaiGetEntityExtentBN(model, System.Text.Encoding.UTF8.GetBytes("IFCCOLUMN")),
          noIfcColumnInstances = IfcEngine.x64.sdaiGetMemberCount(ifcColumnInstances);
    if (noIfcColumnInstances != 0)
    {
        for (Int64 i = 0; i < noIfcColumnInstances; i++)
        {
            Int64 ifcColumnInstance = 0;
            IfcEngine.x64.engiGetAggrElement(ifcColumnInstances, i, IfcEngine.x64.sdaiINSTANCE, out ifcColumnInstance);

            GetInstanceProperties(model, ifcColumnInstance);
        }
    }
}