Exemplo n.º 1
0
    def tool_down(self, event):
        self._handle = -1
        self._moved = False

        self._bones = self.get_current_bones()

        for i in range(len(self._bones)):
            bone = self._bones[i]

            pos, axis = self.get_world_bone_axis(bone)

            pos += axis * self._frac
            scale = Vector.magnitude(axis) / 10.0

            eventpos = Vector(event.posRaw[0], event.posRaw[1], event.posRaw[2])
            eventaxis = Vector(event.axis[0], event.axis[1], event.axis[2])

            # te.axis is normalized
            # d = |(x2-x1) x (x1-x0)| / |x2-x1|
            # x2 = eventpos, x1 = eventpos + axis, x0 = pos
            # (x2-x1) = -axis
            # (x1-x0) = eventpos+axis - pos
            # |(x2-x1)| = 1
            # (-axis) x (eventpos-pos+axis)
            d = Vector.magnitude(Vector.cross(-eventaxis, eventpos - pos + eventaxis))

            if d <= scale:
                self._handle = i
                return 1

        return 0
Exemplo n.º 2
0
    def tool_draw(self, ca):
        self._bones = self.get_current_bones()
        cur_time = lwsdk.LWInterfaceInfo().curTime

        for bone in self._bones:
            if bone.type == lwsdk.LWBONETYPE_ZAXIS:
                len = bone.restlength;
                dir = Vector(0,0,1)

                ca.setCSysItem(ca.dispData, bone.id);

            else:

                pos = self._item_info.param(bone.id, lwsdk.LWIP_POSITION, cur_time)
                len = Vector.magnitude(pos)
                dir = pos / len;

                ca.setCSysItem(ca.dispData, bone.parent);

            ca.setDrawMode(ca.dispData, 8 + 4)

            q1 = Vector(-0.1,-0.1,0)
            q2 = Vector( 0.1,-0.1,0)
            q3 = Vector( 0.1, 0.1,0)
            q4 = Vector(-0.1, 0.1,0)

            q1 += dir * self._frac
            q1 *= len
            q2 += dir * self._frac
            q2 *= len
            q3 += dir * self._frac
            q3 *= len
            q4 += dir * self._frac
            q4 *= len

            # color can be a lwsdk.Vector, lwsdk.Color or a Python sequence
            ca.setColor(ca.dispData, [1.0, 0.3, 0.1, 1.0])

            ca.line(ca.dispData, q1, q2, lwsdk.LWCSYS_OBJECT)
            ca.line(ca.dispData, q2, q3, lwsdk.LWCSYS_OBJECT)
            ca.line(ca.dispData, q3, q4, lwsdk.LWCSYS_OBJECT)
            ca.line(ca.dispData, q4, q1, lwsdk.LWCSYS_OBJECT)
            ca.line(ca.dispData, q1, q3, lwsdk.LWCSYS_OBJECT)
            ca.line(ca.dispData, q2, q4, lwsdk.LWCSYS_OBJECT)

            ca.setColor(ca.dispData, [1.0, 0.3, 0.1, 0.2])
            ca.quad(ca.dispData, q1, q2, q3, q4, lwsdk.LWCSYS_OBJECT)