Example #1
0
def trackball(p1x, p1y, p2x, p2y, r):
    TRACKBALLSIZE = r

#float a[3]; /* Axis of rotation */
#float phi;  /* how much to rotate about axis */
#float p1[3], p2[3], d[3];
#float t;

    if (p1x == p2x and p1y == p2y):
        return [0.0, 0.0, 0.0, 1.0]

    p1 = [p1x, p1y, project_to_sphere(TRACKBALLSIZE, p1x, p1y)]
    p2 = [p2x, p2y, project_to_sphere(TRACKBALLSIZE, p2x, p2y)]
    a = stltool.cross(p2, p1)

    d = map(lambda x, y: x - y, p1, p2)
    t = math.sqrt(sum(map(lambda x: x * x, d))) / (2.0 * TRACKBALLSIZE)

    if (t > 1.0):
        t = 1.0
    if (t < -1.0):
        t = -1.0
    phi = 2.0 * math.asin(t)

    return axis_to_quat(a, phi)
Example #2
0
def trackball(p1x, p1y, p2x, p2y, r):
    TRACKBALLSIZE = r

    #float a[3]; /* Axis of rotation */
    #float phi;  /* how much to rotate about axis */
    #float p1[3], p2[3], d[3];
    #float t;

    if (p1x == p2x and p1y == p2y):
        return [0.0, 0.0, 0.0, 1.0]

    p1 = [p1x, p1y, project_to_sphere(TRACKBALLSIZE, p1x, p1y)]
    p2 = [p2x, p2y, project_to_sphere(TRACKBALLSIZE, p2x, p2y)]
    a = stltool.cross(p2, p1)

    d = map(lambda x, y: x - y, p1, p2)
    t = math.sqrt(sum(map(lambda x: x * x, d))) / (2.0 * TRACKBALLSIZE)

    if (t > 1.0):
        t = 1.0
    if (t < -1.0):
        t = -1.0
    phi = 2.0 * math.asin(t)

    return axis_to_quat(a, phi)
Example #3
0
 def vrot(v, axis, angle):
     kxv = stltool.cross(axis, v)
     kdv = sum(map(lambda x, y: x * y, axis, v))
     return list(
         map(
             lambda x, y, z: x * math.cos(angle) + y * math.sin(
                 angle) + z * kdv * (1.0 - math.cos(angle)), v, kxv,
             axis))
Example #4
0
 def vrot(v, axis, angle):
     kxv = stltool.cross(axis, v)
     kdv = sum(map(lambda x, y: x * y, axis, v))
     return map(
         lambda x, y, z: x * math.cos(angle) + y * math.sin(angle) + z * kdv * (1.0 - math.cos(angle)),
         v,
         kxv,
         axis,
     )
Example #5
0
    def genline(self, i, h, w):
        S = i[0][:3]
        E = i[1][:3]
        v = map(lambda x, y: x - y, E, S)
        vlen = math.sqrt(float(sum(map(lambda a: a * a, v[:3]))))

        if vlen == 0:
            vlen = 0.01
        sq2 = math.sqrt(2.0) / 2.0
        htw = float(h) / w
        d = w / 2.0
        if i[1][3] == i[0][3]:
            d = 0.05
        points = [
            [d, 0, 0],
            [sq2 * d, sq2 * d, 0],
            [0, d, 0],
            [-sq2 * d, sq2 * d, 0],
            [-d, 0, 0],
            [-sq2 * d, -sq2 * d, 0],
            [0, -d, 0],
            [sq2 * d, -sq2 * d, 0],
        ]
        axis = stltool.cross([0, 0, 1], v)
        alen = math.sqrt(float(sum(map(lambda a: a * a, v[:3]))))
        if alen > 0:
            axis = map(lambda m: m / alen, axis)
            angle = math.acos(v[2] / vlen)

            def vrot(v, axis, angle):
                kxv = stltool.cross(axis, v)
                kdv = sum(map(lambda x, y: x * y, axis, v))
                return map(
                    lambda x, y, z: x * math.cos(angle) + y * math.sin(angle) + z * kdv * (1.0 - math.cos(angle)),
                    v,
                    kxv,
                    axis,
                )

            points = map(lambda x: vrot(x, axis, angle), points)
        points = map(lambda x: [x[0], x[1], htw * x[2]], points)

        def vadd(v, o):
            return map(sum, zip(v, o))

        spoints = map(lambda x: vadd(S, x), points)
        epoints = map(lambda x: vadd(E, x), points)
        return spoints, epoints, S, E
Example #6
0
    def genline(self, i, h, w):
        S = i[0][:3]
        E = i[1][:3]
        v = map(lambda x, y: x - y, E, S)
        vlen = math.sqrt(float(sum(map(lambda a: a * a, v[:3]))))

        if vlen == 0:
            vlen = 0.01
        sq2 = math.sqrt(2.0) / 2.0
        htw = float(h) / w
        d = w / 2.0
        if i[1][3] == i[0][3]:
            d = 0.05
        points = [[d, 0, 0],
                [sq2 * d, sq2 * d, 0],
                [0, d, 0],
                [-sq2 * d, sq2 * d, 0],
                [-d, 0, 0],
                [-sq2 * d, -sq2 * d, 0],
                [0, -d, 0],
                [sq2 * d, -sq2 * d, 0]
            ]
        axis = stltool.cross([0, 0, 1], v)
        alen = math.sqrt(float(sum(map(lambda a: a * a, v[:3]))))
        if alen > 0:
            axis = map(lambda m: m / alen, axis)
            angle = math.acos(v[2] / vlen)

            def vrot(v, axis, angle):
                kxv = stltool.cross(axis, v)
                kdv = sum(map(lambda x, y: x * y, axis, v))
                return map(lambda x, y, z: x * math.cos(angle) + y * math.sin(angle) + z * kdv * (1.0 - math.cos(angle)), v, kxv, axis)

            points = map(lambda x: vrot(x, axis, angle), points)
        points = map(lambda x: [x[0], x[1], htw * x[2]], points)

        def vadd(v, o):
            return map(sum, zip(v, o))
        spoints = map(lambda x: vadd(S, x), points)
        epoints = map(lambda x: vadd(E, x), points)
        return spoints, epoints, S, E
Example #7
0
    def genline(self, i, h, w):
        S = i[0][:3]
        E = i[1][:3]
        v = list(map(lambda x, y: x - y, E, S))
        vlen = math.sqrt(float(sum([a * a for a in v[:3]])))

        if vlen == 0:
            vlen = 0.01
        sq2 = math.sqrt(2.0) / 2.0
        htw = float(h) / w
        d = w / 2.0
        if i[1][3] == i[0][3]:
            d = 0.05
        points = [[d, 0, 0], [sq2 * d, sq2 * d, 0], [0, d, 0],
                  [-sq2 * d, sq2 * d, 0], [-d, 0, 0], [-sq2 * d, -sq2 * d, 0],
                  [0, -d, 0], [sq2 * d, -sq2 * d, 0]]
        axis = stltool.cross([0, 0, 1], v)
        alen = math.sqrt(float(sum([a * a for a in v[:3]])))
        if alen > 0:
            axis = [m / alen for m in axis]
            angle = math.acos(v[2] / vlen)

            def vrot(v, axis, angle):
                kxv = stltool.cross(axis, v)
                kdv = sum(map(lambda x, y: x * y, axis, v))
                return list(
                    map(
                        lambda x, y, z: x * math.cos(angle) + y * math.sin(
                            angle) + z * kdv * (1.0 - math.cos(angle)), v, kxv,
                        axis))

            points = [vrot(x, axis, angle) for x in points]
        points = [[x[0], x[1], htw * x[2]] for x in points]

        def vadd(v, o):
            return list(map(sum, list(zip(v, o))))

        spoints = [vadd(S, x) for x in points]
        epoints = [vadd(E, x) for x in points]
        return spoints, epoints, S, E