Precomputes some parameters to run faster specific methods like
        Surface.classify. This method is automatically launched before shadows
        computation.
		
        :returns: None

def lock(self):
        """
        Precomputes some parameters to run faster specific methods like
        Surface.classify. This method is automatically launched before shadows
        computation.
		
        :returns: None
        """
        if self.locked: return
        from pyny3d.utils import bool2index
        # seed
        self.seed = self.get_seed()
        
        # map
        self.map = self.get_map()

        # map2polygons schedule
        m2p = [[], [], 0] # [polygons, holes, sop]
        index, points = self.get_map()
                
        ## points
        bool_1 = index[:, 1] == -1
        m2p[2] = bool2index(bool_1)
        index_1 = bool2index(np.logical_not(bool_1)) # remain
        index = index[index_1]
        
        ## new index
        index_bool = np.diff(index[:, 2]*1e12
                            +index[:, 1]*1e8 
                            +index[:, 0]*1e4) != 0
        
        ## Dissemination loop
        dif = np.arange(index_bool.shape[0], dtype=int)[index_bool]+1
        dif = np.append(dif, index_bool.shape[0]+1)
        i = 0
        for j in dif:
            if index[i, 2] < 0: # hole
                m2p[1].append(index_1[np.arange(i, j)])
            if index[i, 2] >= 0: # polygon
                m2p[0].append(index_1[np.arange(i, j)])
            i = j
        self.explode_map_schedule = m2p

        # Sort areas
        areas = []
        for poly in self.explode()[0]:
            areas.append(Polygon(poly, False).get_area())
        self.sorted_areas = np.argsort(np.array(areas))[::-1]
        
        # Lock
        self.locked = True