OSDN Git Service

TogaGemからのパッケージ移管。
[mikutoga/Pmd2XML.git] / src / main / java / jp / sourceforge / mikutoga / pmd / model / binio / JointBuilder.java
diff --git a/src/main/java/jp/sourceforge/mikutoga/pmd/model/binio/JointBuilder.java b/src/main/java/jp/sourceforge/mikutoga/pmd/model/binio/JointBuilder.java
new file mode 100644 (file)
index 0000000..a03099b
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * building joint information
+ *
+ * License : The MIT License
+ * Copyright(c) 2010 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.pmd.model.binio;
+
+import java.util.Iterator;
+import java.util.List;
+import jp.sourceforge.mikutoga.pmd.model.ListUtil;
+import jp.sourceforge.mikutoga.math.MkPos3D;
+import jp.sourceforge.mikutoga.parser.ParseStage;
+import jp.sourceforge.mikutoga.pmd.Deg3d;
+import jp.sourceforge.mikutoga.pmd.Rad3d;
+import jp.sourceforge.mikutoga.pmd.TripletRange;
+import jp.sourceforge.mikutoga.pmd.model.JointInfo;
+import jp.sourceforge.mikutoga.pmd.model.PmdModel;
+import jp.sourceforge.mikutoga.pmd.model.RigidInfo;
+import jp.sourceforge.mikutoga.pmd.parser.PmdJointHandler;
+
+/**
+ * ジョイント関係の通知をパーサから受け取る。
+ */
+class JointBuilder implements PmdJointHandler {
+
+    private final List<RigidInfo> rigidList;
+
+    private final List<JointInfo> jointList;
+    private Iterator<JointInfo> jointIt;
+    private JointInfo currentJoint = null;
+
+    /**
+     * コンストラクタ。
+     * @param model モデル
+     */
+    JointBuilder(PmdModel model){
+        super();
+        this.rigidList = model.getRigidList();
+        this.jointList = model.getJointList();
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param stage {@inheritDoc}
+     * @param loops {@inheritDoc}
+     */
+    @Override
+    public void loopStart(ParseStage stage, int loops){
+        assert stage == PmdJointHandler.JOINT_LIST;
+
+        ListUtil.prepareDefConsList(this.jointList, JointInfo.class, loops);
+
+        this.jointIt = this.jointList.iterator();
+        if(this.jointIt.hasNext()){
+            this.currentJoint = this.jointIt.next();
+        }
+
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param stage {@inheritDoc}
+     */
+    @Override
+    public void loopNext(ParseStage stage){
+        assert stage == PmdJointHandler.JOINT_LIST;
+
+        if(this.jointIt.hasNext()){
+            this.currentJoint = this.jointIt.next();
+        }
+
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param stage {@inheritDoc}
+     */
+    @Override
+    public void loopEnd(ParseStage stage){
+        assert stage == PmdJointHandler.JOINT_LIST;
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param jointName {@inheritDoc}
+     */
+    @Override
+    public void pmdJointName(String jointName){
+        this.currentJoint.getJointName().setPrimaryText(jointName);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param rigidIdA {@inheritDoc}
+     * @param rigidIdB {@inheritDoc}
+     */
+    @Override
+    public void pmdJointLink(int rigidIdA, int rigidIdB){
+        RigidInfo rigidA = this.rigidList.get(rigidIdA);
+        RigidInfo rigidB = this.rigidList.get(rigidIdB);
+        this.currentJoint.setRigidPair(rigidA, rigidB);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param posX {@inheritDoc}
+     * @param posY {@inheritDoc}
+     * @param posZ {@inheritDoc}
+     */
+    @Override
+    public void pmdJointPosition(float posX, float posY, float posZ){
+        MkPos3D position = this.currentJoint.getPosition();
+        position.setXpos(posX);
+        position.setYpos(posY);
+        position.setZpos(posZ);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param rotX {@inheritDoc}
+     * @param rotY {@inheritDoc}
+     * @param rotZ {@inheritDoc}
+     */
+    @Override
+    public void pmdJointRotation(float rotX, float rotY, float rotZ){
+        Rad3d rotation = this.currentJoint.getRotation();
+        rotation.setXRad(rotX);
+        rotation.setYRad(rotY);
+        rotation.setZRad(rotZ);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param posXlim1 {@inheritDoc}
+     * @param posXlim2 {@inheritDoc}
+     * @param posYlim1 {@inheritDoc}
+     * @param posYlim2 {@inheritDoc}
+     * @param posZlim1 {@inheritDoc}
+     * @param posZlim2 {@inheritDoc}
+     */
+    @Override
+    public void pmdPositionLimit(float posXlim1, float posXlim2,
+                                 float posYlim1, float posYlim2,
+                                 float posZlim1, float posZlim2){
+        TripletRange range = this.currentJoint.getPositionRange();
+        range.setXRange(posXlim1, posXlim2);
+        range.setYRange(posYlim1, posYlim2);
+        range.setZRange(posZlim1, posZlim2);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param rotXlim1 {@inheritDoc}
+     * @param rotXlim2 {@inheritDoc}
+     * @param rotYlim1 {@inheritDoc}
+     * @param rotYlim2 {@inheritDoc}
+     * @param rotZlim1 {@inheritDoc}
+     * @param rotZlim2 {@inheritDoc}
+     */
+    @Override
+    public void pmdRotationLimit(float rotXlim1, float rotXlim2,
+                                 float rotYlim1, float rotYlim2,
+                                 float rotZlim1, float rotZlim2){
+        TripletRange range = this.currentJoint.getRotationRange();
+        range.setXRange(rotXlim1, rotXlim2);
+        range.setYRange(rotYlim1, rotYlim2);
+        range.setZRange(rotZlim1, rotZlim2);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param elasticPosX {@inheritDoc}
+     * @param elasticPosY {@inheritDoc}
+     * @param elasticPosZ {@inheritDoc}
+     */
+    @Override
+    public void pmdElasticPosition(float elasticPosX,
+                                   float elasticPosY,
+                                   float elasticPosZ){
+        MkPos3D position = this.currentJoint.getElasticPosition();
+        position.setXpos(elasticPosX);
+        position.setYpos(elasticPosY);
+        position.setZpos(elasticPosZ);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param elasticRotX {@inheritDoc}
+     * @param elasticRotY {@inheritDoc}
+     * @param elasticRotZ {@inheritDoc}
+     */
+    @Override
+    public void pmdElasticRotation(float elasticRotX,
+                                   float elasticRotY,
+                                   float elasticRotZ){
+        Deg3d rotation = this.currentJoint.getElasticRotation();
+        rotation.setXDeg(elasticRotX);
+        rotation.setYDeg(elasticRotY);
+        rotation.setZDeg(elasticRotZ);
+        return;
+    }
+
+}