OSDN Git Service

ece4d56b27c9004c98ca0028b69975f1c98cc135
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / model / IKChain.java
1 /*
2  * IK chained bone
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.pmd.model;
9
10 import jp.sourceforge.mikutoga.pmd.model.BoneInfo;
11 import java.util.ArrayList;
12 import java.util.Iterator;
13 import java.util.List;
14
15 /**
16  * IK連鎖ボーン群。
17  */
18 public class IKChain implements Iterable<BoneInfo> {
19
20     private BoneInfo ikBone;
21
22     private int ikDepth;
23     private float ikWeight;
24
25     private final List<BoneInfo> chainList = new ArrayList<BoneInfo>();
26
27     /**
28      * コンストラクタ。
29      */
30     public IKChain(){
31         super();
32         return;
33     }
34
35     /**
36      * IKボーンを設定する。
37      * @param bone IKボーン
38      */
39     public void setIkBone(BoneInfo bone){
40         this.ikBone = bone;
41         return;
42     }
43
44     /**
45      * IKボーンを返す。
46      * @return IKボーン
47      */
48     public BoneInfo getIkBone(){
49         return this.ikBone;
50     }
51
52     /**
53      * IK演算再帰深度を設定する。
54      * @param depth IK演算再帰深度
55      */
56     public void setIKDepth(int depth){
57         this.ikDepth = depth;
58         return;
59     }
60
61     /**
62      * IK演算再帰深度を返す。
63      * @return IK演算再帰深度
64      */
65     public int getIKDepth(){
66         return this.ikDepth;
67     }
68
69     /**
70      * IKウェイトを設定する。
71      * @param weight IKウェイト
72      */
73     public void setIKWeight(float weight){
74         this.ikWeight = weight;
75         return;
76     }
77
78     /**
79      * IKウェイトを返す。
80      * @return IKウェイト
81      */
82     public float getIKWeight(){
83         return this.ikWeight;
84     }
85
86     /**
87      * IK連鎖ボーンリストを返す。
88      * 最初の要素は必ずIK接続先ボーン。それ以降はIK影響下ボーン。
89      * @return IK連鎖ボーンリスト
90      */
91     public List<BoneInfo> getChainedBoneList(){
92         return this.chainList;
93     }
94
95     /**
96      * {@inheritDoc}
97      * @return {@inheritDoc}
98      */
99     @Override
100     public Iterator<BoneInfo> iterator(){
101         return this.chainList.iterator();
102     }
103
104     /**
105      * {@inheritDoc}
106      * @return {@inheritDoc}
107      */
108     @Override
109     public String toString(){
110         StringBuilder result = new StringBuilder();
111
112         result.append("IKChain");
113
114         result.append(" depth:").append(this.ikDepth);
115         result.append(" weight:").append(this.ikWeight);
116
117         result.append(" IKbone:").append(this.ikBone.getBoneName());
118
119         result.append(" [");
120
121         boolean chaindumped = false;
122         for(BoneInfo chain : this.chainList){
123             if(chaindumped) result.append(" => ");
124             result.append(chain.getBoneName());
125             chaindumped = true;
126         }
127
128         result.append("]");
129
130         return result.toString();
131     }
132
133 }