OSDN Git Service

Merge release/v1.203.2
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / 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.sfjp.mikutoga.pmd.model;
9
10 import java.util.Comparator;
11 import jp.sfjp.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 = null;
23     private final MkPos3D offset = new MkPos3D();
24
25     private int morphVertexSerialNo = -1;
26
27
28     /**
29      * コンストラクタ。
30      */
31     public MorphVertex(){
32         super();
33         return;
34     }
35
36
37     /**
38      * 移動元頂点情報を返す。
39      * @return 移動元頂点
40      */
41     public Vertex getBaseVertex(){
42         return this.baseVertex;
43     }
44
45     /**
46      * 移動元頂点情報を設定する。
47      * @param vertex 移動元頂点
48      * @throws NullPointerException 引数がnull
49      */
50     public void setBaseVertex(Vertex vertex) throws NullPointerException{
51         if(vertex == null) throw new NullPointerException();
52         this.baseVertex = vertex;
53         return;
54     }
55
56     /**
57      * 頂点移動量を返す。
58      * @return 頂点移動量
59      */
60     public MkPos3D getOffset(){
61         return this.offset;
62     }
63
64     /**
65      * {@inheritDoc}
66      * @param num {@inheritDoc}
67      */
68     @Override
69     public void setSerialNumber(int num){
70         this.morphVertexSerialNo = num;
71         return;
72     }
73
74     /**
75      * {@inheritDoc}
76      * @return {@inheritDoc}
77      */
78     @Override
79     public int getSerialNumber(){
80         return this.morphVertexSerialNo;
81     }
82
83     /**
84      * {@inheritDoc}
85      * @return {@inheritDoc}
86      */
87     @Override
88     public String toString(){
89         StringBuilder result = new StringBuilder();
90
91         result.append("vid(")
92               .append(this.baseVertex.getSerialNumber())
93               .append(") ");
94         result.append(this.baseVertex.getPosition());
95         result.append(" >> ");
96         result.append(this.offset);
97
98         return result.toString();
99     }
100
101
102     /**
103      * 頂点IDによる比較子Comparator。
104      */
105     @SuppressWarnings("serial")
106     private static final class VertexIdComparator
107             implements Comparator<MorphVertex> {
108
109         /**
110          * コンストラクタ。
111          */
112         VertexIdComparator(){
113             super();
114             return;
115         }
116
117         /**
118          * {@inheritDoc}
119          * @param o1 {@inheritDoc}
120          * @param o2 {@inheritDoc}
121          * @return {@inheritDoc}
122          */
123         @Override
124         public int compare(MorphVertex o1, MorphVertex o2){
125             if(o1 == o2) return 0;
126             if(o1 == null) return -1;
127             if(o2 == null) return +1;
128
129             int ser1 = o1.getBaseVertex().getSerialNumber();
130             int ser2 = o2.getBaseVertex().getSerialNumber();
131
132             return ser1 - ser2;
133         }
134
135     }
136
137 }