PEXOCCGeoNormFillArea Utility


Synopsis

 
   int PEXOCCGeoNormFillArea(
       PEXOCC context,
       PEXPointer occ_facet_data,
       unsigned int count,
       PEXPointer occ_vertex_data,
       int handedness
   )
 

 
   int PEXGeoNormFillArea(
       unsigned int facet_attributes,
       unsigned int vertex_attributes,
       int color_type,
       PEXFacetData *facet_data,
       unsigned int count,
       PEXArrayOfVertex vertices
   )
 

Arguments

context
An OC context returned by a successful PEXCreateOCC call.

facet_attributes (OCC)
A mask indicating the facet attributes provided. It should contain the bit PEXGANormal.

vertex_attributes (OCC)
A mask indicating the vertex attributes provided.

color_type (OCC)
The type of color data provided.

facet_fp_data_count (OCC)
The number of optional floating-point numbers for each facet.

surface_vertex_fp_data_count (OCC)
The number of optional floating-point numbers for each vertex.

occ_facet_data
A pointer to facet data. This function adds the geometric normal to this data. See Facet / Vertex Data Formats.

facet_data
A pointer to facet data. This function adds the geometric normal to this data.

count
The number of vertices.

occ_vertex_data
A pointer to the vertex data defining the fill area. See Facet / Vertex Data Formats.

vertices
An array of vertices defining the fill area.

data_model (OCC)
Specifies the data model used to represent the geometric data.

data_model_specs (OCC)
Offset and size data for the PEXDataStride or PEXDataUnpacked data models.

handedness
Orientation of the coordinate system assumed by the vertex data (PEXVertexOrderRightHand, PEXVertexOrderLeftHand).

Returns

Zero if successful; otherwise, one of the following:

PEXBadPrimitive
A normal cannot be computed because the fill area is degenerate or because all vertices are colinear.

Description

Invoke PEXOCCGeoNormFillArea to compute the geometric normal of a fill area and store it in the specified facet data.

The normal is computed by finding the first three non- colinear points in the specified vertices, forming two vectors from those points, one from the first point to the second point and one from the first point to the third point, and computing the cross product of those two vectors. The geometric normal is the normalized cross product.

The three points, A, B, and C are selected as follows. Point A is the first point in the list of vertices. Point B is the next point in the list that is not coincident with A. Point C is the next point in the list that is not colinear with A and B. If it is not possible to find three such points, then this utility returns unsuccessfully.

PEXGeoNormFillArea assumes the handedness is PEXVertexOrderRightHand.

Specify the handedness argument to generate normals that match the orientation of the coordinate system that the vertex data uses. PEXVertexOrderRightHand indicates that the coordinate system is right-handed, and PEXVertexOrderLeftHand indicates that the normals are to be "flipped" from the right-handed orientation to match a left-handed coordinate system.

If the facet attributes does not contain the bit PEXGANormal, then this utility does not compute the geometric normal. However, the utility still returns successfully.

Errors

None.

See Also

For a list of utilities that compute geometric normals, see Computing Geometric Normals. For a list of related topics, see PEXlib Utilities.