##############################################
Approximating Curves and Surfaces as Analytics
##############################################

HOOPS Exchange contains functionality to allow curves and surfaces to be approximated as analytics to facilitate detection and computation of geometric entities.
You specify the tolerance value for which an analytic will be recognized from `A3DCrvBase*` or `A3DSurfBase*`.
HOOPS Exchange will then either identify or change those curves into analytics.
The operation works on either the file or entity level.

Recognized analytics include:

* Cones
* Cylinders
* Planes
* Spheres
* Tori
* Lines
* Circles

Several different functions are available to make this computation:

+-------------------------------------+--------------------------------------------------------------------------------------------------------------+
| Function name                       | Description                                                                                                  |
+=====================================+==============================================================================================================+
| `A3DSimplifyModelFileWithAnalytics` | Attempts to simplify and replace all curves and surfaces in a model file as analytics, based on a tolerance. |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------+
| `A3DSimplifyCurveWithAnalytics`     | Attempts to simplify a single curve as an analytic entity, based on a                                        |
|                                     | tolerance. Newly created analytics must be deleted by user. The types of                                     |
|                                     | curves can optionally be limited by using the pOptRecognizedType                                             |
|                                     | parameter.                                                                                                   |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------+
| `A3DSimplifySurfaceWithAnalytics`   | Attempts to simplify a single surface as an analytic entity, based on a                                      |
|                                     | tolerance. Newly created analytics must be deleted by user. The types of                                     |
|                                     | surfaces can optionally be limited by using the pOptRecognizedType                                           |
|                                     | parameter.                                                                                                   |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------+

Possible values for `A3DAnalyticType`:

.. code-block:: c

   typedef enum {
           kA3DAnalyticNone,
           kA3DAnalyticCircle,
           kA3DAnalyticAlreadyCircle,
           kA3DAnalyticLine,
           kA3DAnalyticAlreadyLine,

           kA3DAnalyticCone,
           kA3DAnalyticAlreadyCone,
           kA3DAnalyticCylinder,
           kA3DAnalyticAlreadyCylinder,
           kA3DAnalyticPlane,
           kA3DAnalyticAlreadyPlane,
           kA3DAnalyticSphere,
           kA3DAnalyticAlreadySphere,
           kA3DAnalyticTorus,
           kA3DAnalyticAlreadyTorus
   } A3DEAnalyticType;


