Exemple #1
0
static BMVert *subdivideedgenum(BMesh *bm, BMEdge *edge, BMEdge *oedge,
                                int curpoint, int totpoint, const SubDParams *params,
                                BMEdge **newe, BMVert *vsta, BMVert *vend)
{
	BMVert *ev;
	float percent, percent2 = 0.0f;

	if (BMO_elem_flag_test(bm, edge, EDGE_PERCENT) && totpoint == 1) {
		percent = BMO_slot_map_float_get(params->slot_edge_percents, edge);
	}
	else {
		percent = 1.0f / (float)(totpoint + 1 - curpoint);
		percent2 = (float)(curpoint + 1) / (float)(totpoint + 1);

	}
	
	ev = bm_subdivide_edge_addvert(bm, edge, oedge, params, percent,
	                               percent2, newe, vsta, vend);
	return ev;
}
static BMVert *subdivide_edge_num(
        BMesh *bm, BMEdge *edge, BMEdge *e_orig,
        int curpoint, int totpoint, const SubDParams *params,
        BMVert *v_a, BMVert *v_b,
        BMEdge **r_edge)
{
	BMVert *v_new;
	float factor_edge_split, factor_subd;

	if (BMO_elem_flag_test(bm, edge, EDGE_PERCENT) && totpoint == 1) {
		factor_edge_split = BMO_slot_map_float_get(params->slot_edge_percents, edge);
		factor_subd = 0.0f;
	}
	else {
		factor_edge_split = 1.0f / (float)(totpoint + 1 - curpoint);
		factor_subd = (float)(curpoint + 1) / (float)(totpoint + 1);
	}
	
	v_new = bm_subdivide_edge_addvert(
	        bm, edge, e_orig, params,
	        factor_edge_split, factor_subd,
	        v_a, v_b, r_edge);
	return v_new;
}