OSDN Git Service

5b10d751ab83aef7c92b457826c8448c299ed518
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / pmdloader / JointBuilder.java
1 /*\r
2  * building joint information\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2010 MikuToga Partners\r
6  */\r
7 \r
8 package jp.sourceforge.mikutoga.pmd.pmdloader;\r
9 \r
10 import jp.sourceforge.mikutoga.corelib.ListUtil;\r
11 import java.util.Iterator;\r
12 import java.util.List;\r
13 import jp.sourceforge.mikutoga.parser.ParseStage;\r
14 import jp.sourceforge.mikutoga.parser.pmd.PmdJointHandler;\r
15 import jp.sourceforge.mikutoga.pmd.Deg3d;\r
16 import jp.sourceforge.mikutoga.pmd.JointInfo;\r
17 import jp.sourceforge.mikutoga.pmd.PmdModel;\r
18 import jp.sourceforge.mikutoga.pmd.Pos3d;\r
19 import jp.sourceforge.mikutoga.pmd.Rad3d;\r
20 import jp.sourceforge.mikutoga.pmd.RigidInfo;\r
21 import jp.sourceforge.mikutoga.pmd.TripletRange;\r
22 \r
23 /**\r
24  * ジョイント関係の通知をパーサから受け取る。\r
25  */\r
26 class JointBuilder implements PmdJointHandler {\r
27 \r
28     private final List<RigidInfo> rigidList;\r
29 \r
30     private final List<JointInfo> jointList;\r
31     private Iterator<JointInfo> jointIt;\r
32     private JointInfo currentJoint = null;\r
33 \r
34     /**\r
35      * コンストラクタ。\r
36      * @param model モデル\r
37      */\r
38     JointBuilder(PmdModel model){\r
39         super();\r
40         this.rigidList = model.getRigidList();\r
41         this.jointList = model.getJointList();\r
42         return;\r
43     }\r
44 \r
45     /**\r
46      * {@inheritDoc}\r
47      * @param stage {@inheritDoc}\r
48      * @param loops {@inheritDoc}\r
49      */\r
50     @Override\r
51     public void loopStart(ParseStage stage, int loops){\r
52         assert stage == PmdJointHandler.JOINT_LIST;\r
53 \r
54         ListUtil.prepareDefConsList(this.jointList, JointInfo.class, loops);\r
55 \r
56         this.jointIt = this.jointList.iterator();\r
57         if(this.jointIt.hasNext()){\r
58             this.currentJoint = this.jointIt.next();\r
59         }\r
60 \r
61         return;\r
62     }\r
63 \r
64     /**\r
65      * {@inheritDoc}\r
66      * @param stage {@inheritDoc}\r
67      */\r
68     @Override\r
69     public void loopNext(ParseStage stage){\r
70         assert stage == PmdJointHandler.JOINT_LIST;\r
71 \r
72         if(this.jointIt.hasNext()){\r
73             this.currentJoint = this.jointIt.next();\r
74         }\r
75 \r
76         return;\r
77     }\r
78 \r
79     /**\r
80      * {@inheritDoc}\r
81      * @param stage {@inheritDoc}\r
82      */\r
83     @Override\r
84     public void loopEnd(ParseStage stage){\r
85         assert stage == PmdJointHandler.JOINT_LIST;\r
86         return;\r
87     }\r
88 \r
89     /**\r
90      * {@inheritDoc}\r
91      * @param jointName {@inheritDoc}\r
92      */\r
93     @Override\r
94     public void pmdJointName(String jointName){\r
95         this.currentJoint.getJointName().setPrimaryText(jointName);\r
96         return;\r
97     }\r
98 \r
99     /**\r
100      * {@inheritDoc}\r
101      * @param rigidIdA {@inheritDoc}\r
102      * @param rigidIdB {@inheritDoc}\r
103      */\r
104     @Override\r
105     public void pmdJointLink(int rigidIdA, int rigidIdB){\r
106         RigidInfo rigidA = this.rigidList.get(rigidIdA);\r
107         RigidInfo rigidB = this.rigidList.get(rigidIdB);\r
108         this.currentJoint.setRigidPair(rigidA, rigidB);\r
109         return;\r
110     }\r
111 \r
112     /**\r
113      * {@inheritDoc}\r
114      * @param posX {@inheritDoc}\r
115      * @param posY {@inheritDoc}\r
116      * @param posZ {@inheritDoc}\r
117      */\r
118     @Override\r
119     public void pmdJointPosition(float posX, float posY, float posZ){\r
120         Pos3d position = this.currentJoint.getPosition();\r
121         position.setXPos(posX);\r
122         position.setYPos(posY);\r
123         position.setZPos(posZ);\r
124         return;\r
125     }\r
126 \r
127     /**\r
128      * {@inheritDoc}\r
129      * @param rotX {@inheritDoc}\r
130      * @param rotY {@inheritDoc}\r
131      * @param rotZ {@inheritDoc}\r
132      */\r
133     @Override\r
134     public void pmdJointRotation(float rotX, float rotY, float rotZ){\r
135         Rad3d rotation = this.currentJoint.getRotation();\r
136         rotation.setXRad(rotX);\r
137         rotation.setYRad(rotY);\r
138         rotation.setZRad(rotZ);\r
139         return;\r
140     }\r
141 \r
142     /**\r
143      * {@inheritDoc}\r
144      * @param posXlim1 {@inheritDoc}\r
145      * @param posXlim2 {@inheritDoc}\r
146      * @param posYlim1 {@inheritDoc}\r
147      * @param posYlim2 {@inheritDoc}\r
148      * @param posZlim1 {@inheritDoc}\r
149      * @param posZlim2 {@inheritDoc}\r
150      */\r
151     @Override\r
152     public void pmdPositionLimit(float posXlim1, float posXlim2,\r
153                                  float posYlim1, float posYlim2,\r
154                                  float posZlim1, float posZlim2){\r
155         TripletRange range = this.currentJoint.getPositionRange();\r
156         range.setXRange(posXlim1, posXlim2);\r
157         range.setYRange(posYlim1, posYlim2);\r
158         range.setZRange(posZlim1, posZlim2);\r
159         return;\r
160     }\r
161 \r
162     /**\r
163      * {@inheritDoc}\r
164      * @param rotXlim1 {@inheritDoc}\r
165      * @param rotXlim2 {@inheritDoc}\r
166      * @param rotYlim1 {@inheritDoc}\r
167      * @param rotYlim2 {@inheritDoc}\r
168      * @param rotZlim1 {@inheritDoc}\r
169      * @param rotZlim2 {@inheritDoc}\r
170      */\r
171     @Override\r
172     public void pmdRotationLimit(float rotXlim1, float rotXlim2,\r
173                                  float rotYlim1, float rotYlim2,\r
174                                  float rotZlim1, float rotZlim2){\r
175         TripletRange range = this.currentJoint.getRotationRange();\r
176         range.setXRange(rotXlim1, rotXlim2);\r
177         range.setYRange(rotYlim1, rotYlim2);\r
178         range.setZRange(rotZlim1, rotZlim2);\r
179         return;\r
180     }\r
181 \r
182     /**\r
183      * {@inheritDoc}\r
184      * @param elasticPosX {@inheritDoc}\r
185      * @param elasticPosY {@inheritDoc}\r
186      * @param elasticPosZ {@inheritDoc}\r
187      */\r
188     @Override\r
189     public void pmdElasticPosition(float elasticPosX,\r
190                                    float elasticPosY,\r
191                                    float elasticPosZ){\r
192         Pos3d position = this.currentJoint.getElasticPosition();\r
193         position.setXPos(elasticPosX);\r
194         position.setYPos(elasticPosY);\r
195         position.setZPos(elasticPosZ);\r
196         return;\r
197     }\r
198 \r
199     /**\r
200      * {@inheritDoc}\r
201      * @param elasticRotX {@inheritDoc}\r
202      * @param elasticRotY {@inheritDoc}\r
203      * @param elasticRotZ {@inheritDoc}\r
204      */\r
205     @Override\r
206     public void pmdElasticRotation(float elasticRotX,\r
207                                    float elasticRotY,\r
208                                    float elasticRotZ){\r
209         Deg3d rotation = this.currentJoint.getElasticRotation();\r
210         rotation.setXDeg(elasticRotX);\r
211         rotation.setYDeg(elasticRotY);\r
212         rotation.setZDeg(elasticRotZ);\r
213         return;\r
214     }\r
215 \r
216 }\r