Пример #1
0
    def getIndex(self, surf, u, v, quantity):
        """ Return the index of a Q, C, or P entry in the global list 

        Input

        surf: integer
            0-based surface index

        u: double
            Parametric coordinate [0,1]

        v: double
            Parametric coordinate [0,1]

        quantity: integer
            0 for P; 1 for C; 2 for Q

        Output

        return: integer
            0-based index in the Q, C, or P vector corresponding to (surf,u,v)

        """

        ugroup = self.edge_group[abs(self.surf_edge[surf, 0, 0]) - 1]
        vgroup = self.edge_group[abs(self.surf_edge[surf, 1, 0]) - 1]
        if quantity == 0:
            surf_index = self.surf_index_P
            edge_index = self.edge_index_P
            nvert = self.nvert
            group_m = self.group_n
        elif quantity == 1:
            surf_index = self.surf_index_C
            edge_index = self.edge_index_C
            nvert = self.nvert
            group_m = self.group_m
        elif quantity == 2:
            surf_index = self.surf_index_Q
            edge_index = self.edge_index_Q
            nvert = max(self.vert_index_Q)
            group_m = self.group_m
        mu = group_m[ugroup - 1]
        mv = group_m[vgroup - 1]
        if u < 0:
            u += mu
        if v < 0:
            v += mv
        if (u == 0 or u == mu - 1) and (v == 0
                                        or v == mv - 1) and quantity == 2:
            vert = self.surf_vert[surf,
                                  int(u / (mu - 1)),
                                  int(v / (mv - 1))] - 1
            return self.vert_index_Q[vert] - 1
        else:
            return PUBSlib.getindex(surf + 1, u + 1, v + 1, mu, mv, self.nsurf,
                                    self.nedge, nvert, self.surf_vert,
                                    self.surf_edge, surf_index, edge_index) - 1
Пример #2
0
    def getIndex(self, surf, u, v, quantity):
        """ Return the index of a Q, C, or P entry in the global list 

        Input

        surf: integer
            0-based surface index

        u: double
            Parametric coordinate [0,1]

        v: double
            Parametric coordinate [0,1]

        quantity: integer
            0 for P; 1 for C; 2 for Q

        Output

        return: integer
            0-based index in the Q, C, or P vector corresponding to (surf,u,v)

        """

        ugroup = self.edge_group[abs(self.surf_edge[surf,0,0])-1]
        vgroup = self.edge_group[abs(self.surf_edge[surf,1,0])-1]
        if quantity==0:
            surf_index = self.surf_index_P
            edge_index = self.edge_index_P
            nvert = self.nvert
            group_m = self.group_n
        elif quantity==1:
            surf_index = self.surf_index_C
            edge_index = self.edge_index_C
            nvert = self.nvert
            group_m = self.group_m
        elif quantity==2:
            surf_index = self.surf_index_Q
            edge_index = self.edge_index_Q
            nvert = max(self.vert_index_Q)
            group_m = self.group_m            
        mu = group_m[ugroup-1]
        mv = group_m[vgroup-1]
        if u < 0:
            u += mu
        if v < 0:
            v += mv
        if (u==0 or u==mu-1) and (v==0 or v==mv-1) and quantity==2:
            vert = self.surf_vert[surf,int(u/(mu-1)),int(v/(mv-1))] - 1
            return self.vert_index_Q[vert] - 1
        else:
            return PUBSlib.getindex(surf+1,u+1,v+1,mu,mv,self.nsurf,self.nedge,nvert,self.surf_vert,self.surf_edge,surf_index,edge_index) - 1