OSDN Git Service

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