Пример #1
0
    def __initializeTopology(self, P_arrays, ratio):
        """ Determine connectivities - mappings from surfaces to vertices and edges; from edges to groups
            Initialize order (k), # control points (m), and # points (n) for each edge 

        Input

        P_arrays: list of doubles(nu,nv,3)
            Each element of the list is an nu x nv array of x-y-z coordinates

        """

        self.nsurf = len(P_arrays)
        Ps = numpy.zeros((self.nsurf, 3, 3, 3), order='F')
        for k in range(self.nsurf):
            nu = P_arrays[k].shape[0]
            nv = P_arrays[k].shape[1]
            for i in range(2):
                for j in range(2):
                    Ps[k, -i, -j] = P_arrays[k][-i, -j]
            for i in range(2):
                Ps[k, -i,
                   1] += 0.5 * P_arrays[k][-i,
                                           int(numpy.ceil((nv - 1) / 2.0))]
                Ps[k, -i,
                   1] += 0.5 * P_arrays[k][-i,
                                           int(numpy.floor((nv - 1) / 2.0))]
            for j in range(2):
                Ps[k, 1,
                   -j] += 0.5 * P_arrays[k][int(numpy.ceil(
                       (nu - 1) / 2.0)), -j]
                Ps[k, 1,
                   -j] += 0.5 * P_arrays[k][int(numpy.floor(
                       (nu - 1) / 2.0)), -j]

        self.nvert, self.nedge, self.surf_vert, self.surf_edge = PUBSlib.initializeconnectivities(
            self.nsurf, 1e-13, 1e-5, Ps)
        self.vert_count, self.edge_count = PUBSlib.initializevecounts(
            self.nsurf, self.nvert, self.nedge, self.surf_vert, self.surf_edge)
        self.ngroup, self.edge_group = PUBSlib.initializegroups(
            self.nsurf, self.nedge, self.surf_edge)
        self.surf_c1 = numpy.zeros((self.nsurf, 3, 3), bool, order='F')
        self.edge_c1 = numpy.zeros((self.nedge, 2), bool, order='F')

        ns = numpy.zeros((self.nsurf, 2), order='F')
        for k in range(self.nsurf):
            ns[k, :] = P_arrays[k].shape[0:2]
        k = 4
        self.group_k, self.group_m, self.group_n = PUBSlib.initializekmn(
            k, self.nsurf, self.nedge, self.ngroup, ratio, ns, self.surf_edge,
            self.edge_group)

        if self.printInfo:
            print '# Surfaces =', self.nsurf
            print '# Vertices =', self.nvert
            print '# Edges =', self.nedge
            print '# Groups =', self.ngroup
Пример #2
0
    def __initializeTopology(self, P_arrays, ratio):
        """ Determine connectivities - mappings from surfaces to vertices and edges; from edges to groups
            Initialize order (k), # control points (m), and # points (n) for each edge 

        Input

        P_arrays: list of doubles(nu,nv,3)
            Each element of the list is an nu x nv array of x-y-z coordinates

        """

        self.nsurf = len(P_arrays)
        Ps = numpy.zeros((self.nsurf,3,3,3),order='F')
        for k in range(self.nsurf):
            nu = P_arrays[k].shape[0]
            nv = P_arrays[k].shape[1]
            for i in range(2):
                for j in range(2):
                    Ps[k,-i,-j] = P_arrays[k][-i,-j]
            for i in range(2):
                Ps[k,-i,1] += 0.5*P_arrays[k][-i,int(numpy.ceil((nv-1)/2.0))]
                Ps[k,-i,1] += 0.5*P_arrays[k][-i,int(numpy.floor((nv-1)/2.0))]
            for j in range(2):
                Ps[k,1,-j] += 0.5*P_arrays[k][int(numpy.ceil((nu-1)/2.0)),-j]
                Ps[k,1,-j] += 0.5*P_arrays[k][int(numpy.floor((nu-1)/2.0)),-j]

        self.nvert,self.nedge,self.surf_vert,self.surf_edge = PUBSlib.initializeconnectivities(self.nsurf,1e-13,1e-5,Ps)
        self.vert_count,self.edge_count = PUBSlib.initializevecounts(self.nsurf,self.nvert,self.nedge,self.surf_vert,self.surf_edge)
        self.ngroup,self.edge_group = PUBSlib.initializegroups(self.nsurf,self.nedge,self.surf_edge)
        self.surf_c1 = numpy.zeros((self.nsurf,3,3),bool,order='F')
        self.edge_c1 = numpy.zeros((self.nedge,2),bool,order='F')

        ns = numpy.zeros((self.nsurf,2),order='F')
        for k in range(self.nsurf):
            ns[k,:] = P_arrays[k].shape[0:2]
        k = 4
        self.group_k, self.group_m, self.group_n = PUBSlib.initializekmn(k, self.nsurf, self.nedge, self.ngroup, ratio, ns, self.surf_edge, self.edge_group)

        if self.printInfo:
            print '# Surfaces =',self.nsurf
            print '# Vertices =',self.nvert
            print '# Edges =',self.nedge
            print '# Groups =',self.ngroup