示例#1
0
    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
        }
示例#2
0
文件: splinebox.py 项目: Gkdnz/sfepy
    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}