OSDN Git Service

1.105.3-SNAPSHOT版開発開始
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / MorphVertex.java
1 /*\r
2  * morph vertex 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;\r
9 \r
10 import java.util.Comparator;\r
11 import jp.sourceforge.mikutoga.corelib.SerialNumbered;\r
12 \r
13 /**\r
14  * モーフアニメーションを構成する個別の頂点移動の情報。\r
15  */\r
16 public class MorphVertex implements SerialNumbered{\r
17 \r
18     /** 頂点IDを昇順に順序づけるComaparator。 */\r
19     public static final Comparator<MorphVertex> VIDCOMPARATOR =\r
20             new VertexIdComparator();\r
21 \r
22     private Vertex baseVertex;\r
23     private final Pos3d offset = new Pos3d();\r
24 \r
25     private int serialNo = -1;\r
26 \r
27     /**\r
28      * コンストラクタ。\r
29      */\r
30     public MorphVertex(){\r
31         super();\r
32         return;\r
33     }\r
34 \r
35     /**\r
36      * 移動元頂点情報を返す。\r
37      * @return 移動元頂点\r
38      */\r
39     public Vertex getBaseVertex(){\r
40         return this.baseVertex;\r
41     }\r
42 \r
43     /**\r
44      * 移動元頂点情報を設定する。\r
45      * @param vertex 移動元頂点\r
46      * @throws NullPointerException 引数がnull\r
47      */\r
48     public void setBaseVertex(Vertex vertex) throws NullPointerException{\r
49         if(vertex == null) throw new NullPointerException();\r
50         this.baseVertex = vertex;\r
51         return;\r
52     }\r
53 \r
54     /**\r
55      * 頂点移動量を返す。\r
56      * @return 頂点移動量\r
57      */\r
58     public Pos3d getOffset(){\r
59         return this.offset;\r
60     }\r
61 \r
62     /**\r
63      * {@inheritDoc}\r
64      * @param num {@inheritDoc}\r
65      */\r
66     @Override\r
67     public void setSerialNumber(int num){\r
68         this.serialNo = num;\r
69         return;\r
70     }\r
71 \r
72     /**\r
73      * {@inheritDoc}\r
74      * @return {@inheritDoc}\r
75      */\r
76     @Override\r
77     public int getSerialNumber(){\r
78         return this.serialNo;\r
79     }\r
80 \r
81     /**\r
82      * {@inheritDoc}\r
83      * @return {@inheritDoc}\r
84      */\r
85     @Override\r
86     public String toString(){\r
87         StringBuilder result = new StringBuilder();\r
88 \r
89         result.append("vid(")\r
90               .append(this.baseVertex.getSerialNumber())\r
91               .append(") ");\r
92         result.append(this.baseVertex.getPosition());\r
93         result.append(" >> ");\r
94         result.append(this.offset);\r
95 \r
96         return result.toString();\r
97     }\r
98 \r
99     /**\r
100      * 頂点IDによる比較子Comparator。\r
101      */\r
102     private static final class VertexIdComparator\r
103             implements Comparator<MorphVertex> {\r
104 \r
105         /**\r
106          * コンストラクタ。\r
107          */\r
108         private VertexIdComparator(){\r
109             super();\r
110             return;\r
111         }\r
112 \r
113         /**\r
114          * {@inheritDoc}\r
115          * @param o1 {@inheritDoc}\r
116          * @param o2 {@inheritDoc}\r
117          * @return {@inheritDoc}\r
118          */\r
119         @Override\r
120         public int compare(MorphVertex o1, MorphVertex o2){\r
121             if(o1 == o2) return 0;\r
122             if(o1 == null) return -1;\r
123             if(o2 == null) return +1;\r
124 \r
125             int ser1 = o1.getBaseVertex().getSerialNumber();\r
126             int ser2 = o2.getBaseVertex().getSerialNumber();\r
127 \r
128             return ser1 - ser2;\r
129         }\r
130 \r
131     }\r
132 \r
133 }\r