def create_spb(spl_bnd, coors, rho=10): """ Initialize SplineBox knots, control points, base functions, ... """ dim = 2 if coors.shape[1] != dim: print 'Only 2D SplineBoxSBnd is supported!' raise (ValueError) bnd_poly = [] bnd_cp = [] for s in spl_bnd: s.set_param_n(rho) bnd_poly.append(s.eval()[:-1]) bnd_cp.append(s.get_control_points()[:-1, :]) bnd_poly.append(bnd_poly[0][0, :]) ncpoints = 1 base, bspl, uidx, ncp = [], [], [], [] for idim, si in enumerate([0, 1]): s = spl_bnd[si] bspl0 = BSpline(s.degree, ncp=s.ncp) bspl0.set_knot_vector(s.knots) bspl.append(bspl0) base.append(None) uidx.append(None) ncp.append(s.ncp) ncpoints *= s.ncp cp_idx, mul_cp_idx = SplineBox.gen_cp_idxs(ncp) cpoints = SplineRegion2D.define_control_points(nm.vstack(bnd_cp), ncp) idxs_inside = SplineRegion2D.points_in_poly(coors, nm.vstack(bnd_poly)) return { 'base': base, 'bspl': bspl, 'uidx': uidx, 'ncp': ncp, 'cp_idx': cp_idx, 'mul_cp_idx': mul_cp_idx, 'control_points': cpoints, 'idxs_inside': idxs_inside }
def create_spb(spl_bnd, coors, rho=10): """ Initialize SplineBox knots, control points, base functions, ... """ dim = 2 if coors.shape[1] != dim: print 'Only 2D SplineBoxSBnd is supported!' raise(ValueError) bnd_poly = [] bnd_cp = [] for s in spl_bnd: s.set_param_n(rho) bnd_poly.append(s.eval()[:-1]) bnd_cp.append(s.get_control_points()[:-1,:]) bnd_poly.append(bnd_poly[0][0,:]) ncpoints = 1 base, bspl, uidx, ncp = [], [], [], [] for idim, si in enumerate([0, 1]): s = spl_bnd[si] bspl0 = BSpline(s.degree, ncp=s.ncp) bspl0.set_knot_vector(s.knots) bspl.append(bspl0) base.append(None) uidx.append(None) ncp.append(s.ncp) ncpoints *= s.ncp cp_idx, mul_cp_idx = SplineBox.gen_cp_idxs(ncp) cpoints = SplineRegion2D.define_control_points(nm.vstack(bnd_cp), ncp) idxs_inside = SplineRegion2D.points_in_poly(coors, nm.vstack(bnd_poly)) return {'base': base, 'bspl': bspl, 'uidx': uidx, 'ncp': ncp, 'cp_idx': cp_idx, 'mul_cp_idx': mul_cp_idx, 'control_points': cpoints, 'idxs_inside': idxs_inside}