OSDN Git Service

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