/** * Inserted edges are checked to see if an identical edge already exists. If so, the edge is not * inserted, but its label is merged with the existing edge. */ protected void insertUniqueEdge(Edge e) { // <FIX> MD 8 Oct 03 speed up identical edge lookup // fast lookup Edge existingEdge = edgeList.findEqualEdge(e); // If an identical edge already exists, simply update its label if (existingEdge != null) { Label existingLabel = existingEdge.getLabel(); Label labelToMerge = e.getLabel(); // check if new edge is in reverse direction to existing edge // if so, must flip the label before merging it if (!existingEdge.isPointwiseEqual(e)) { labelToMerge = new Label(e.getLabel()); labelToMerge.flip(); } existingLabel.merge(labelToMerge); // compute new depth delta of sum of edges int mergeDelta = depthDelta(labelToMerge); int existingDelta = existingEdge.getDepthDelta(); int newDelta = existingDelta + mergeDelta; existingEdge.setDepthDelta(newDelta); } else { // no matching existing edge was found // add this new edge to the list of edges in this graph // e.setName(name + edges.size()); edgeList.add(e); e.setDepthDelta(depthDelta(e.getLabel())); } }
private int getRightmostSideOfSegment(DirectedEdge de, int i) { Edge e = de.getEdge(); Coordinate coord[] = e.getCoordinates(); if (i < 0 || i + 1 >= coord.length) return -1; if (coord[i].y == coord[i + 1].y) return -1; // indicates edge is parallel to x-axis int pos = Position.LEFT; if (coord[i].y < coord[i + 1].y) pos = Position.RIGHT; return pos; }
private void add(Edge edge, Object edgeSet) { Coordinate[] pts = edge.getCoordinates(); for (int i = 0; i < pts.length - 1; i++) { SweepLineSegment ss = new SweepLineSegment(edge, i); SweepLineEvent insertEvent = new SweepLineEvent(edgeSet, ss.getMinX(), null, ss); events.add(insertEvent); events.add(new SweepLineEvent(edgeSet, ss.getMaxX(), insertEvent, ss)); } }