OSDN Git Service

PMD出力機能及びXML入出力機能のソースをマージ
[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     public void loopStart(ParseStage stage, int loops){\r
51         assert stage == PmdJointHandler.JOINT_LIST;\r
52 \r
53         ListUtil.prepareDefConsList(this.jointList, JointInfo.class, loops);\r
54 \r
55         this.jointIt = this.jointList.iterator();\r
56         if(this.jointIt.hasNext()){\r
57             this.currentJoint = this.jointIt.next();\r
58         }\r
59 \r
60         return;\r
61     }\r
62 \r
63     /**\r
64      * {@inheritDoc}\r
65      * @param stage {@inheritDoc}\r
66      */\r
67     public void loopNext(ParseStage stage){\r
68         assert stage == PmdJointHandler.JOINT_LIST;\r
69 \r
70         if(this.jointIt.hasNext()){\r
71             this.currentJoint = this.jointIt.next();\r
72         }\r
73 \r
74         return;\r
75     }\r
76 \r
77     /**\r
78      * {@inheritDoc}\r
79      * @param stage {@inheritDoc}\r
80      */\r
81     public void loopEnd(ParseStage stage){\r
82         assert stage == PmdJointHandler.JOINT_LIST;\r
83         return;\r
84     }\r
85 \r
86     /**\r
87      * {@inheritDoc}\r
88      * @param jointName {@inheritDoc}\r
89      */\r
90     public void pmdJointName(String jointName){\r
91         this.currentJoint.getJointName().setPrimaryText(jointName);\r
92         return;\r
93     }\r
94 \r
95     /**\r
96      * {@inheritDoc}\r
97      * @param rigidIdA {@inheritDoc}\r
98      * @param rigidIdB {@inheritDoc}\r
99      */\r
100     public void pmdJointLink(int rigidIdA, int rigidIdB){\r
101         RigidInfo rigidA = this.rigidList.get(rigidIdA);\r
102         RigidInfo rigidB = this.rigidList.get(rigidIdB);\r
103         this.currentJoint.setRigidPair(rigidA, rigidB);\r
104         return;\r
105     }\r
106 \r
107     /**\r
108      * {@inheritDoc}\r
109      * @param posX {@inheritDoc}\r
110      * @param posY {@inheritDoc}\r
111      * @param posZ {@inheritDoc}\r
112      */\r
113     public void pmdJointPosition(float posX, float posY, float posZ){\r
114         Pos3d position = this.currentJoint.getPosition();\r
115         position.setXPos(posX);\r
116         position.setYPos(posY);\r
117         position.setZPos(posZ);\r
118         return;\r
119     }\r
120 \r
121     /**\r
122      * {@inheritDoc}\r
123      * @param rotX {@inheritDoc}\r
124      * @param rotY {@inheritDoc}\r
125      * @param rotZ {@inheritDoc}\r
126      */\r
127     public void pmdJointRotation(float rotX, float rotY, float rotZ){\r
128         Rad3d rotation = this.currentJoint.getRotation();\r
129         rotation.setXRad(rotX);\r
130         rotation.setYRad(rotY);\r
131         rotation.setZRad(rotZ);\r
132         return;\r
133     }\r
134 \r
135     /**\r
136      * {@inheritDoc}\r
137      * @param posXlim1 {@inheritDoc}\r
138      * @param posXlim2 {@inheritDoc}\r
139      * @param posYlim1 {@inheritDoc}\r
140      * @param posYlim2 {@inheritDoc}\r
141      * @param posZlim1 {@inheritDoc}\r
142      * @param posZlim2 {@inheritDoc}\r
143      */\r
144     public void pmdPositionLimit(float posXlim1, float posXlim2,\r
145                                  float posYlim1, float posYlim2,\r
146                                  float posZlim1, float posZlim2){\r
147         TripletRange range = this.currentJoint.getPositionRange();\r
148         range.setXRange(posXlim1, posXlim2);\r
149         range.setYRange(posYlim1, posYlim2);\r
150         range.setZRange(posZlim1, posZlim2);\r
151         return;\r
152     }\r
153 \r
154     /**\r
155      * {@inheritDoc}\r
156      * @param rotXlim1 {@inheritDoc}\r
157      * @param rotXlim2 {@inheritDoc}\r
158      * @param rotYlim1 {@inheritDoc}\r
159      * @param rotYlim2 {@inheritDoc}\r
160      * @param rotZlim1 {@inheritDoc}\r
161      * @param rotZlim2 {@inheritDoc}\r
162      */\r
163     public void pmdRotationLimit(float rotXlim1, float rotXlim2,\r
164                                  float rotYlim1, float rotYlim2,\r
165                                  float rotZlim1, float rotZlim2){\r
166         TripletRange range = this.currentJoint.getRotationRange();\r
167         range.setXRange(rotXlim1, rotXlim2);\r
168         range.setYRange(rotYlim1, rotYlim2);\r
169         range.setZRange(rotZlim1, rotZlim2);\r
170         return;\r
171     }\r
172 \r
173     /**\r
174      * {@inheritDoc}\r
175      * @param elasticPosX {@inheritDoc}\r
176      * @param elasticPosY {@inheritDoc}\r
177      * @param elasticPosZ {@inheritDoc}\r
178      */\r
179     public void pmdElasticPosition(float elasticPosX,\r
180                                    float elasticPosY,\r
181                                    float elasticPosZ){\r
182         Pos3d position = this.currentJoint.getElasticPosition();\r
183         position.setXPos(elasticPosX);\r
184         position.setYPos(elasticPosY);\r
185         position.setZPos(elasticPosZ);\r
186         return;\r
187     }\r
188 \r
189     /**\r
190      * {@inheritDoc}\r
191      * @param elasticRotX {@inheritDoc}\r
192      * @param elasticRotY {@inheritDoc}\r
193      * @param elasticRotZ {@inheritDoc}\r
194      */\r
195     public void pmdElasticRotation(float elasticRotX,\r
196                                    float elasticRotY,\r
197                                    float elasticRotZ){\r
198         Deg3d rotation = this.currentJoint.getElasticRotation();\r
199         rotation.setXDeg(elasticRotX);\r
200         rotation.setYDeg(elasticRotY);\r
201         rotation.setZDeg(elasticRotZ);\r
202         return;\r
203     }\r
204 \r
205 }\r