Exemplo n.º 1
0
    def test_split_bezier(self):
        x, y, t, before_bz, after_bz = MBezierUtils.split_bezier(
            127, 0, 0, 127, 0, 3, 12)
        print("x: %s" % x)
        print("y: %s" % y)
        print("t: %s" % t)
        print("before_bz[0]: %s" % before_bz[0])
        print("before_bz[1]: %s" % before_bz[1])
        print("before_bz[2]: %s" % before_bz[2])
        print("before_bz[3]: %s" % before_bz[3])
        print("after_bz[0]: %s" % after_bz[0])
        print("after_bz[1]: %s" % after_bz[1])
        print("after_bz[2]: %s" % after_bz[2])
        print("after_bz[3]: %s" % after_bz[3])

        self.assertTrue(MBezierUtils.is_fit_bezier_mmd(before_bz))
        self.assertFalse(MBezierUtils.is_fit_bezier_mmd(after_bz))
Exemplo n.º 2
0
    def get_split_fill_fno(self, target_bone_name: str, prev_bf: VmdBoneFrame, next_bf: VmdBoneFrame, \
                           x1_idxs: list, y1_idxs: list, x2_idxs: list, y2_idxs: list):
        next_x1v = next_bf.interpolation[x1_idxs[3]]
        next_y1v = next_bf.interpolation[y1_idxs[3]]
        next_x2v = next_bf.interpolation[x2_idxs[3]]
        next_y2v = next_bf.interpolation[y2_idxs[3]]

        if not MBezierUtils.is_fit_bezier_mmd([MVector2D(), MVector2D(next_x1v, next_y1v), MVector2D(next_x2v, next_y2v), MVector2D()]):
            # ベジェ曲線がMMDの範囲内に収まっていない場合、中点で分割
            new_fill_fno, _, _ = MBezierUtils.evaluate_by_t(next_x1v, next_y1v, next_x2v, next_y2v, prev_bf.fno, next_bf.fno, 0.5)

            if prev_bf.fno < new_fill_fno < next_bf.fno:
                return new_fill_fno
        
        # 範囲内でない場合
        return -1