OSDN Git Service

1.105.3-SNAPSHOT版開発開始
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / pmdloader / ShapeBuilder.java
index b42388f..32ee115 100644 (file)
-/*\r
- * building shape information\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2010 MikuToga Partners\r
- */\r
-\r
-package jp.sourceforge.mikutoga.pmd.pmdloader;\r
-\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.RandomAccess;\r
-import jp.sourceforge.mikutoga.corelib.ListUtil;\r
-import jp.sourceforge.mikutoga.parser.ParseStage;\r
-import jp.sourceforge.mikutoga.parser.pmd.PmdShapeHandler;\r
-import jp.sourceforge.mikutoga.pmd.BoneInfo;\r
-import jp.sourceforge.mikutoga.pmd.PmdModel;\r
-import jp.sourceforge.mikutoga.pmd.Pos2d;\r
-import jp.sourceforge.mikutoga.pmd.Pos3d;\r
-import jp.sourceforge.mikutoga.pmd.Surface;\r
-import jp.sourceforge.mikutoga.pmd.Vec3d;\r
-import jp.sourceforge.mikutoga.pmd.Vertex;\r
-\r
-/**\r
- * モデル形状に関する通知をパーサから受け取る。\r
- */\r
-class ShapeBuilder implements PmdShapeHandler {\r
-\r
-    private final List<Vertex> vertexList;\r
-    private final List<BoneInfo> boneList;\r
-    private final List<Surface> surfaceList;\r
-\r
-    private Iterator<Vertex> vertexIt;\r
-    private Vertex currentVertex = null;\r
-\r
-    private Iterator<Surface> surfaceIt;\r
-    private Surface currentSurface = null;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param model モデル\r
-     */\r
-    ShapeBuilder(PmdModel model){\r
-        super();\r
-\r
-        this.vertexList  = model.getVertexList();\r
-        this.boneList    = model.getBoneList();\r
-        this.surfaceList = model.getSurfaceList();\r
-\r
-        assert this.vertexList instanceof RandomAccess;\r
-        assert this.surfaceList instanceof RandomAccess;\r
-        assert this.boneList instanceof RandomAccess;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * ボーンリスト上にボーンを用意する。\r
-     * すでに指定位置にボーンがあればなにもしない。\r
-     * @param id 0から始まるボーン番号\r
-     * @return 用意されたボーン\r
-     */\r
-    private BoneInfo prepareBone(int id){\r
-        ListUtil.extendCollection(this.boneList, id + 1);\r
-        BoneInfo bone = this.boneList.get(id);\r
-        if(bone == null){\r
-            bone = new BoneInfo();\r
-            bone.setSerialNumber(id);\r
-            this.boneList.set(id, bone);\r
-        }\r
-        return bone;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param stage {@inheritDoc}\r
-     * @param loops {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void loopStart(ParseStage stage, int loops){\r
-        if(stage == PmdShapeHandler.VERTEX_LIST){\r
-            ListUtil.prepareDefConsList(this.vertexList, Vertex.class, loops);\r
-            ListUtil.assignIndexedSerial(this.vertexList);\r
-\r
-            this.vertexIt = this.vertexList.iterator();\r
-            if(this.vertexIt.hasNext()){\r
-                this.currentVertex = this.vertexIt.next();\r
-            }\r
-        }else if(stage == PmdShapeHandler.SURFACE_LIST){\r
-            ListUtil.prepareDefConsList(this.surfaceList,\r
-                                        Surface.class, loops );\r
-            ListUtil.assignIndexedSerial(this.surfaceList);\r
-\r
-            this.surfaceIt = this.surfaceList.iterator();\r
-            if(this.surfaceIt.hasNext()){\r
-                this.currentSurface = this.surfaceIt.next();\r
-            }\r
-        }else{\r
-            assert false;\r
-            throw new AssertionError();\r
-        }\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param stage {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void loopNext(ParseStage stage){\r
-        if(stage == PmdShapeHandler.VERTEX_LIST){\r
-            if(this.vertexIt.hasNext()){\r
-                this.currentVertex = this.vertexIt.next();\r
-            }\r
-        }else if(stage == PmdShapeHandler.SURFACE_LIST){\r
-            if(this.surfaceIt.hasNext()){\r
-                this.currentSurface = this.surfaceIt.next();\r
-            }\r
-        }else{\r
-            assert false;\r
-            throw new AssertionError();\r
-        }\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param stage {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void loopEnd(ParseStage stage){\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param xPos {@inheritDoc}\r
-     * @param yPos {@inheritDoc}\r
-     * @param zPos {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void pmdVertexPosition(float xPos, float yPos, float zPos){\r
-        Pos3d position = this.currentVertex.getPosition();\r
-        position.setXPos(xPos);\r
-        position.setYPos(yPos);\r
-        position.setZPos(zPos);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param xVec {@inheritDoc}\r
-     * @param yVec {@inheritDoc}\r
-     * @param zVec {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void pmdVertexNormal(float xVec, float yVec, float zVec){\r
-        Vec3d normal = this.currentVertex.getNormal();\r
-        normal.setXVal(xVec);\r
-        normal.setYVal(yVec);\r
-        normal.setZVal(zVec);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param uVal {@inheritDoc}\r
-     * @param vVal {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void pmdVertexUV(float uVal, float vVal){\r
-        Pos2d uv = this.currentVertex.getUVPosition();\r
-        uv.setXPos(uVal);\r
-        uv.setYPos(vVal);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param boneId1 {@inheritDoc}\r
-     * @param boneId2 {@inheritDoc}\r
-     * @param weightForB1 {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void pmdVertexWeight(int boneId1, int boneId2, int weightForB1){\r
-        BoneInfo bone1 = prepareBone(boneId1);\r
-        BoneInfo bone2 = prepareBone(boneId2);\r
-\r
-        this.currentVertex.setBonePair(bone1, bone2);\r
-        this.currentVertex.setWeightA(weightForB1);\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param hideEdge {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void pmdVertexEdge(boolean hideEdge){\r
-        this.currentVertex.setEdgeAppearance( ! hideEdge );\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * @param vertexId1 {@inheritDoc}\r
-     * @param vertexId2 {@inheritDoc}\r
-     * @param vertexId3 {@inheritDoc}\r
-     */\r
-    @Override\r
-    public void pmdSurfaceTriangle(int vertexId1,\r
-                                      int vertexId2,\r
-                                      int vertexId3 ){\r
-        Vertex vtx1 = this.vertexList.get(vertexId1);\r
-        Vertex vtx2 = this.vertexList.get(vertexId2);\r
-        Vertex vtx3 = this.vertexList.get(vertexId3);\r
-\r
-        this.currentSurface.setTriangle(vtx1, vtx2, vtx3);\r
-\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * building shape information
+ *
+ * License : The MIT License
+ * Copyright(c) 2010 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.pmd.pmdloader;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.RandomAccess;
+import jp.sourceforge.mikutoga.corelib.ListUtil;
+import jp.sourceforge.mikutoga.parser.ParseStage;
+import jp.sourceforge.mikutoga.parser.pmd.PmdShapeHandler;
+import jp.sourceforge.mikutoga.pmd.BoneInfo;
+import jp.sourceforge.mikutoga.pmd.PmdModel;
+import jp.sourceforge.mikutoga.pmd.Pos2d;
+import jp.sourceforge.mikutoga.pmd.Pos3d;
+import jp.sourceforge.mikutoga.pmd.Surface;
+import jp.sourceforge.mikutoga.pmd.Vec3d;
+import jp.sourceforge.mikutoga.pmd.Vertex;
+
+/**
+ * モデル形状に関する通知をパーサから受け取る。
+ */
+class ShapeBuilder implements PmdShapeHandler {
+
+    private final List<Vertex> vertexList;
+    private final List<BoneInfo> boneList;
+    private final List<Surface> surfaceList;
+
+    private Iterator<Vertex> vertexIt;
+    private Vertex currentVertex = null;
+
+    private Iterator<Surface> surfaceIt;
+    private Surface currentSurface = null;
+
+    /**
+     * コンストラクタ。
+     * @param model モデル
+     */
+    ShapeBuilder(PmdModel model){
+        super();
+
+        this.vertexList  = model.getVertexList();
+        this.boneList    = model.getBoneList();
+        this.surfaceList = model.getSurfaceList();
+
+        assert this.vertexList instanceof RandomAccess;
+        assert this.surfaceList instanceof RandomAccess;
+        assert this.boneList instanceof RandomAccess;
+
+        return;
+    }
+
+    /**
+     * ボーンリスト上にボーンを用意する。
+     * すでに指定位置にボーンがあればなにもしない。
+     * @param id 0から始まるボーン番号
+     * @return 用意されたボーン
+     */
+    private BoneInfo prepareBone(int id){
+        ListUtil.extendCollection(this.boneList, id + 1);
+        BoneInfo bone = this.boneList.get(id);
+        if(bone == null){
+            bone = new BoneInfo();
+            bone.setSerialNumber(id);
+            this.boneList.set(id, bone);
+        }
+        return bone;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param stage {@inheritDoc}
+     * @param loops {@inheritDoc}
+     */
+    @Override
+    public void loopStart(ParseStage stage, int loops){
+        if(stage == PmdShapeHandler.VERTEX_LIST){
+            ListUtil.prepareDefConsList(this.vertexList, Vertex.class, loops);
+            ListUtil.assignIndexedSerial(this.vertexList);
+
+            this.vertexIt = this.vertexList.iterator();
+            if(this.vertexIt.hasNext()){
+                this.currentVertex = this.vertexIt.next();
+            }
+        }else if(stage == PmdShapeHandler.SURFACE_LIST){
+            ListUtil.prepareDefConsList(this.surfaceList,
+                                        Surface.class, loops );
+            ListUtil.assignIndexedSerial(this.surfaceList);
+
+            this.surfaceIt = this.surfaceList.iterator();
+            if(this.surfaceIt.hasNext()){
+                this.currentSurface = this.surfaceIt.next();
+            }
+        }else{
+            assert false;
+            throw new AssertionError();
+        }
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param stage {@inheritDoc}
+     */
+    @Override
+    public void loopNext(ParseStage stage){
+        if(stage == PmdShapeHandler.VERTEX_LIST){
+            if(this.vertexIt.hasNext()){
+                this.currentVertex = this.vertexIt.next();
+            }
+        }else if(stage == PmdShapeHandler.SURFACE_LIST){
+            if(this.surfaceIt.hasNext()){
+                this.currentSurface = this.surfaceIt.next();
+            }
+        }else{
+            assert false;
+            throw new AssertionError();
+        }
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param stage {@inheritDoc}
+     */
+    @Override
+    public void loopEnd(ParseStage stage){
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param xPos {@inheritDoc}
+     * @param yPos {@inheritDoc}
+     * @param zPos {@inheritDoc}
+     */
+    @Override
+    public void pmdVertexPosition(float xPos, float yPos, float zPos){
+        Pos3d position = this.currentVertex.getPosition();
+        position.setXPos(xPos);
+        position.setYPos(yPos);
+        position.setZPos(zPos);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param xVec {@inheritDoc}
+     * @param yVec {@inheritDoc}
+     * @param zVec {@inheritDoc}
+     */
+    @Override
+    public void pmdVertexNormal(float xVec, float yVec, float zVec){
+        Vec3d normal = this.currentVertex.getNormal();
+        normal.setXVal(xVec);
+        normal.setYVal(yVec);
+        normal.setZVal(zVec);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param uVal {@inheritDoc}
+     * @param vVal {@inheritDoc}
+     */
+    @Override
+    public void pmdVertexUV(float uVal, float vVal){
+        Pos2d uv = this.currentVertex.getUVPosition();
+        uv.setXPos(uVal);
+        uv.setYPos(vVal);
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param boneId1 {@inheritDoc}
+     * @param boneId2 {@inheritDoc}
+     * @param weightForB1 {@inheritDoc}
+     */
+    @Override
+    public void pmdVertexWeight(int boneId1, int boneId2, int weightForB1){
+        BoneInfo bone1 = prepareBone(boneId1);
+        BoneInfo bone2 = prepareBone(boneId2);
+
+        this.currentVertex.setBonePair(bone1, bone2);
+        this.currentVertex.setWeightA(weightForB1);
+
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param hideEdge {@inheritDoc}
+     */
+    @Override
+    public void pmdVertexEdge(boolean hideEdge){
+        this.currentVertex.setEdgeAppearance( ! hideEdge );
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @param vertexId1 {@inheritDoc}
+     * @param vertexId2 {@inheritDoc}
+     * @param vertexId3 {@inheritDoc}
+     */
+    @Override
+    public void pmdSurfaceTriangle(int vertexId1,
+                                      int vertexId2,
+                                      int vertexId3 ){
+        Vertex vtx1 = this.vertexList.get(vertexId1);
+        Vertex vtx2 = this.vertexList.get(vertexId2);
+        Vertex vtx3 = this.vertexList.get(vertexId3);
+
+        this.currentSurface.setTriangle(vtx1, vtx2, vtx3);
+
+        return;
+    }
+
+}