def orderCorners(self, orderedBlocks, corners): time = min(self.contactData.keys()) directionSign = 0 for i in range(len(orderedBlocks)): x1 = self.blockData[time][orderedBlocks[i-2]]['x'] y1 = self.blockData[time][orderedBlocks[i-2]]['y'] x2 = self.blockData[time][orderedBlocks[i-1]]['x'] y2 = self.blockData[time][orderedBlocks[i-1]]['y'] x3 = self.blockData[time][orderedBlocks[i]]['x'] y3 = self.blockData[time][orderedBlocks[i]]['y'] xVec1 = x1-x2 yVec1 = y1-y2 xVec2 = x3-x2 yVec2 = y3-y2 vecAngle = Common.angle(xVec1, yVec1, xVec2, yVec2) vecSign = xVec1*yVec2-xVec2*yVec1 directionSign += vecSign if directionSign > 0: directionSign = -directionSign orderedBlocks = orderedBlocks[::-1] corners = copy.deepcopy(corners) orderedBlocks = copy.deepcopy(orderedBlocks) newCorners = [] for i in range(len(orderedBlocks)): allBlockCorners = self.blockData[time][orderedBlocks[i]]['corners'] blockCorners = Common.listIntersection(corners, allBlockCorners) orderedBlockCorners = [] for corner in allBlockCorners: if corner in blockCorners: orderedBlockCorners.append(corner) blockCorners = orderedBlockCorners blockDirection = 0 for j in range(len(allBlockCorners)): x1 = self.gridPointData[time][self.cornerData[time][allBlockCorners[j-2]]['gridPoint']]['x'] y1 = self.gridPointData[time][self.cornerData[time][allBlockCorners[j-2]]['gridPoint']]['y'] x2 = self.gridPointData[time][self.cornerData[time][allBlockCorners[j-1]]['gridPoint']]['x'] y2 = self.gridPointData[time][self.cornerData[time][allBlockCorners[j-1]]['gridPoint']]['y'] x3 = self.gridPointData[time][self.cornerData[time][allBlockCorners[j]]['gridPoint']]['x'] y3 = self.gridPointData[time][self.cornerData[time][allBlockCorners[j]]['gridPoint']]['y'] xVec1 = x1-x2 yVec1 = y1-y2 xVec2 = x3-x2 yVec2 = y3-y2 vecAngle = Common.angle(xVec1, yVec1, xVec2, yVec2) vecSign = xVec1*yVec2-xVec2*yVec1 blockDirection += vecSign if math.copysign(1, blockDirection) != math.copysign(1, directionSign): blockCorners = blockCorners[::-1] previousBlockCorners = self.blockData[time][orderedBlocks[i-1]]['corners'] startingCornerDistance = -1 for corner in blockCorners: gridPoint = self.cornerData[time][corner]['gridPoint'] for previousCorner in previousBlockCorners: previousGridPoint = self.cornerData[time][previousCorner]['gridPoint'] xDistance = self.gridPointData[time][previousGridPoint]['x'] - self.gridPointData[time][gridPoint]['x'] yDistance = self.gridPointData[time][previousGridPoint]['y'] - self.gridPointData[time][gridPoint]['y'] distance = math.hypot(xDistance, yDistance) if startingCornerDistance < 0 or distance < startingCornerDistance: startingCornerDistance = distance startingCorner = corner index = blockCorners.index(startingCorner) blockCorners = blockCorners[index:] + blockCorners[:index] newCorners += blockCorners return newCorners