# Feature Tree

CAD model are represented by a feature tree.

A model tree is composed by nodes. Each of these nodes is a build step, whose definition parameters are stored in a feature. The following model is defined with construction entities, then a pad, and a hole.

The model trees are accessible through the product occurrence by using the function `A3DAsmProductOccurrenceGet()`, and the function `A3DFRMTreeGet()`will populate the data structure. An array of feature trees is stored in `A3DAsmProductOccurrenceData`, usually there is only one feature tree by model.

    A3DUns32u;
    A3DAsmProductOccurrenceDatasData=A3D_MAKE_DATA(A3DAsmProductOccurrenceData);
    if(A3DAsmProductOccurrenceGet(pOccurrence,&sData)==A3D_SUCCESS)
    {
    for(u=0;u<sData.m_uiFeatureBasedEntitiesSize;++u)
    {
    A3D_INITIALIZE_DATA(A3DFRMTreeData,sTreeData);
    A3DFRMTreeGet(sData.m_ppFeatureBasedEntities[u],&sTreeData);
    //...
    A3DFRMTreeGet(A3D_NULL_HANDLE,&sTreeData);
    }
    A3DAsmProductOccurrenceGet(A3D_NULL_HANDLE,&sData);
    }

In addition, the function `A3DFRMGetSpecificNodes()`allows to directly get a list of features with a specific cad type. For instance, to get all features HOLE defined in the tree. In this case,

    A3DUns32iSize;
    A3DFRMFeature**ppFeatureNodes;
    A3DFRMGetSpecificNodes(pFRMFeatureTree,kA3DFRMEnumValue_CadType_Hole,&iSize,&ppFeatureNodes);
    //...
    A3DFRMGetSpecificNodes(A3D_NULL_HANDLE,kA3DFRMEnumValue_CadType_Hole,&iSize,&ppFeatureNodes);

Note that `A3DFRMTree`object is an abstraction of `A3DRiSet`, so it possible to directly call the function `A3DFRMTreeGet()`on a set

    A3DEEntityTypeeType=kA3DTypeUnknown;
    A3DEntityGetType(pRepresentationItem,&eType);
    if(eType==kA3DTypeRiSet)
    {
    A3DFRMTreeDataoData=A3D_MAKE_DATA(A3DFRMTreeData);
    if(A3DFRMTreeGet(pRepresentationItem,&sTreeData)==A3D_SUCCESS)
    {
    A3DFRMTreeGet(A3D_NULL_HANDLE,&sTreeData);
    }
    else
    {
    //regularRiSet
    }
    }

Parameters

> pTree: The feature tree to query features from.

> eCADType: CAD type of feature (Hole, Pattern, …).

> piSize: The number of feature founds. Corresponds to the size of pppFeatureNodes.

> pppFeatureNodes: An array of size piSize containing the found features (Hole, Pattern, …).

Returns

> `A3D_SUCCESS`on success, or an error code on failure

Structures

- `A3DFRMTreeData`

Enumerations

- `A3DEFRMEnumValue_ModeType`

Functions

- `A3DFRMTreeGet()`
- `A3DFRMGetSpecificNodes()`

Conversation saved
HOOPSY BETA

### Hello! I'm HOOPSY

Your multilingual generative AI assistant for documentation. Ask me anything about HOOPS Exchange in your own language, or choose a sample question below to start a conversation:

What is HOOPS Exchange?
What are the latest release notes for HOOPS Exchange?
How do I start evaluating HOOPS Exchange?
How do I write my first sample application?
How can I get assistance?

HOOPSY may store conversations according to OpenAI's policy. Responses may not always be accurate.

HOOPSY is thinking...