Skip to content

Commit b3a3e41

Browse files
author
Meulemans
committed
made the use of reflection in the graph classes optional, resolving a bug in the Geometries to DCEL construction
1 parent b2e82dd commit b3a3e41

File tree

6 files changed

+79
-26
lines changed

6 files changed

+79
-26
lines changed

src/nl/tue/geometrycore/graphs/GraphConstruction.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import nl.tue.geometrycore.util.DoubleUtil;
3737

3838
/**
39-
*
39+
*
4040
* @author Wouter Meulemans ([email protected])
4141
*/
4242
public class GraphConstruction {
@@ -505,25 +505,37 @@ TSimpleEdge getOrAddEdge(TSimpleVertex from, TSimpleVertex to, TSimpleGeom geome
505505
// -------------------------------------------------------------------------
506506
// GEOMETRY -> DCEL
507507
// -------------------------------------------------------------------------
508-
public static <TDCELGeom extends OrientedGeometry, TDCELGraph extends DCELGraph<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELVertex extends DCELVertex<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELDart extends DCELDart<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELFace extends DCELFace<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>>
508+
public static <TDCELGeom extends OrientedGeometry<TDCELGeom>, TDCELGraph extends DCELGraph<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELVertex extends DCELVertex<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELDart extends DCELDart<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELFace extends DCELFace<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>>
509509
void convertGeometriesToDCEL(TDCELGraph graph, List<? extends GeometryConvertable> geometries,
510510
GeometryCloner<OrientedGeometry, TDCELGeom> cloner) {
511511
convertGeometriesToDCEL(graph, geometries, DoubleUtil.EPS, cloner, null, null, null, null);
512512
}
513513

514-
public static <TDCELGeom extends OrientedGeometry, TDCELGraph extends DCELGraph<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELVertex extends DCELVertex<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELDart extends DCELDart<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELFace extends DCELFace<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>>
514+
public static <TDCELGeom extends OrientedGeometry<TDCELGeom>, TDCELGraph extends DCELGraph<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELVertex extends DCELVertex<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELDart extends DCELDart<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELFace extends DCELFace<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>>
515515
void convertGeometriesToDCEL(TDCELGraph graph, List<? extends GeometryConvertable> geometries, double precision,
516516
GeometryCloner<OrientedGeometry, TDCELGeom> cloner) {
517517
convertGeometriesToDCEL(graph, geometries, precision, cloner, null, null, null, null);
518518
}
519519

520-
public static <TDCELGeom extends OrientedGeometry, TDCELGraph extends DCELGraph<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELVertex extends DCELVertex<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELDart extends DCELDart<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELFace extends DCELFace<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>>
520+
public static <TDCELGeom extends OrientedGeometry<TDCELGeom>, TDCELGraph extends DCELGraph<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELVertex extends DCELVertex<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELDart extends DCELDart<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>, TDCELFace extends DCELFace<TDCELGeom, TDCELVertex, TDCELDart, TDCELFace>>
521521
void convertGeometriesToDCEL(TDCELGraph graph, List<? extends GeometryConvertable> geometries, double precision,
522522
GeometryCloner<OrientedGeometry, TDCELGeom> cloner,
523523
Map<GeometryConvertable, List<TDCELVertex>> vertexMap, Map<TDCELVertex, List<GeometryConvertable>> vertexBackmap,
524524
Map<GeometryConvertable, List<TDCELDart>> edgeMap, Map<TDCELDart, List<GeometryConvertable>> edgeBackmap) {
525525

526-
SimpleGraph sg = new SimpleGraph() {
526+
SimpleGraph sg = new SimpleGraph(false) {
527+
@Override
528+
public SimpleEdge createEdge() {
529+
return new SimpleEdge() {
530+
};
531+
}
532+
533+
@Override
534+
public SimpleVertex createVertex() {
535+
return new SimpleVertex() {
536+
};
537+
}
538+
527539
};
528540

529541
Map<GeometryConvertable, List<SimpleVertex>> geomgraph_vertexMap;

src/nl/tue/geometrycore/graphs/dcel/DCELDart.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
* @author Wouter Meulemans ([email protected])
1515
*/
16-
public abstract class DCELDart<TGeom extends OrientedGeometry, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>>
16+
public abstract class DCELDart<TGeom extends OrientedGeometry<TGeom>, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>>
1717
implements GeometryConvertable<TGeom> {
1818

1919
TGeom _geometry;

src/nl/tue/geometrycore/graphs/dcel/DCELFace.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* @param <TFace>
2323
* @param <TDart>
2424
*/
25-
public abstract class DCELFace<TGeom extends OrientedGeometry, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>> {
25+
public abstract class DCELFace<TGeom extends OrientedGeometry<TGeom>, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>> {
2626

2727
// general info
2828
TDart _dart;

src/nl/tue/geometrycore/graphs/dcel/DCELGraph.java

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*
2525
* @author Wouter Meulemans ([email protected])
2626
*/
27-
public abstract class DCELGraph<TGeom extends OrientedGeometry, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>> {
27+
public abstract class DCELGraph<TGeom extends OrientedGeometry<TGeom>, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>> {
2828

2929
// -------------------------------------------------------------------------
3030
// FIELDS
@@ -39,16 +39,37 @@ public abstract class DCELGraph<TGeom extends OrientedGeometry, TVertex extends
3939
// -------------------------------------------------------------------------
4040
// CONSTRUCTORS
4141
// -------------------------------------------------------------------------
42+
/**
43+
* Constructs a DCEL graph. With this constructor, reflection is used to
44+
* create new vertices, darts and faces.
45+
*/
4246
public DCELGraph() {
47+
this(true);
48+
}
49+
50+
/**
51+
* Constructs a simple graph. Configurable to use reflection when creating
52+
* new vertices, darts and faces. If set to false, override createVertex,
53+
* createDart and createFace methods.
54+
*
55+
* @param reflection
56+
*/
57+
public DCELGraph(boolean reflection) {
4358
_faces = new ArrayList<TFace>();
4459
_darts = new ArrayList<TDart>();
4560
_vertices = new ArrayList<TVertex>();
46-
_vertexClass = (Class) ((ParameterizedType) this.getClass().
47-
getGenericSuperclass()).getActualTypeArguments()[1];
48-
_edgeClass = (Class) ((ParameterizedType) this.getClass().
49-
getGenericSuperclass()).getActualTypeArguments()[2];
50-
_faceClass = (Class) ((ParameterizedType) this.getClass().
51-
getGenericSuperclass()).getActualTypeArguments()[3];
61+
if (reflection) {
62+
_vertexClass = (Class) ((ParameterizedType) this.getClass().
63+
getGenericSuperclass()).getActualTypeArguments()[1];
64+
_edgeClass = (Class) ((ParameterizedType) this.getClass().
65+
getGenericSuperclass()).getActualTypeArguments()[2];
66+
_faceClass = (Class) ((ParameterizedType) this.getClass().
67+
getGenericSuperclass()).getActualTypeArguments()[3];
68+
} else {
69+
_vertexClass = null;
70+
_edgeClass = null;
71+
_faceClass = null;
72+
}
5273

5374
initializeOuterFace();
5475
}
@@ -96,12 +117,10 @@ public TDart createDart() {
96117
return null;
97118
}
98119
}
99-
100-
101120

102121
public TFace createFace() {
103122
try {
104-
TFace instance = (TFace) _edgeClass.newInstance();
123+
TFace instance = (TFace) _faceClass.newInstance();
105124
return instance;
106125
} catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException ex) {
107126
Logger.getLogger(SimpleGraph.class.getName()).log(Level.SEVERE, null, ex);
@@ -118,7 +137,7 @@ public TVertex addVertex(Vector loc) {
118137

119138
public TVertex addVertex(double x, double y) {
120139
TVertex vertex = createVertex();
121-
vertex.set(x,y);
140+
vertex.set(x, y);
122141

123142
addVertexToVertexList(vertex);
124143

src/nl/tue/geometrycore/graphs/dcel/DCELVertex.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@
1414
*
1515
* @author Wouter Meulemans ([email protected])
1616
*/
17-
public abstract class DCELVertex<TGeom extends OrientedGeometry, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>> extends Vector {
17+
public abstract class DCELVertex<TGeom extends OrientedGeometry<TGeom>, TVertex extends DCELVertex<TGeom, TVertex, TDart, TFace>, TDart extends DCELDart<TGeom, TVertex, TDart, TFace>, TFace extends DCELFace<TGeom, TVertex, TDart, TFace>> extends Vector {
1818

1919
TDart _dart;
2020
TFace _floatingInFace;
2121

2222
boolean _marked;
2323
int _graphIndex;
24-
24+
2525
protected DCELVertex() {
26-
this(0,0);
26+
this(0, 0);
2727
}
2828

2929
protected DCELVertex(Vector position) {
@@ -42,6 +42,9 @@ public int getGraphIndex() {
4242
}
4343

4444
public void updateIncidentEdges() {
45+
if (_dart == null) {
46+
return;
47+
}
4548
TDart walk = _dart;
4649
do {
4750
walk.getGeometry().updateStart(this);

src/nl/tue/geometrycore/graphs/simple/SimpleGraph.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
*/
77
package nl.tue.geometrycore.graphs.simple;
88

9-
import java.lang.reflect.InvocationTargetException;
109
import java.lang.reflect.ParameterizedType;
1110
import java.util.ArrayList;
1211
import java.util.Collections;
@@ -74,13 +73,33 @@ public void verify() {
7473
// -------------------------------------------------------------------------
7574
// CONSTRUCTORS
7675
// -------------------------------------------------------------------------
76+
/**
77+
* Constructs a simple graph. With this constructor, reflection is used to
78+
* create new vertices and edges.
79+
*/
7780
public SimpleGraph() {
81+
this(true);
82+
}
83+
84+
/**
85+
* Constructs a simple graph. Configurable to use reflection when creating
86+
* new vertices and edges. If set to false, override createVertex and
87+
* createEdge methods.
88+
*
89+
* @param reflection
90+
*/
91+
public SimpleGraph(boolean reflection) {
7892
_vertices = new ArrayList();
7993
_edges = new ArrayList();
80-
_vertexClass = (Class) ((ParameterizedType) this.getClass().
81-
getGenericSuperclass()).getActualTypeArguments()[1];
82-
_edgeClass = (Class) ((ParameterizedType) this.getClass().
83-
getGenericSuperclass()).getActualTypeArguments()[2];
94+
if (reflection) {
95+
_vertexClass = (Class) ((ParameterizedType) this.getClass().
96+
getGenericSuperclass()).getActualTypeArguments()[1];
97+
_edgeClass = (Class) ((ParameterizedType) this.getClass().
98+
getGenericSuperclass()).getActualTypeArguments()[2];
99+
} else {
100+
_vertexClass = null;
101+
_edgeClass = null;
102+
}
84103
}
85104

86105
// -------------------------------------------------------------------------

0 commit comments

Comments
 (0)