/* * R T _ N U R B _ R E G I O N _ F R O M _ S R F */ struct face_g_snurb * rt_nurb_region_from_srf(const struct face_g_snurb *srf, int dir, fastf_t param1, fastf_t param2, struct resource *res) { register int i; struct face_g_snurb *region; struct knot_vector new_knots; fastf_t knot_vec[40]; /* Build the new knot vector in the local array */ /* XXX fill in magic number here? */ new_knots.knots = & knot_vec[0]; if ( dir == RT_NURB_SPLIT_ROW) { new_knots.k_size = srf->order[0] * 2; for ( i = 0; i < srf->order[0]; i++) { knot_vec[i] = param1; knot_vec[i+srf->order[0]] = param2; } } else { new_knots.k_size = srf->order[1] * 2; for ( i = 0; i < srf->order[1]; i++) { knot_vec[i] = param1; knot_vec[i+srf->order[1]] = param2; } } if ( new_knots.k_size >= 40 ) bu_bomb("rt_nurb_region_from_srf() local kv overflow\n"); region = rt_nurb_s_refine( srf, dir, &new_knots, res); return region; }
struct face_g_snurb * rt_nurb_region_from_srf(const struct face_g_snurb *srf, int dir, fastf_t param1, fastf_t param2, struct resource *res) { register int i; struct face_g_snurb *region; struct knot_vector new_knots; fastf_t *knot_vec = NULL; size_t maxorder = FMAX(srf->order[0], srf->order[1]); knot_vec = (fastf_t *)bu_calloc(maxorder * 2, sizeof(fastf_t), "knot vector"); /* Build the new knot vector in a local array, which gets copied * later in rt_nurb_s_refine(). */ new_knots.knots = &knot_vec[0]; if (dir == RT_NURB_SPLIT_ROW) { new_knots.k_size = srf->order[0] * 2; for (i = 0; i < srf->order[0]; i++) { knot_vec[i] = param1; knot_vec[i+srf->order[0]] = param2; } } else { new_knots.k_size = srf->order[1] * 2; for (i = 0; i < srf->order[1]; i++) { knot_vec[i] = param1; knot_vec[i+srf->order[1]] = param2; } } region = rt_nurb_s_refine(srf, dir, &new_knots, res); bu_free(knot_vec, "knot vector"); return region; }