.. _group__a3d__feature__structure__module:

#########
Structure
#########

The feature structure allows to store information with various levels of complexity. 

The hierarchy structures the data from a simple double/integer storage to a CAD feature information. It contains different types of sub-features grouped under feature parameters, depending of its family type. The family type (m_eFamily) specifies the way to interpret the type (m_uiType) as an enumeration value.

The following table shows the correspondence between the family type and the associated enum; and the expected data structure defined below.

**Feature type**

**Family**  \| **Corresponding enum**  \| **Description** 


- Information  \|  \| 
- Type  \| :c:enum:`~A3DEFRMEnumDataType`  \| Store a value of an enumeration (CAD type, depth type, ...) 
  
   
- Double Data, 
  Integer Data, 
  String Data  \| :c:enum:`~A3DEFRMDoubleDataType`\ , 
   :c:enum:`~A3DEFRMIntegerDataType`\ , 
   :c:enum:`~A3DEFRMStringDataType`  \| Type of double data (unit, offset, diameter, ...)
  
   
- Value  \| :c:enum:`~A3DEFRMValueType`  \| Type of complex feature (Vector, Depth, ...)
  
   
- Definition  \| :c:enum:`~A3DEFRMDefinitionType`  \| Type of complex feature (Vector, Depth, ...)
  
   
- Definition Hole, 
  Definition Pattern  \| :c:enum:`~A3DEFRMDefinitionHoleType`\ , 
   :c:enum:`~A3DEFRMDefinitionPatternType`  \| Type of complex feature defining a hole (counter sunk, counter bore, ...) or pattern
  
   
- Feature Definition  \| :c:enum:`~A3DEFRMFeatureDefinitionType`  \| Store an information specific to a CAD feature (hole, pattern, extrusion, definition)
  
   
- Root  \| :c:enum:`~A3DEFRMRoot`  \| Corresponds to the CAD node 
  
   

**Parameters**


   **pFeature**\ : feature pointer 

   **pData**\ : feature data


**Returns**


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


.. rst-class:: kind-group kind-topic

.. rubric:: Topics
   :class: kind-group-title


.. rst-class:: api-xref-list


* :ref:`Type and Specification <group__a3d__feature__type__module>`
* :ref:`Connection <group__a3d__feature__link__module>`
* :ref:`Data <group__a3d__feature__data__module>`

.. rst-class:: kind-group kind-record

.. rubric:: Structures
   :class: kind-group-title


.. rst-class:: api-xref-list


* :c:struct:`~A3DFRMFeatureData`
* :c:struct:`~A3DFRMGeomEntitiesData`

.. rst-class:: kind-group kind-function

.. rubric:: Functions
   :class: kind-group-title


.. rst-class:: api-xref-list


* :c:func:`~A3DFRMFeatureGet`
* :c:func:`~A3DFRMGeomEntitiesExtract`

.. toctree::
   :maxdepth: 1
   :hidden:

   a3d_feature_type_module
   a3d_feature_link_module
   a3d_feature_data_module
   ../structures/A3DFRMFeatureData
   ../structures/A3DFRMGeomEntitiesData
   ../functions/A3DFRMFeatureGet
   ../functions/A3DFRMGeomEntitiesExtract


