示例#1
0
/*
 *			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;
}
示例#2
0
文件: nurb_ray.c 项目: kanzure/brlcad
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;
}