43#define NMG_CK_EDGE_G_CNURB(_p) NMG_CKMAG(_p, NMG_EDGE_G_CNURB_MAGIC, "edge_g_cnurb")
44#define NMG_CK_EDGE_G_EITHER(_p) NMG_CK2MAG(_p, NMG_EDGE_G_LSEG_MAGIC, NMG_EDGE_G_CNURB_MAGIC, "edge_g_lseg|edge_g_cnurb")
45#define NMG_CK_VERTEXUSE_A_CNURB(_p) NMG_CKMAG(_p, NMG_VERTEXUSE_A_CNURB_MAGIC, "vertexuse_a_cnurb")
46#define NMG_CK_VERTEXUSE_A_EITHER(_p) NMG_CK2MAG(_p, NMG_VERTEXUSE_A_PLANE_MAGIC, NMG_VERTEXUSE_A_CNURB_MAGIC, "vertexuse_a_plane|vertexuse_a_cnurb")
48#define RT_NURB_SPLIT_ROW 0
49#define RT_NURB_SPLIT_COL 1
50#define RT_NURB_SPLIT_FLAT 2
67#define RT_NURB_PT_XY 1
68#define RT_NURB_PT_XYZ 2
69#define RT_NURB_PT_UV 3
70#define RT_NURB_PT_DATA 4
71#define RT_NURB_PT_PROJ 5
73#define RT_NURB_PT_RATIONAL 1
74#define RT_NURB_PT_NONRAT 0
76#define RT_NURB_MAKE_PT_TYPE(n, t, h) ((n<<5) | (t<<1) | h)
77#define RT_NURB_EXTRACT_COORDS(pt) (pt>>5)
78#define RT_NURB_EXTRACT_PT_TYPE(pt) ((pt>>1) & 0x0f)
79#define RT_NURB_IS_PT_RATIONAL(pt) (pt & 0x1)
80#define RT_NURB_STRIDE(pt) (RT_NURB_EXTRACT_COORDS(pt) * sizeof( fastf_t))
82#define DEBUG_NMG_SPLINE 0x00000100
86#define NMG_CK_KNOT(_p) BU_CKMAG(_p, RT_KNOT_VECTOR_MAGIC, "knot_vector")
87#define NMG_CK_CNURB(_p) BU_CKMAG(_p, NMG_EDGE_G_CNURB_MAGIC, "cnurb")
88#define NMG_CK_SNURB(_p) BU_CKMAG(_p, NMG_FACE_G_SNURB_MAGIC, "snurb")
91#define GET_CNURB(p) { \
92 BU_ALLOC((p), struct edge_g_cnurb); \
94 BU_LIST_INIT( &(p)->l ); (p)->l.magic = NMG_EDGE_G_CNURB_MAGIC; \
98#define GET_SNURB(p) { \
99 BU_ALLOC((p), struct face_g_snurb); \
101 BU_LIST_INIT( &(p)->l ); (p)->l.magic = NMG_FACE_G_SNURB_MAGIC; \
185 const fastf_t *knots,
int o_stride,
int n_stride,
193 const struct knot_vector *k_vec,
int k_index,
int coords);
214 int lower,
int upper);
238 const fastf_t *data,
int ymax,
int xmax);
263 fastf_t *solution,
int dim,
int coords);
265 int row,
int coords);
282 int n_u_knots,
int n_v_knots,
283 int n_rows,
int n_cols,
int pt_type);
310 int o_stride,
int n_stride,
311 int lower,
int upper,
int pt_type);
359 const struct bn_tol *tol);
364 const struct bn_tol *tol);
379 const struct bn_tol *tol);
386 const struct bn_tol *tol);
392 const struct bn_tol *tol);
397 const struct bn_tol *tol);
Header file for the BRL-CAD common definitions.
void float float int int int int * interval
void float float int int int int float * size
void int char int int double * min
void nmg_vertexuse_a_cnurb(struct vertexuse *vu, const fastf_t *uvw)
void nmg_nurb_mesh_diff(int order, const fastf_t *o_pts, fastf_t *n_pts, const fastf_t *knots, int o_stride, int n_stride, int o_size, int pt_type)
void nmg_nurb_plot_cnurb(FILE *fp, const struct edge_g_cnurb *crv)
struct nmg_nurb_poly * nmg_nurb_to_poly(struct face_g_snurb *srf)
void nmg_eval_linear_trim_to_tol(const struct edge_g_cnurb *cnrb, const struct face_g_snurb *snrb, const fastf_t uvw1[3], const fastf_t uvw2[3], struct bu_list *head, const struct bn_tol *tol)
void nmg_snurb_fu_get_norm_at_vu(const struct faceuse *fu, const struct vertexuse *vu, vect_t norm)
int nmg_nurb_c_bound(struct edge_g_cnurb *crv, point_t bmin, point_t bmax)
fastf_t nmg_nurb_crv_flat(fastf_t *crv, int size, int pt_type)
void nmg_nurb_s_norm(struct face_g_snurb *srf, fastf_t u, fastf_t v, fastf_t *norm)
void nmg_nurb_s_split(struct bu_list *split_hd, const struct face_g_snurb *srf, int dir)
void nmg_nurb_kvmerge(struct knot_vector *new_knots, const struct knot_vector *kv1, const struct knot_vector *kv2)
void nmg_nurb_pr_kv(const struct knot_vector *kv)
struct face_g_snurb * nmg_nurb_s_refine(const struct face_g_snurb *srf, int dir, struct knot_vector *kv)
int bezier_roots(point2d_t *w, int degree, point2d_t **intercept, point2d_t **normal, point2d_t ray_start, point2d_t ray_dir, point2d_t ray_perp, int depth, fastf_t epsilon)
void nmg_edge_g_cnurb_plinear(struct edgeuse *eu)
void nmg_nurb_forw_solve(const fastf_t *lu, const fastf_t *b, fastf_t *y, int n)
struct nmg_nurb_uv_hit * nmg_nurb_intersect(const struct face_g_snurb *srf, plane_t plane1, plane_t plane2, double uv_tol, struct bu_list *plist)
void nmg_nurb_plot_snurb(FILE *fp, const struct face_g_snurb *srf)
struct face_g_snurb * nmg_nurb_s_xsplit(struct face_g_snurb *srf, fastf_t param, int dir)
void nmg_nurb_clip_srf(const struct face_g_snurb *srf, int dir, fastf_t *min, fastf_t *max)
int nmg_nurb_kvcheck(fastf_t val, const struct knot_vector *kv)
void nmg_nurb_s_eval(const struct face_g_snurb *srf, fastf_t u, fastf_t v, fastf_t *final_value)
int nmg_cnurb_is_on_crv(const struct edgeuse *eu, const struct edge_g_cnurb *cnrb, const struct face_g_snurb *snrb, const struct bu_list *head, const struct bn_tol *tol)
struct oslo_mat * nmg_nurb_calc_oslo(int order, const struct knot_vector *tau_kv, struct knot_vector *t_kv)
void nmg_nurb_kvnorm(struct knot_vector *kv)
void nmg_nurb_gen_knot_vector(struct knot_vector *new_knots, int order, fastf_t lower, fastf_t upper)
void nmg_eval_linear_trim_curve(const struct face_g_snurb *snrb, const fastf_t uvw[3], point_t xyz)
void nmg_eval_trim_curve(const struct edge_g_cnurb *cnrb, const struct face_g_snurb *snrb, const fastf_t t, point_t xyz)
int nurb_crv_is_bezier(const struct edge_g_cnurb *crv)
int nmg_snurb_is_planar(const struct face_g_snurb *srf, const struct bn_tol *tol)
void nmg_nurb_kvmult(struct knot_vector *new_kv, const struct knot_vector *kv, int num, fastf_t val)
struct edge_g_cnurb * nmg_nurb_c_xsplit(struct edge_g_cnurb *crv, fastf_t param)
fastf_t nmg_nurb_basis_eval(struct knot_vector *knts, int interval, int order, fastf_t mu)
void nmg_edge_g_cnurb(struct edgeuse *eu, int order, int n_knots, fastf_t *kv, int n_pts, int pt_type, fastf_t *points)
struct edge_g_cnurb * nmg_nurb_crv_copy(const struct edge_g_cnurb *crv)
int nmg_nurb_s_flat(struct face_g_snurb *srf, fastf_t epsilon)
void nmg_nurb_free_cnurb(struct edge_g_cnurb *crv)
void nmg_nurb_c_split(struct bu_list *split_hd, const struct edge_g_cnurb *crv)
void nmg_nurb_curvature(struct nmg_curvature *cvp, const struct face_g_snurb *srf, fastf_t u, fastf_t v)
int nmg_uv_in_lu(const fastf_t u, const fastf_t v, const struct loopuse *lu)
void nmg_nurb_print_pnt_type(int c)
void nmg_face_g_snurb(struct faceuse *fu, int u_order, int v_order, int n_u_knots, int n_v_knots, fastf_t *ukv, fastf_t *vkv, int n_rows, int n_cols, int pt_type, fastf_t *mesh)
void nmg_nurb_clean_cnurb(struct edge_g_cnurb *crv)
void nmg_snurb_fu_eval(const struct faceuse *fu, const fastf_t u, const fastf_t v, point_t pt_on_srf)
void nmg_nurb_kvcopy(struct knot_vector *new_kv, const struct knot_vector *old_kv)
void nmg_nurb_free_snurb(struct face_g_snurb *srf)
int nmg_nurb_s_bound(struct face_g_snurb *srf, point_t bmin, point_t bmax)
struct nmg_nurb_poly * nmg_nurb_mk_poly(fastf_t *v1, fastf_t *v2, fastf_t *v3, fastf_t uv1[2], fastf_t uv2[2], fastf_t uv3[2])
void nmg_nurb_cinterp(struct edge_g_cnurb *crv, int order, const fastf_t *data, int n)
struct edge_g_cnurb * nmg_nurb_new_cnurb(int order, int n_knots, int n_pts, int pt_type)
void nmg_nurb_p_mat(const fastf_t *mat, int dim)
void nmg_nurb_solve(fastf_t *mat_1, fastf_t *mat_2, fastf_t *solution, int dim, int coords)
struct edge_g_cnurb * nmg_join_cnurbs(struct bu_list *crv_head)
void bezier(point2d_t *V, int degree, double t, point2d_t *Left, point2d_t *Right, point2d_t eval_pt, point2d_t normal)
int nmg_nurb_s_check(struct face_g_snurb *srf)
void nurb_c_to_bezier(struct bu_list *clist, struct edge_g_cnurb *crv)
struct edge_g_cnurb * nmg_arc2d_to_cnurb(point_t i_center, point_t i_start, point_t i_end, int point_type, const struct bn_tol *tol)
int nmg_nurb_bezier(struct bu_list *bezier_hd, const struct face_g_snurb *srf)
void nmg_nurb_back_solve(const fastf_t *lu, const fastf_t *y, fastf_t *x, int n)
void nmg_nurb_free_oslo(struct oslo_mat *om)
void nmg_nurb_kvknot(struct knot_vector *new_knots, int order, fastf_t lower, fastf_t upper, int num)
void nmg_nurb_c_eval(const struct edge_g_cnurb *crv, fastf_t param, fastf_t *final_value)
int nmg_snurb_calc_lu_uv_orient(const struct loopuse *lu)
fastf_t rt_cnurb_par_edge(const struct edge_g_cnurb *crv, fastf_t epsilon)
void nmg_nurb_kvgen(struct knot_vector *kv, fastf_t lower, fastf_t upper, int num)
void nmg_nurb_pr_mesh(const struct face_g_snurb *m)
struct face_g_snurb * nmg_nurb_s_diff(const struct face_g_snurb *srf, int dir)
struct edge_g_cnurb * nmg_nurb_c_refine(const struct edge_g_cnurb *crv, struct knot_vector *kv)
void nmg_nurb_sinterp(struct face_g_snurb *srf, int order, const fastf_t *data, int ymax, int xmax)
int nmg_cnurb_is_linear(const struct edge_g_cnurb *cnrb)
struct bezier_2d_list * bezier_subdivide(struct bezier_2d_list *bezier_hd, int degree, fastf_t epsilon, int depth)
void nmg_eval_trim_to_tol(const struct edge_g_cnurb *cnrb, const struct face_g_snurb *snrb, const fastf_t t0, const fastf_t t1, struct bu_list *head, const struct bn_tol *tol)
int nmg_nurb_c_check(struct edge_g_cnurb *crv)
void nmg_nurb_kvextract(struct knot_vector *new_kv, const struct knot_vector *kv, int lower, int upper)
int nmg_nurb_knot_index(const struct knot_vector *kv, fastf_t k_value, int order)
void nmg_nurb_s_print(char *c, const struct face_g_snurb *srf)
struct edge_g_cnurb * nmg_nurb_c_diff(const struct edge_g_cnurb *crv)
void nmg_nurb_c_print(const struct edge_g_cnurb *crv)
void nmg_nurb_pr_crv(fastf_t *crv, int c_size, int coords)
int nmg_cnurb_lseg_coincident(const struct edgeuse *eu1, const struct edge_g_cnurb *cnrb, const struct face_g_snurb *snrb, const point_t pt1, const point_t pt2, const struct bn_tol *tol)
void nmg_nurb_doolittle(fastf_t *mat_1, fastf_t *mat_2, int row, int coords)
fastf_t * nmg_nurb_eval_crv(fastf_t *crv, int order, fastf_t param, const struct knot_vector *k_vec, int k_index, int coords)
void nmg_snurb_fu_get_norm(const struct faceuse *fu, const fastf_t u, const fastf_t v, vect_t norm)
struct face_g_snurb * nmg_nurb_scopy(const struct face_g_snurb *srf)
struct face_g_snurb * nmg_nurb_project_srf(const struct face_g_snurb *srf, plane_t plane1, plane_t plane2)
void nmg_nurb_s_plot(const struct face_g_snurb *srf)
void nmg_nurb_map_oslo(struct oslo_mat *oslo, fastf_t *old_pts, fastf_t *new_pts, int o_stride, int n_stride, int lower, int upper, int pt_type)
struct face_g_snurb * nmg_nurb_region_from_srf(const struct face_g_snurb *srf, int dir, fastf_t param1, fastf_t param2)
void nmg_nurb_pr_oslo(struct oslo_mat *om)
int nmg_bez_check(const struct face_g_snurb *srf)
struct face_g_snurb * nmg_nurb_new_snurb(int u_order, int v_order, int n_u_knots, int n_v_knots, int n_rows, int n_cols, int pt_type)
fastf_t vect_t[ELEMENTS_PER_VECT]
3-tuple vector
double fastf_t
fastest 64-bit (or larger) floating point type
fastf_t point2d_t[ELEMENTS_PER_POINT2D]
2-tuple point
fastf_t plane_t[ELEMENTS_PER_PLANE]
Definition of a plane equation.
fastf_t point_t[ELEMENTS_PER_POINT]
3-tuple point
Edge NURBS curve geometry.
int c_size
number of ctl points
int pt_type
curve point type
NMG topological edge usage.
Face NURBS surface geometry.
int dir
direction of last refinement
int pt_type
surface point type
NMG topological face usage.
Definition of a knot vector.
NMG topological loop usage.
vect_t crv_pdir
Principle direction.
fastf_t crv_c1
curvature in principle dir
fastf_t crv_c2
curvature in other direction
fastf_t uv[3][2]
U, V parametric values.
struct nmg_nurb_poly * next
struct nmg_nurb_uv_hit * next
NMG topological vertex usage.
fundamental vector, matrix, quaternion math macros