def updatePolyList(self): self.poly_list=[] for i,poly in enumerate(self.cur_polys): edges=GeoFunc.getPolyEdges(poly) poly_item={ "index":i, "pts":poly, "edges":edges, "horizontal":{ "positive":[], "negative":[], "neutral":[] }, "vertical":{ "positive":[], "negative":[], "neutral":[] }, } for edge in edges: netural=self.judgeNeutral(poly,edge) # 分别获得水平和垂直的计算结果 for i,cur in enumerate(["horizontal","vertical"]): if netural[i]==1: poly_item[cur]["positive"].append([edge[0],edge[1]]) elif netural[i]==-1: poly_item[cur]["negative"].append([edge[0],edge[1]]) else: poly_item[cur]["neutral"].append([edge[0],edge[1]]) self.poly_list.append(poly_item)
def getTargetEdges(self): self.target_edges = [[0] * len(self.polys) for _ in range(len(self.polys))] for i in range(len(self.polys)): for j in range(len(self.polys)): if i == j: continue nfp = self.getNFP(i, j) nfp_edges = GeoFunc.getPolyEdges(nfp) point = self.PLACEMENTPOINT[j] if Polygon(nfp).contains( Point(point)) and self._type == "separation": # 如果包含且是拆分,则寻找距离最近的那个 min_distance = 99999999999999 for edge in nfp_edges: left_distance = -self.getRightDistance(edge, point) if left_distance <= min_distance: min_distance = left_distance self.target_edges[i][j] = copy.deepcopy(edge) else: # 如果不包含或者是压缩,则选择最远的 max_distance = -0.00001 for edge in nfp_edges: right_distance = self.getRightDistance(edge, point) if right_distance >= max_distance: max_distance = right_distance self.target_edges[i][j] = copy.deepcopy(edge)
def getAllEdges(self): return GeoFunc.getPolyEdges(self.stationary),GeoFunc.getPolyEdges(self.sliding)