2 * building joint information
\r
4 * License : The MIT License
\r
5 * Copyright(c) 2010 MikuToga Partners
\r
8 package jp.sourceforge.mikutoga.pmd.pmdloader;
\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
24 * ジョイント関係の通知をパーサから受け取る。
\r
26 class JointBuilder implements PmdJointHandler {
\r
28 private final List<RigidInfo> rigidList;
\r
30 private final List<JointInfo> jointList;
\r
31 private Iterator<JointInfo> jointIt;
\r
32 private JointInfo currentJoint = null;
\r
38 JointBuilder(PmdModel model){
\r
40 this.rigidList = model.getRigidList();
\r
41 this.jointList = model.getJointList();
\r
47 * @param stage {@inheritDoc}
\r
48 * @param loops {@inheritDoc}
\r
50 public void loopStart(ParseStage stage, int loops){
\r
51 assert stage == PmdJointHandler.JOINT_LIST;
\r
53 ListUtil.prepareDefConsList(this.jointList, JointInfo.class, loops);
\r
55 this.jointIt = this.jointList.iterator();
\r
56 if(this.jointIt.hasNext()){
\r
57 this.currentJoint = this.jointIt.next();
\r
65 * @param stage {@inheritDoc}
\r
67 public void loopNext(ParseStage stage){
\r
68 assert stage == PmdJointHandler.JOINT_LIST;
\r
70 if(this.jointIt.hasNext()){
\r
71 this.currentJoint = this.jointIt.next();
\r
79 * @param stage {@inheritDoc}
\r
81 public void loopEnd(ParseStage stage){
\r
82 assert stage == PmdJointHandler.JOINT_LIST;
\r
88 * @param jointName {@inheritDoc}
\r
90 public void pmdJointName(String jointName){
\r
91 this.currentJoint.getJointName().setPrimaryText(jointName);
\r
97 * @param rigidIdA {@inheritDoc}
\r
98 * @param rigidIdB {@inheritDoc}
\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
109 * @param posX {@inheritDoc}
\r
110 * @param posY {@inheritDoc}
\r
111 * @param posZ {@inheritDoc}
\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
123 * @param rotX {@inheritDoc}
\r
124 * @param rotY {@inheritDoc}
\r
125 * @param rotZ {@inheritDoc}
\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
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
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
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
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
175 * @param elasticPosX {@inheritDoc}
\r
176 * @param elasticPosY {@inheritDoc}
\r
177 * @param elasticPosZ {@inheritDoc}
\r
179 public void pmdElasticPosition(float elasticPosX,
\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
191 * @param elasticRotX {@inheritDoc}
\r
192 * @param elasticRotY {@inheritDoc}
\r
193 * @param elasticRotZ {@inheritDoc}
\r
195 public void pmdElasticRotation(float elasticRotX,
\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