OSDN Git Service

checkstyle対応
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd / model / Surface.java
1 /*
2  * triangle surface
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.ArrayList;
11 import java.util.Iterator;
12 import java.util.List;
13
14 /**
15  * 3頂点の三角形からなる面情報。
16  */
17 public class Surface implements SerialNumbered, Iterable<Vertex> {
18
19     private static final int TRIANGLE = 3;
20
21
22     private Vertex vertex1;
23     private Vertex vertex2;
24     private Vertex vertex3;
25
26     private int surfaceSerialNo = -1;
27
28
29     /**
30      * コンストラクタ。
31      * 3頂点がnullの状態で生成される。
32      */
33     public Surface(){
34         super();
35         return;
36     }
37
38
39     /**
40      * 3頂点を設定する。
41      * @param vtx1 頂点1
42      * @param vtx2 頂点2
43      * @param vtx3 頂点3
44      * @throws  IllegalArgumentException 重複する頂点が引数に含まれた
45      */
46     public void setTriangle(Vertex vtx1, Vertex vtx2, Vertex vtx3)
47             throws IllegalArgumentException{
48         if(vtx1 != null && (vtx1 == vtx2 || vtx1 == vtx3)){
49             throw new IllegalArgumentException();
50         }
51         if(vtx2 != null && vtx2 == vtx3){
52             throw new IllegalArgumentException();
53         }
54
55         this.vertex1 = vtx1;
56         this.vertex2 = vtx2;
57         this.vertex3 = vtx3;
58
59         return;
60     }
61
62     /**
63      * 3頂点を返す。
64      * @param store 頂点格納用配列。nullもしくは3要素に満たない場合は無視され、
65      * 新規に格納用配列が生成される。
66      * @return 先頭3要素に3頂点が収められた配列。未設定要素にはnullが入る。
67      * 引数が長さ3以上の配列であれば引数と同じ配列が返る。
68      */
69     public Vertex[] getTriangle(Vertex[] store){
70         Vertex[] result;
71         if(store != null && store.length >= TRIANGLE){
72             result = store;
73         }else{
74             result = new Vertex[TRIANGLE];
75         }
76
77         result[0] = this.vertex1;
78         result[1] = this.vertex2;
79         result[2] = this.vertex3;
80
81         return result;
82     }
83
84     /**
85      * 頂点その1を返す。
86      * @return 頂点その1
87      */
88     public Vertex getVertex1(){
89         return this.vertex1;
90     }
91
92     /**
93      * 頂点その2を返す。
94      * @return 頂点その2
95      */
96     public Vertex getVertex2(){
97         return this.vertex2;
98     }
99
100     /**
101      * 頂点その3を返す。
102      * @return 頂点その3
103      */
104     public Vertex getVertex3(){
105         return this.vertex3;
106     }
107
108     /**
109      * {@inheritDoc}
110      * 頂点を返す反復子を生成する。
111      * 反復子がnullを返す可能性もありうる。
112      * @return {@inheritDoc}
113      */
114     @Override
115     public Iterator<Vertex> iterator(){
116         List<Vertex> list = new ArrayList<Vertex>(TRIANGLE);
117
118         list.add(this.vertex1);
119         list.add(this.vertex2);
120         list.add(this.vertex3);
121
122         return list.iterator();
123     }
124
125     /**
126      * 3頂点全てが設定されているか判定する。
127      * @return 3頂点とも非nullが設定されていればtrue
128      */
129     public boolean isCompleted(){
130         boolean result;
131         result =    this.vertex1 != null
132                  && this.vertex2 != null
133                  && this.vertex3 != null;
134         return result;
135     }
136
137     /**
138      * {@inheritDoc}
139      * @param num {@inheritDoc}
140      */
141     @Override
142     public void setSerialNumber(int num){
143         this.surfaceSerialNo = num;
144         return;
145     }
146
147     /**
148      * {@inheritDoc}
149      * @return {@inheritDoc}
150      */
151     @Override
152     public int getSerialNumber(){
153         return this.surfaceSerialNo;
154     }
155
156     /**
157      * {@inheritDoc}
158      * @return {@inheritDoc}
159      */
160     @Override
161     public String toString(){
162         StringBuilder result = new StringBuilder();
163
164         result.append("Surface(")
165               .append(getSerialNumber())
166               .append(")");
167
168         if(isCompleted()){
169             result.append(" VID=[")
170                   .append(this.vertex1.getSerialNumber())
171                   .append(',')
172                   .append(this.vertex2.getSerialNumber())
173                   .append(',')
174                   .append(this.vertex3.getSerialNumber())
175                   .append(']');
176         }
177
178         return result.toString();
179     }
180
181 }