
###############
A3DTessFaceData
###############

.. c:struct:: A3DTessFaceData

   Structure that describes basic entities of a face in a solid or surface mesh representations. 
   
   
      2.0
   
   
   
   In the context of solid or surface mesh representations, an entity can be any number of triangles. If more than one, they maybe organized as a fan or strip.
   
   The :c:member:`m_uiStyleIndexesSize <A3DTessFaceData.m_uiStyleIndexesSize>` member has these values: 
   
   
   - 0 indicates that there are no graphics (in this case, all graphics are inherited from the owner (parent) of the :c:struct:`~A3DTess3DData`\ ). 
   - 1 indicates that one graphic is associated with the face. 
   - Greater than 1 indicates that the number of graphics is linked to the number of entities in the :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>` member.
   
   
   Wireframe representation
   ========================
   
   The following :c:struct:`~A3DTessFaceData` members are used to describe a wireframe representation: 
   
   
   - :c:member:`m_uiStartWire <A3DTessFaceData.m_uiStartWire>` : The starting index for the wire in the array of point indexes of the :c:struct:`~A3DTess3DData`\ . 
   - :c:member:`m_puiSizesWires <A3DTessFaceData.m_puiSizesWires>` : Array of the number of indexes for each wire edge of the face, where the number of indexes is OR'd with the relevant flags :c:macro:`~kA3DTessFaceDataWireIsNotDrawn` and/or :c:macro:`~kA3DTessFaceDataWireIsClosing`\ .
   
   
   Consider an example of an :c:struct:`~A3DTessFaceData` structure in which both loops describe closed wire edges: 
   
   
   
   - First edge has 16 points (``0x10``\ ).
   - Second edge has 32 points (``0x20``\ ). 
   
   - First loop consists of two wire edges:
   - Second loop is one edge having 18 points (``0x12``\ ).
   
   
   For this example, the :c:member:`m_puiSizesWires <A3DTessFaceData.m_puiSizesWires>` array has these entries: ``[0x0010, 0x8020, 0x8012]``\ . The second and third array entries are the number of edges OR'd with the :c:macro:`~kA3DTessFaceDataWireIsClosing` (0x8000). Notice that the indexes for each edge's extremity are always stored. Therefore, the last point of the first edge is followed by the first point of the second edge.
   
   
      In an :c:struct:`~A3DTessFaceData` structure, the size of a wire edge is limited to ``16383`` (``0x3FFF``\ ) points.
   
   
   
   
   Solid representation
   ====================
   
   The following :c:struct:`~A3DTessFaceData` members are for solid representations: 
   
   
   - :c:member:`m_usUsedEntitiesFlags <A3DTessFaceData.m_usUsedEntitiesFlags>` (see :ref:`Bitmasks for Specifying Tessellation Types <group__a3d__tessfacetype>`\ ): This flag specifies how to interpret the array :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>`\ . 
   - :c:member:`m_uiStartTriangulated <A3DTessFaceData.m_uiStartTriangulated>` : Starting index for the triangulated data in the array of point indexes of the :c:struct:`~A3DTess3DData`\ . 
   - :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>` : Array of the number of indexes for each triangulated entity of the face. 
      The triangulated data sizes are stored following the order of values in :ref:`Bitmasks for Specifying Tessellation Types <group__a3d__tessfacetype>`\ . Thus, the triangles are stored before triangle fans and before textured triangles. 
   - For triangle types, the :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>` member specifies the number of triangles. 
   - For triangle fan and strips types, the :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>` member specifies the number of fans or strips followed by the number of points for each of them.
   
   
   Consider an example of an :c:struct:`~A3DTessFaceData` structure that describes five triangles, two fans of 5 and 7 points respectively, and one strip of 11 indexes. For this example, set :c:member:`m_usUsedEntitiesFlags <A3DTessFaceData.m_usUsedEntitiesFlags>` to :c:macro:`~kA3DTessFaceDataTriangle` & :c:macro:`~kA3DTessFaceDataTriangleFan` & :c:macro:`~kA3DTessFaceDataTriangleStripe` . In this case, :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>` will be [5,2,5,7,1,11].
   
   In case of the tessellation types **kA3DTessFaceData\*OneNormal\*** (i.e., one of the bitmasks specifying a tessellation type with one normal), the number of points can bear the flag :c:macro:`~kA3DTessFaceDataNormalSingle`\ , modifying the way of reading normals information. In such a case, you must use :c:macro:`~kA3DTessFaceDataNormalSingle` to characterize status and :c:macro:`~kA3DTessFaceDataNormalMask` to access the real value.
   
   The following :c:struct:`~A3DTessFaceData` members also apply to solid representations: 
   
   
   - :c:member:`m_pucRGBAVertices <A3DTessFaceData.m_pucRGBAVertices>` : Colors stored directly on vertices. Either there is no color on vertices or every vertex must bear a color. Therefore, :c:member:`m_uiRGBAVerticesSize <A3DTessFaceData.m_uiRGBAVerticesSize>` is either 0 or equal to the number of point indexes as calculated from :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>`\ , multiplied by 3 if RGB, by 4 if RGBA. (In the previous example, :c:member:`m_uiRGBAVerticesSize <A3DTessFaceData.m_uiRGBAVerticesSize>` is 38\*(m_bIsRGBA?4:3) = (5\*3 + 5 + 7 + 11)\*(m_bIsRGBA?4:3)). 
   - :c:member:`m_bIsRGBA <A3DTessFaceData.m_bIsRGBA>` : If true, the color scheme is RGBa; otherwise, it is RGB. 
   - :c:member:`m_usBehaviour <A3DTessFaceData.m_usBehaviour>` : This member denotes the graphics behavior for this :c:struct:`~A3DTessFaceData` towards owning entity in the tree, as described in :ref:`Bit Field for Behavior on Graphics <group__a3d__graphicsbits>`\ . For face behavior, :c:macro:`~kA3DGraphicsShow` and :c:macro:`~kA3DGraphicsRemoved` are not currently supported. 
   - :c:member:`m_uiTextureCoordIndexesSize <A3DTessFaceData.m_uiTextureCoordIndexesSize>` : Number of texture coordinate indexes (see :ref:`Bitmasks for Specifying Tessellation Types <group__a3d__tessfacetype>`\ ). 
   
   
   
   Index
   =====
   
   .. rubric:: Variables
   
   
   .. rst-class:: api-xref-list
   
   
   * :c:member:`~A3DTessFaceData.m_uiStyleIndexesSize`
   * :c:member:`~A3DTessFaceData.m_puiStyleIndexes`
   * :c:member:`~A3DTessFaceData.m_uiStartWire`
   * :c:member:`~A3DTessFaceData.m_uiSizesWiresSize`
   * :c:member:`~A3DTessFaceData.m_puiSizesWires`
   * :c:member:`~A3DTessFaceData.m_usUsedEntitiesFlags`
   * :c:member:`~A3DTessFaceData.m_uiStartTriangulated`
   * :c:member:`~A3DTessFaceData.m_uiSizesTriangulatedSize`
   * :c:member:`~A3DTessFaceData.m_puiSizesTriangulated`
   * :c:member:`~A3DTessFaceData.m_bIsRGBA`
   * :c:member:`~A3DTessFaceData.m_uiRGBAVerticesSize`
   * :c:member:`~A3DTessFaceData.m_pucRGBAVertices`
   * :c:member:`~A3DTessFaceData.m_usBehaviour`
   * :c:member:`~A3DTessFaceData.m_uiTextureCoordIndexesSize`
   
   



.. rst-class:: kind-group kind-variable

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


.. c:member:: A3DUns32 A3DTessFaceData.m_uiStyleIndexesSize

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`
      
      The size of :c:member:`m_puiStyleIndexes <A3DTessFaceData.m_puiStyleIndexes>`\ . 
      



.. c:member:: A3DUns32* A3DTessFaceData.m_puiStyleIndexes

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`\ *
      
      Array of display styles. 
      
      See explanations above. 
      



.. c:member:: A3DUns32 A3DTessFaceData.m_uiStartWire

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`
      
      See explanations above. 
      



.. c:member:: A3DUns32 A3DTessFaceData.m_uiSizesWiresSize

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`
      
      The size of :c:member:`m_puiSizesWires <A3DTessFaceData.m_puiSizesWires>`\ . 
      



.. c:member:: A3DUns32* A3DTessFaceData.m_puiSizesWires

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`\ *
      
      See explanations above. 
      



.. c:member:: A3DUns16 A3DTessFaceData.m_usUsedEntitiesFlags

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns16`
      
      Bit field containing list of used entities in current face tessellation. 
      
      See explanations above. 
      
      
         :ref:`Bitmasks for Specifying Tessellation Types <group__a3d__tessfacetype>` 
      
      



.. c:member:: A3DUns32 A3DTessFaceData.m_uiStartTriangulated

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`
      
      See explanations above. 
      



.. c:member:: A3DUns32 A3DTessFaceData.m_uiSizesTriangulatedSize

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`
      
      The size of :c:member:`m_puiSizesTriangulated <A3DTessFaceData.m_puiSizesTriangulated>`\ . 
      



.. c:member:: A3DUns32* A3DTessFaceData.m_puiSizesTriangulated

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`\ *
      
      See explanations above. 
      



.. c:member:: A3DBool A3DTessFaceData.m_bIsRGBA

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DBool`
      
      A value of true specifies that the array is made of RGBA. 
      
      A value of false indicates that it is made of RGB. 
      



.. c:member:: A3DUns32 A3DTessFaceData.m_uiRGBAVerticesSize

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`
      
      The size of :c:member:`m_pucRGBAVertices <A3DTessFaceData.m_pucRGBAVertices>`\ . 
      



.. c:member:: A3DUns8* A3DTessFaceData.m_pucRGBAVertices

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns8`\ *
      
      See explanations above. 
      



.. c:member:: A3DUns16 A3DTessFaceData.m_usBehaviour

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns16`
      
      See explanations above. 
      



.. c:member:: A3DUns32 A3DTessFaceData.m_uiTextureCoordIndexesSize

      .. rst-class:: sig-pretty-signature
      
         | :c:type:`~A3DUns32`
      
      See explanations above. 
      




