OSDN Git Service

e695d8e72d2d55f99c81a974904ded828657630c
[mikutoga/Vmd2XML.git] / src / main / java / jp / sfjp / mikutoga / vmd / model / PosCurve.java
1 /*
2  * position interpolation curve
3  *
4  * License : The MIT License
5  * Copyright(c) 2011 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.vmd.model;
9
10 import java.text.MessageFormat;
11 import java.util.ArrayList;
12 import java.util.Iterator;
13 import java.util.List;
14
15 /**
16  * 3次元位置移動のモーション補間曲線情報。
17  * <p>XYZ3軸それぞれに対応するベジェ曲線を3本持つ。
18  */
19 public class PosCurve implements Iterable<BezierParam> {
20
21     private static final int IT_SZ = 3;
22     private static final String MSG_TXT =
23             "X-Bezier {0}\n" + "Y-Bezier {1}\n" + "Z-Bezier {2}";
24
25
26     private final BezierParam intpltXpos = new BezierParam();
27     private final BezierParam intpltYpos = new BezierParam();
28     private final BezierParam intpltZpos = new BezierParam();
29
30
31     /**
32      * コンストラクタ。
33      */
34     public PosCurve(){
35         super();
36         return;
37     }
38
39
40     /**
41      * {@inheritDoc}
42      * X軸、Y軸、Z軸の順で補間曲線情報を列挙する。
43      * @return {@inheritDoc} 3要素を返す列挙子
44      */
45     @Override
46     public Iterator<BezierParam> iterator(){
47         List<BezierParam> list;
48         list = new ArrayList<BezierParam>(IT_SZ);
49         list.add(this.intpltXpos);
50         list.add(this.intpltYpos);
51         list.add(this.intpltZpos);
52         return list.iterator();
53     }
54
55     /**
56      * ボーンX軸移動の補間曲線情報を返す。
57      * @return ボーンX軸移動の補間曲線情報
58      */
59     public BezierParam getIntpltXpos(){
60         return this.intpltXpos;
61     }
62
63     /**
64      * ボーンY軸移動の補間曲線情報を返す。
65      * @return ボーンY軸移動の補間曲線情報
66      */
67     public BezierParam getIntpltYpos(){
68         return this.intpltYpos;
69     }
70
71     /**
72      * ボーンZ軸移動の補間曲線情報を返す。
73      * @return ボーンZ軸移動の補間曲線情報
74      */
75     public BezierParam getIntpltZpos(){
76         return this.intpltZpos;
77     }
78
79     /**
80      * 3軸ともMMDデフォルトの直線補間か判定する。
81      * @return 3軸ともMMDデフォルトの直線補間ならtrue
82      */
83     public boolean isDefaultLinear(){
84         if( ! this.intpltXpos.isDefaultLinear() ) return false;
85         if( ! this.intpltYpos.isDefaultLinear() ) return false;
86         if( ! this.intpltZpos.isDefaultLinear() ) return false;
87
88         return true;
89     }
90
91     /**
92      * {@inheritDoc}
93      * @return {@inheritDoc}
94      */
95     @Override
96     public String toString(){
97         String msg;
98         msg = MessageFormat.format(MSG_TXT,
99                 this.intpltXpos, this.intpltYpos, this.intpltZpos );
100
101         return msg;
102     }
103
104 }