コード例 #1
0
    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)