GeomVis  0.1
Набор классов Java для визуализации результатов работы геометрических алгоритмов
GObject.java
См. документацию.
1 package geom;
2 
3 import java.lang.reflect.Array;
4 import java.lang.reflect.Field;
5 import java.util.Arrays;
6 
7 import control.Message;
8 
14 public abstract class GObject implements Comparable
15 {
16 
17  GView view = new GView();
18 
19  public GView view()
20  {
21  return view;
22  }
23 
28  abstract public void draw(GCoordSystem gcs);
29 
34  abstract public boolean in(int canvasX, int canvasY, GCoordSystem gcs);
35 
36  public int compareTo(Object obj)
37  {
38  return compare(this, obj);
39  }
40 
41  public static int compare(Object a, Object b)
42  {
43  if (a == b)
44  return 0;
45 
46  if ( !a.getClass().equals(b.getClass()))
47  {
48  if (a.getClass().equals(Point.class))
49  {
50 
51  return -1;
52  } else if (b.getClass().equals(Point.class))
53  {
54 
55  return 1;
56  } else
57  {
58  return a.getClass().hashCode() > b.getClass().hashCode() ? 1
59  : -1;
60  }
61  }
62 
63  GObject ga = (GObject) a;
64  GObject gb = (GObject) b;
65  if (ga.view().getSelId() > gb.view().getSelId())
66  return -1;
67  if (ga.view().getSelId() < gb.view().getSelId())
68  return 1;
69 
70  int res = 0;
71 
72  Field[] fieldsA = a.getClass().getFields();
73  Field[] fieldsB = b.getClass().getFields();
74  try
75  {
76  for (int i = 0; i < fieldsA.length && res == 0; i++)
77  {
78  Field fa = fieldsA[i];
79 
80  if (fa.getType().equals(Point[].class))
81  {
82  Point pa[] = (Point[]) fa.get(a);
83  Point pb[] = (Point[]) fa.get(b);
84  if (pa.length < pb.length)
85  return -1;
86  if (pa.length > pb.length)
87  return 1;
88  for (int j = 0; j < pa.length; j++)
89  {
90  res = compare(pa[j], pb[j]);
91  if (res != 0)
92  return res;
93  }
94  return 0;
95  }
96 
97  if (fa.getType().equals(Point.class))
98  {
99 
100  res = compare((Point) (fa.get(a)), (Point) (fa.get(b)));
101 
102  }
103  if (fa.getType().getName().equals("int"))
104  {
105  if ((int) (fa.get(a)) > (int) (fa.get(b)))
106  res = 1;
107  if ((int) (fa.get(a)) < (int) (fa.get(b)))
108  res = -1;
109  }
110  if (fa.getType().getName().equals("long"))
111  {
112  if ((long) (fa.get(a)) > (long) (fa.get(b)))
113  res = 1;
114  if ((long) (fa.get(a)) < (long) (fa.get(b)))
115  res = -1;
116  }
117  if (fa.getType().getName().equals("double"))
118  {
119  if (geom.Accur.less((double) (fa.get(a)),
120  (double) (fa.get(b))))
121  res = -1;
122  if (geom.Accur.more((double) (fa.get(a)),
123  (double) (fa.get(b))))
124  res = 1;
125 
126  }
127  }
128  } catch (IllegalArgumentException | IllegalAccessException e)
129  {
130  // TODO Auto-generated catch block
131  e.printStackTrace();
132  }
133 
134  return res;
135  }
136 }
Система вывода сообщений
Definition: Message.java:8
abstract boolean in(int canvasX, int canvasY, GCoordSystem gcs)
Абстракная функция определяющая принадлежность точки объекту. Переопределяется в подклассах - конкрет...
abstract void draw(GCoordSystem gcs)
Абстракная функция рисования. Переопределяется в подклассах - конкретных графических объектах ...
GView view
Definition: GObject.java:17
int compareTo(Object obj)
Definition: GObject.java:36
Точка. Определяется двумя числами - координами в декартовой системе координат.
Definition: Point.java:10
Главный класс отображения. У пользователя нет необходимости его использовать напрямую.
static int compare(Object a, Object b)
Definition: GObject.java:41
Абстрактный суперкласс для всех графических объектов
Definition: GObject.java:14
GView view()
Definition: GObject.java:19