def BUBBLE_centers(self, perim, contents, base_first=False): perim = perim.verts a = self.a perim_xyz = [a.nodes[i]['xyz'] for i in perim] remain = list(perim)+[i for i in contents \ if (not i in perim) and geometry.spherePolygonContains(perim_xyz, a.nodes[i]['xyz']) ] #print "BUBBLE_centers = ",perim, remain # choose max keys portal list_keys = np.array([a.nodes[i]['keys'] for i in remain]) maxkey_point = np.argmax(list_keys) #print "max keys portal : ",remain[maxkey_point]," numkey = ",list_keys[maxkey_point] # compute distances of other points with him args_closest = nearest_to_X_in_Y(a, remain[maxkey_point], remain)[0] #print "args_closest : ",args_closest # keep only the first we can link args_closest = args_closest[0:list_keys[maxkey_point] + 8] # 8 out_link and in with keys #print "args_closest : ",args_closest closest_pts = [remain[i] for i in args_closest] #print "closest_pts = ",closest_pts # get perim of this area : pts = np.array([a.node[i]['xy'] for i in closest_pts]) args_new_perim = np.array(geometry.getPerim(pts)) #print "args_new_perim : ",args_new_perim new_perim = [closest_pts[i] for i in args_new_perim] if base_first and (perim[0] in new_perim) and (perim[1] in new_perim): for i in range(1, len(new_perim)): if (perim[0] == new_perim[0]) and (perim[1] == new_perim[1]): break new_perim = new_perim[-1:] + new_perim[:-1] #rotate -1 return np.setdiff1d(remain, closest_pts), new_perim, remain[maxkey_point]
def maxFields(a): n = a.order() pts = np.array([ a.node[i]['xy'] for i in xrange(n) ]) perim = np.array(geometry.getPerim(pts)) if not triangulate(a,perim): return False flipSome(a) return True