:orphan:

###################
Autodesk 3DS Reader
###################

.. rst-class:: format-title-block

+--------------------------------------------------------------------------+
|                        **3DS**                                           |
+-----------------------------------------+--------------------------------+
| **File Extension**                      | 3DS                            |
+-----------------------------------------+--------------------------------+
| **Supported Versions**                  | Any                            |
+-----------------------------------------+--------------------------------+
| **Platforms**                           | |wy| |ly| |my| |an| |iy|       |             
+-----------------------------------------+--------------------------------+
| **Tessellation**                        | |t_green| Supported            |
+-----------------------------------------+--------------------------------+
| :ref:`3ds_rd_brep`                      | |c_grey| Unsupported by format |
+-----------------------------------------+--------------------------------+
| **PMI**                                 | |c_grey| Unsupported by format |
+-----------------------------------------+--------------------------------+

3DS is a binary 3D file format provided by Autodesk. The typical 3DS file extension is `.3ds`.

How to Import From 3DS
======================

Reading ``Autodesk 3DS`` files follows the same pattern as other formats: configure load parameters, then call the standard load function.

To load a 3DS file, use :cpp:func:`A3DAsmModelFileLoadFromFile`.

The :cpp:struct:`A3DParamsLoadData` structure is used to customize the loading behavior:

.. code-block:: c

   A3DAsmModelFile* pModelFile = 0;

   A3DRWParamsLoadData sReadParam;
   A3D_INITIALIZE_DATA(A3DRWParamsLoadData, sReadParam);
   sReadParam.m_sGeneral.m_bReadSolids = true;

   // ... set other A3DRWParamsLoadData fields as necessary

   A3DAsmModelFileLoadFromFile("path/to/file.3ds", &sReadParam, &pModelFile);

See :doc:`/guide/basic_operations/load_model` for more about loading model files.

If you need more detail about the load parameters, see :ref:`import_params_reference`. 

For guidance on working with tessellation, consult :ref:`extracting_tessellation`.

.. _3ds_rd_brep:

Boundary Representation (B-rep)
===============================

As noted in the above table, 3DS is a tessellation-only format. 
Consequently, other data such as Product Manufacturing Information (PMI) and Boundary Representation (B-rep) are not supported by the format, 
including when using 3DS with HOOPS Exchange.

Format-Specific Notes
=====================

********
Assembly
********

The 3DS extension is a simple 3D format. 
As such, complex assembly structures are not supported.

********
Textures
********

Textures are fully supported when parsing 3DS files.

In 3DS files, texture filenames follow these conventions:

   * Limited to 12 characters
   * Stored without the folder path
   * Typically capitalized

As a result, the texture name stored in the file may differ from the actual texture file to be loaded.

During import, HOOPS Exchange searches for a corresponding texture by comparing truncated and 
capitalized versions of the filenames found in the search folders. 
It will use the first match it encounters.

The search folders are in the following order:

* The parent folder of the 3DS file
* The folders specified in :member:`A3DRWParamsGeneralData.m_ppcSearchTextureDirectories`

*********************
3DS and Default Units
*********************

The default measurement unit differs between the 3DS and PRC file formats; 3DS uses inches, whereas PRC uses millimeters. 
Consequently, the values are converted when the file is read by HOOPS Exchange.
