def calculatePoints(self): # Filter the points, first we get the undermost points, and then, # The point which less angle from z+ vector by y+ vector has. global epsilon vertices = [list(p.point().position()) for p in self.prim.vertices()] lessy = vertices[0][1] mayPoints = [] for point in vertices: if((point[1] - epsilon) < lessy): mayPoints.append(point) if(point[1] < (lessy - epsilon)): lessy = point[1] mayPoints = [point] # We construct vectors from points to determine which is leftmost, so we delete 'y' component minAngle = 2 * math.pi + epsilon for point in mayPoints: vec = GeoMath.vecNormalize([point[0], 0, point[2]]) angle = GeoMath.angleBetweenPointsByVec([0, 0, 1], vec, [0, 1, 0]) if(angle < minAngle): minAngle = angle minPoint = point index = vertices.index(minPoint) previousPoint = vertices[index - 1] pointWhichIsRelative = minPoint nextPoint = vertices[(index + 1) % len(vertices)] self.set_previous_point(previousPoint) self.set_point_which_is_relative(pointWhichIsRelative) self.set_next_point(nextPoint)