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))
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