A3DTess3DWireData
-
struct
A3DTess3DWireData 3D wire data structure
2.0
The:c:type:~A3DTess3DWireentity includes data stored in the:c:struct:~A3DTessBaseDatastructure.
The:c:member:A3DTessBaseData::m_pdCoords <A3DTessBaseData.m_pdCoords>member represents point coordinates, which are interpreted in groups of three (X, Y, Z) to represent 3D vectors.:c:struct:~A3DTess3DWireDataenables you to organize these coordinates as wires. The:c:struct:~A3DTess3DWireDatastructure uses the:c:member:A3DTessBaseData::m_pdCoords <A3DTessBaseData.m_pdCoords>array to retrieve the point coordinates. The:c:member:m_puiSizesWires <A3DTess3DWireData.m_puiSizesWires>member contains indexes referencing the array of points in:c:member:A3DTessBaseData::m_pdCoords <A3DTessBaseData.m_pdCoords>. The index for each point is a multiple of 3 and refers to the first coordinate in the 3D point. As an example, for a single 4-point wire the:c:member:m_puiSizesWires <A3DTess3DWireData.m_puiSizesWires>array would contain the following elements, with the first element representing the number of points in the wire and subsequent elements representing point indexes in:c:member:A3DTessBaseData::m_pdCoords <A3DTessBaseData.m_pdCoords>: {number of indexes, indexes of the wire edge} = {4, 0, 3, 6, 9}. The:c:member:m_uiSizesWiresSize <A3DTess3DWireData.m_uiSizesWiresSize>member represents the exact number of elements in the:c:member:m_puiSizesWires <A3DTess3DWireData.m_puiSizesWires>array. Our single 4-point wire contains 5 elements {4, 0, 3, 6, 9}, so:c:member:m_uiSizesWiresSize <A3DTess3DWireData.m_uiSizesWiresSize>would be set to 5. If:c:member:m_uiSizesWiresSize <A3DTess3DWireData.m_uiSizesWiresSize>is set to zero, the tessellation is given as a single wire edge with the array of point indexes contained in:c:member:A3DTessBaseData::m_pdCoords <A3DTessBaseData.m_pdCoords>. If:c:member:m_uiSizesWiresSize <A3DTess3DWireData.m_uiSizesWiresSize>contains multiple wires, then the array referenced by:c:member:m_puiSizesWires <A3DTess3DWireData.m_puiSizesWires>describes the edges as follows:
Wire IndexesWire IndexesWire IndexesWire IndexesWire Indexes
If:c:member:m_uiSizesWiresSize <A3DTess3DWireData.m_uiSizesWiresSize>is non-zero,:c:member:m_puiSizesWires <A3DTess3DWireData.m_puiSizesWires>can include the flags described in:ref:Flags for Specifying Wire Characteristics <group__a3d__tess3dwireflags>as follows: [number of indexes | flag, indexes 1, indexes 2, …]:c:member:m_bIsRGBA <A3DTess3DWireData.m_bIsRGBA>indicates the color format used is RGBA. A value of true indicates the use of RGBA, while a value of false indicates the use of RGB.:c:member:m_bIsSegmentColor <A3DTess3DWireData.m_bIsSegmentColor>: A value of true indicates the colors are for the entire segment.:c:member:m_pucRGBAVertices <A3DTess3DWireData.m_pucRGBAVertices>specifies the color channels for each vertex / segment.:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>specifies the size of the:c:member:m_pucRGBAVertices <A3DTess3DWireData.m_pucRGBAVertices>. When the colors are for points (
m_bIsSegmentColor= false), the number of colors needed must be equal to the number of points.When the colors are for segments (m_bIsSegmentColor= true), the number of colors needed must be equal to the number of segments. So if a wire has 3 points, it will need 2 colors. If this 3-point wire is closed or continuous with a previous wire, it will need 3 colors.The number of colors needed can be calculated:A3Duns32iNumberColorNeeded=0; if(sTess3DWireData.m_bIsSegmentColor&&!bIsWireClosed&&!bIsWireContinuous) { iNumberOfColorsNeeded=sData->m_uiSize-1; } else { iNumberOfColorsNeeded=sData->m_uiSize; }
The member:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>is 3 times the number of colors needed for RGB, 4 times the number of colors needed for RGBA.
sTess3DWireData.m_uiRGBAVerticesSize=(sTess3DWireData.m_bIsRGBA?4:3)*iNumberOfColorsNeeded;
Example: Consider the following example of two wires: one defined by 3 points, and another wire defined by 4 points.
Wire SegmentsWire SegmentsWire SegmentsWire SegmentsWire Segments
<style>.WireList {padding-bottom:7px;}</style>m_uiSizesWiresSize= 9 = (1+3+1+4). There are two wires, one with 3 points and another wire of 4 points, each with a count element directly preceding the indexes, so 9 elements will be needed in the:c:member:m_puiSizesWires <A3DTess3DWireData.m_puiSizesWires>array.m_puiSizesWires= [3, index of a, index of b, index of c, 4, index of w, index of x, index of y, index of z]If the last point of the first wire is linked to the first point of the second wire, the stored values are as follows:
m_puiSizesWires= [3, index of a, index of b, index of c, 4 |:c:macro:~kA3DTess3DWireDataIsContinuous, index of w, index of x, index of y, index of z]If the second wire is closed, the stored values are as follows:
m_puiSizesWires= [3, index of a, index of b, index of c, 4 |:c:macro:~kA3DTess3DWireDataIsClosing, index of w, index of x, index of y, index of z]m_bIsRGBA= false, 3 channels are needed for 7 points.:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>= 7 * 3 = 21m_bIsRGBA= true, 4 channels are needed for 7 points.:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>= 7 * 4 = 28If:c:member:m_bIsSegmentColor <A3DTess3DWireData.m_bIsSegmentColor>= false, colors are given for points.
If no wires are closed or continuous, and there are only 5 segments, then for RGB:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>= 5 * 3 = 15. For RGBA,:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>= 5 * 4 = 20
If a wire is closed or continuous, there are 6 segments, so for RGB:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>= 6 * 3 = 18. For RGBA:c:member:m_uiRGBAVerticesSize <A3DTess3DWireData.m_uiRGBAVerticesSize>= 6 * 4 = 24
If:c:member:m_bIsSegmentColor <A3DTess3DWireData.m_bIsSegmentColor>= true, colors are given for the entire segment.
Implicit points coming from:ref:Flags for Specifying Wire Characteristics <group__a3d__tess3dwireflags>must also bear a color.
A3DTessBaseData::m_uiCoordSizerepresents size of array:c:member:A3DTessBaseData::m_pdCoords <A3DTessBaseData.m_pdCoords>and not a number of 3D points.
Variables
-
A3DUns32
A3DTess3DWireData.m_uiSizesWiresSize -
The size of:c:member:m_puiSizesWires <A3DTess3DWireData.m_puiSizesWires>.
-
A3DUns32 *
A3DTess3DWireData.m_puiSizesWires -
See explanations in**Detailed**Description.
-
A3DBool
A3DTess3DWireData.m_bIsRGBA -
See explanations in**Detailed**Description.
-
A3DBool
A3DTess3DWireData.m_bIsSegmentColor -
See explanations in**Detailed**Description.
-
A3DUns32
A3DTess3DWireData.m_uiRGBAVerticesSize -
The size of:c:member:m_pucRGBAVertices <A3DTess3DWireData.m_pucRGBAVertices>.
-
A3DUns8 *
A3DTess3DWireData.m_pucRGBAVertices -
See explanations above.