:orphan:

#########
JT Reader
#########

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

+----------------------------------------------------------------------+
|                        **JT**                                        |
+-----------------------------------------+----------------------------+
| **File Extension**                      | JT                         |
+-----------------------------------------+----------------------------+
| **Supported Versions**                  | Up to v10.10               |
+-----------------------------------------+----------------------------+
| **Platforms**                           | |wy| |ly| |my| |ay| |iy|   | 
+-----------------------------------------+----------------------------+
| :ref:`jt_rd_tessellation`               | |t_green| Supported        | 
+-----------------------------------------+----------------------------+
| :ref:`jt_rd_brep`                       | |c_green| Supported        | 
+-----------------------------------------+----------------------------+
| :ref:`jt_rd_pmi`                        | |c_green| Supported        | 
+-----------------------------------------+----------------------------+

JT is a lightweight 3D data format used to store product structure, tessellated data, 
and optional exact geometry for visualization and collaboration.

The JT Reader provides full access to the Assembly, Visualization, B-rep and View & PMI Data 
stored within a particular JT file. 

A file does not need to have a particular extension to be read correctly by HOOPS Exchange. 
However, the file extension of JT files that you can expect to be loaded by HOOPS Exchange is:

* `.JT`

How to Import From JT 
=====================

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

To load a JT 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_MAKE_DATA(A3DRWParamsLoadData);
   sReadParam.m_sGeneral.m_bReadSolids = true;

   // ... set other A3DRWParamsLoadData fields as necessary

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

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

.. _jt_rd_tessellation: 

Tessellation
============

We fully support the loading of tessellated objects from a JT file. 
HOOPS Exchange can load the different LODs and the developer instructs HOOPS Exchange which LOD to 
load via the "level of detail" reading option. 
Support is provided for tessellated wireframes and point clouds.

HOOPS Exchange also handles *Primitive Set Shape*.
These are boxes, cylinders, pyramids, spheres, and prisms stored in the file with the minimum data 
necessary to procedurally generate them.

.. _jt_rd_brep: 

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

A JT file can contain three different types of B-rep data, all of which are supported by HOOPS Exchange: 
Parasolid B-rep, JT B-rep, and ULP (Ultra-Lightweight Precise) B-rep. 
However, our JT reader does not support ULP B-rep for JT 10 files.

The JT B-rep is relatively simple and only supports geometry in NURBS form. 
The only types of surface and curve geometry that can be found in a JT B-rep include:

* B-spline surface
* MCS (3D) curves
* PCS (2D) curves

The Parasolid B-rep is not restricted and can be anything from the official Parasolid B-rep. 

The geometry available is also listed in the Parasolid section, but for completeness it is included here. 
The list of surface types available in Parasolid B-rep include:

* Blend surface
* B-spline surface
* Cone
* Cylinder
* Offset surface
* Plane
* Sphere
* Revolution surface
* Swept surface
* Torus

The list of curve types available in Parasolid B-rep is:

* B-spline
* Circle
* Ellipse
* Intersection curve
* Line
* UV Curve

.. _jt_rd_pmi: 

Product and Manufacturing Information (PMI)
=======================================

The JT reader provides access to the PMI information to the full extent of the JT specification. 
HOOPS Exchange is able to retrieve the link between PMI data and the geometry.

The different PMI types available in JT are:

* Datum
* Datum target
* Dimension
* Line weld
* Spot weld
* Surface finish
* Measurement point
* Locator
* Reference geometry
* Design group
* Feature control frame
* Coordinate system
* Note

The JT ISO standard supports tessellated PMI, with semantic PMI information attached as attributes.
The JT reader doesn't interpret this data, but exposes them as it is:

* Markups with tessellation from the JT file, with ``ModellerAttributes`` for the raw semantic information

Assembly
========

The assembly can be defined in a series of files or in a single monolithic file. 
Full support for the layer and filter information is included. 

Incremental load is supported by our JT reader, even with monolithic JT files. 
This excludes metadata.

Views
=====

Full support for views, including the visibilities of objects associated to views.

Miscellaneous
=============

All the properties and meta-data contained in a file are exposed to the user.

Advanced Publish
****************

Advanced Publish is an authoring SDK within HOOPS Exchange that enables creation and export of rich engineering data using the PRC data model. 
It supports generating output for several supported formats through file import or API-based authoring.

Please note that the JT file format is only available to define the 3D model in Advanced Publish.

For more information about using Advanced Publish with this file format, refer to the Advanced Publish section of the Programming Guide :doc:`here </guide/publish/overview>`.

JT-specific Import Options
**************************

None

Limitations
***********

Our JT reader has the following limitations:

* No support of Ultra Lightweight Precise (ULP) B-rep in JT 10. This is a lossy, compressed B-rep that Siemens introduced recently.
* No support of LightWeight Precise Analytic (LWPA) data.
* No support of wireframes stored as splines (but we support tessellated/polyline wireframes).
* No support for advanced graphics including textures, lights and shaders.
* No support for section planes.
