OSDN Git Service

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