def getPrimsSharingGroupOfEdges(self, prim, setNotDestroyed, setPartiallyDestroyed, setTotDestroyed): validPrim1 = None validPrim2 = None if(self.isThisPrimMaybeValid(prim)): primsSharedInPathSet = GeoMath.getConnectedPrims(prim, self.path) primsSharedInGeneral = GeoMath.getConnectedPrims(prim, setPartiallyDestroyed) primsSharedInGeneral.extend(GeoMath.getConnectedPrims(prim, setNotDestroyed)) primsSharedInGeneral.extend(GeoMath.getConnectedPrims(prim, setTotDestroyed)) setOfEdgesToTrack = [] for primSharedInGeneral in primsSharedInGeneral: setOfEdgesToTrack.extend(GeoMath.getEdgesBetweenPrims(prim, primSharedInGeneral)) excluded = [] for primSharedPath in primsSharedInPathSet: edgesSharedWithPrim = GeoMath.getEdgesBetweenPrims(primSharedPath, prim) excluded.extend(edgesSharedWithPrim) # We need some first edge and last edge for track edges between this edges, excluding edges # (included in group "excluded") in other prims that share some edge with central prim indexPrim = self.path.index(prim) if(indexPrim == 0): prevIndexPrim = len(self.path) - 1 else: prevIndexPrim = indexPrim - 1 edgesSharedWithPrim1 = GeoMath.getEdgesBetweenPrims(self.path[(indexPrim + 1) % len(self.path)], prim) edgesSharedWithPrim2 = GeoMath.getEdgesBetweenPrims(self.path[prevIndexPrim], prim) logging.debug("edges shared curPrim1: %s with prim: %s, edges: %s", str(self.path[(indexPrim + 1) % len(self.path)].number()), str(prim.number()), str(edgesSharedWithPrim1)) logging.debug("edges shared curPrim2: %s with prim: %s, edges: %s", str(self.path[prevIndexPrim].number()), str(prim.number()), str(edgesSharedWithPrim2)) groupEdges1, groupEdges2 = GeoMath.trackEdges(edgesSharedWithPrim1[0], setOfEdgesToTrack, edgesSharedWithPrim2[0], excluded) # Find two good prims containing one of the group of edges index = 0 while(index < len(primsSharedInGeneral) and not (validPrim1 and validPrim2)): curPrim = primsSharedInGeneral[index] conEdges = GeoMath.getEdgesBetweenPrims(curPrim, prim) if(not validPrim1): for edge in groupEdges1: if(GeoMath.sameEdge(conEdges[0], edge)): validPrim1 = curPrim break if (not validPrim2): for edge in groupEdges2: if(GeoMath.sameEdge(conEdges[0], edge)): validPrim2 = curPrim break index += 1 return validPrim1, validPrim2
def getPrimsSharingGroupOfEdges(self, prim, setNotDestroyed, setPartiallyDestroyed, setTotDestroyed): validPrim1 = None validPrim2 = None if (self.isThisPrimMaybeValid(prim)): primsSharedInPathSet = GeoMath.getConnectedPrims(prim, self.path) primsSharedInGeneral = GeoMath.getConnectedPrims( prim, setPartiallyDestroyed) primsSharedInGeneral.extend( GeoMath.getConnectedPrims(prim, setNotDestroyed)) primsSharedInGeneral.extend( GeoMath.getConnectedPrims(prim, setTotDestroyed)) setOfEdgesToTrack = [] for primSharedInGeneral in primsSharedInGeneral: setOfEdgesToTrack.extend( GeoMath.getEdgesBetweenPrims(prim, primSharedInGeneral)) excluded = [] for primSharedPath in primsSharedInPathSet: edgesSharedWithPrim = GeoMath.getEdgesBetweenPrims( primSharedPath, prim) excluded.extend(edgesSharedWithPrim) # We need some first edge and last edge for track edges between this edges, excluding edges # (included in group "excluded") in other prims that share some edge with central prim indexPrim = self.path.index(prim) if (indexPrim == 0): prevIndexPrim = len(self.path) - 1 else: prevIndexPrim = indexPrim - 1 edgesSharedWithPrim1 = GeoMath.getEdgesBetweenPrims( self.path[(indexPrim + 1) % len(self.path)], prim) edgesSharedWithPrim2 = GeoMath.getEdgesBetweenPrims( self.path[prevIndexPrim], prim) logging.debug( "edges shared curPrim1: %s with prim: %s, edges: %s", str(self.path[(indexPrim + 1) % len(self.path)].number()), str(prim.number()), str(edgesSharedWithPrim1)) logging.debug("edges shared curPrim2: %s with prim: %s, edges: %s", str(self.path[prevIndexPrim].number()), str(prim.number()), str(edgesSharedWithPrim2)) groupEdges1, groupEdges2 = GeoMath.trackEdges( edgesSharedWithPrim1[0], setOfEdgesToTrack, edgesSharedWithPrim2[0], excluded) # Find two good prims containing one of the group of edges index = 0 while (index < len(primsSharedInGeneral) and not (validPrim1 and validPrim2)): curPrim = primsSharedInGeneral[index] conEdges = GeoMath.getEdgesBetweenPrims(curPrim, prim) if (not validPrim1): for edge in groupEdges1: if (GeoMath.sameEdge(conEdges[0], edge)): validPrim1 = curPrim break if (not validPrim2): for edge in groupEdges2: if (GeoMath.sameEdge(conEdges[0], edge)): validPrim2 = curPrim break index += 1 return validPrim1, validPrim2