# Synopsis

PDX_MSGT gdx_EvalNurbSurfNormal(long option, T_GDX_NURB_SURF *sur, double u, double v, MTH_3DPNT pt, double normal[], double more_normals[], int *case_flag)

# Purpose

Compute point and unit length normal on GDX NURB Surface.

# Description

Evaluates point and normalized (unit length) normal vector on a surface, given the u and v parameter values. Creases, the intersection of a u-crease with a v-crease, and poles are all handled properly. At a u- or v-crease, two normals are returned. At the intersection of two such creases, four normals are returned. At a pole, the appropriate limit normal (as the pole is approached) is returned.

# Input

## option

### GDX_UNNORM

The evaluation option. If set, unnormalize the parameter values.

## sur

Pointer to the surface to be evaluated.

## u

u surface parameter value.

## v

v surface parameter value.

# Output

## pt

Point on the surface at (u,v).

## normal

The unit length normal vector at (u,v).

## more_normals

Used only in the special cases resulting in additional normals (creases). See case_flag.

## case_flag

An output flag: = 1 : Unique normal returned in normal[]. = 2 : u-crease. Normal from the left in normal[0], normal from the right in more_normals[0]. = 3 : v-crease. Normal from below in normal[0], normal from above in more_normals[0]. = 4 : u-crease/v-crease intersection. Normal from left/below in normal[0]; normals from right/below, left/above and right/above in more_normals[0], more_normals[3] and more_normals[6] respectively. = 5 : Pole. Limit normal vector returned in normal[0].

# Return

          GDX_NOERR
          GDX_PARMOUTOFRANGE
          Low level error return
          .fi