BRLCAD

#include "common.h"
#include <math.h>
#include "bio.h"
#include "vmath.h"
#include "raytrace.h"
#include "nurb.h"
Go to the source code of this file.
Functions  
fastf_t  rt_nurb_par_edge (const struct face_g_snurb *srf, fastf_t epsilon) 
fastf_t  rt_cnurb_par_edge (const struct edge_g_cnurb *crv, fastf_t epsilon) 
Given Epsilon, compute the number of internal knots to add so that every triangle generated in parametric space is within epsilon of the original surface.
Definition in file nurb_tess.c.
Algorithm 
See paper in Computer Aided Design (CAD) Volume 27, Number 1, January 1995 TESSELATING TRIMMED NURBS SURFACES, Leslie A Piegl and Arnaud Richard.
There is a slight deviation from the paper; since libnurb (rt_nurb_s_diff) differentiation correctly handles rational surfaces, no special processing for rational is needed.
The idea is to compute the longest edge size in parametric space such that a the edge (or curve) in real space is within epsilon tolerance. The mapping from parametric space is done as a separate step.
Definition at line 59 of file nurb_tess.c.
References rt_nurb_free_snurb(), and rt_nurb_s_diff().
Referenced by rt_nurb_plot().
Calculate the maximum edge length (in parameter space) that will keep the curve approximation within epsilon of the true curve
This is a temporary guess until legitimate code can be found
returns: 1.0 if the curve is a straight line maximum parameter increment otherwise
Definition at line 154 of file nurb_tess.c.
References bu_bomb(), bu_log(), MAX_FASTF, rt_nurb_c_diff(), rt_nurb_free_cnurb(), and ZERO.
Referenced by seg_to_vlist().