Occurrences and Component Definitions

Top  Previous  Next

An occurrence is like an XREF insert in AutoCAD. Occurrences exist, for example, inside assemblies. It is an instance of a part. The diagram below shows that an assembly has inside it an AssemblyComponentDefinition, and inside that is a list of occurrences (among ther things):

 

Parts-and-constraints-in-an-Assembly

 

Here is some code to list the occurrences in an assembly:

 

// Get assembly component definition

CComPtr<AssemblyComponentDefinition> pAssemblyCompDef;

HRESULT Result = pAssemblyDoc->get_ComponentDefinition(&pAssemblyCompDef);

 

// Get the ComponentOccurrences collection for the assembly document

CComPtr<ComponentOccurrences> pOccs;

Result = pAssemblyCompDef->get_Occurrences(&pOccs);

 

long lNoOccs; 

Result = pOccs->get_Count(&lNoOccs);

 

TRACE("There are %d occurrences\n",lNoOccs);

 

//iterate through the current level of occurrences

long lOccCount;

for (lOccCount=1; lOccCount <= lNoOccs; ++lOccCount) {

 

    // Get the nth occurrence...

    CComPtr<ComponentOccurrence> pCompOcc;

    Result = pOccs->get_Item(lOccCount, & pCompOcc);

 

    //get the display name from the component occurrence

    CComBSTR bstrDisplayName;

    Result = pCompOcc->get_Name(&bstrDisplayName);

    TRACE("Component occurrence %02d <%s>\n",lOccCount,bstrDisplayName);

 

    // See if there are any other occurrences below the current one...

    CComPtr<ComponentOccurrencesEnumerator> pEnumOccurrences;

    Result = pCompOcc->get_SubOccurrences(&pEnumOccurrences);

 

    if (SUCCEEDED(Result) && (pEnumOccurrences->Count > 0))  {

        TRACE("   has %d sub occurrences\n",pEnumOccurrences->Count) ;

    }

}

 

I've not placed any error checking in the previous code.

 

How to get the name of an occurrence.

 

 

 

 

Text, images and diagrams © 2021 Owen F. Ransen. All rights reserved. (But copy the source code as much as you want!)