Search in sources :

Example 1 with Edge

use of com.revolsys.geometry.geomgraph.Edge in project com.revolsys.open by revolsys.

the class MonotoneChainEdge method computeIntersectsForChain.

public void computeIntersectsForChain(final int chainIndex0, final MonotoneChainEdge mce, final int chainIndex1, final SegmentIntersector si) {
    final Edge edge1 = this.edge;
    final Edge edge2 = mce.edge;
    final LineString line1 = edge1.getLineString();
    final LineString line2 = edge2.getLineString();
    computeIntersectsForChain(edge1, line1, this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], edge2, line2, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si);
}
Also used : LineString(com.revolsys.geometry.model.LineString) Edge(com.revolsys.geometry.geomgraph.Edge)

Example 2 with Edge

use of com.revolsys.geometry.geomgraph.Edge in project com.revolsys.open by revolsys.

the class Buffer method buffer.

private static Geometry buffer(final Noder noder, final GeometryFactory precisionModel, final Geometry geometry, final double distance, final BufferParameters parameters) {
    final GeometryFactory geometryFactory = geometry.getGeometryFactory();
    final OffsetCurveSetBuilder curveSetBuilder = new OffsetCurveSetBuilder(geometry, distance, precisionModel, parameters);
    final List<NodedSegmentString> curves = curveSetBuilder.getCurves();
    if (curves.size() == 0) {
        return geometryFactory.polygon();
    } else {
        final EdgeList edgeList = new EdgeList();
        computeNodedEdges(noder, edgeList, curves);
        final PlanarGraph graph = new PlanarGraph(new OverlayNodeFactory());
        final List<Edge> edges = edgeList.getEdges();
        graph.addEdges(edges);
        final List<BufferSubgraph> subgraphList = newSubgraphs(graph);
        final PolygonBuilder polyBuilder = new PolygonBuilder(geometryFactory);
        buildSubgraphs(subgraphList, polyBuilder);
        final List<Polygon> polygons = polyBuilder.getPolygons();
        if (polygons.size() == 0) {
            return geometryFactory.polygon();
        } else {
            final Geometry resultGeom = geometryFactory.buildGeometry(polygons);
            return resultGeom;
        }
    }
}
Also used : GeometryFactory(com.revolsys.geometry.model.GeometryFactory) OverlayNodeFactory(com.revolsys.geometry.operation.overlay.OverlayNodeFactory) EdgeList(com.revolsys.geometry.geomgraph.EdgeList) Geometry(com.revolsys.geometry.model.Geometry) PlanarGraph(com.revolsys.geometry.geomgraph.PlanarGraph) NodedSegmentString(com.revolsys.geometry.noding.NodedSegmentString) Polygon(com.revolsys.geometry.model.Polygon) Edge(com.revolsys.geometry.geomgraph.Edge) DirectedEdge(com.revolsys.geometry.geomgraph.DirectedEdge) PolygonBuilder(com.revolsys.geometry.operation.overlay.PolygonBuilder)

Example 3 with Edge

use of com.revolsys.geometry.geomgraph.Edge in project com.revolsys.open by revolsys.

the class Buffer method findStabbedSegments.

/**
 * Finds all non-horizontal segments intersecting the stabbing line
 * in the input dirEdge.
 * The stabbing line is the ray to the right of stabbingRayLeftPt.
 *
 * @param stabbingRayLeftPt the left-hand origin of the stabbing line
 * @param stabbedSegments the current list of {@link DepthSegments} intersecting the stabbing line
 */
private static void findStabbedSegments(final Collection<BufferSubgraph> subgraphs, final Point stabbingRayLeftPt, final DirectedEdge dirEdge, final List<DepthSegment> stabbedSegments) {
    final Edge edge = dirEdge.getEdge();
    for (int i = 0; i < edge.getVertexCount() - 1; i++) {
        final Point p1 = edge.getPoint(i);
        LineSegment seg = new LineSegmentDouble(p1, edge.getPoint(i + 1));
        double y1 = seg.getY(0);
        double y2 = seg.getY(1);
        // ensure segment always points upwards
        if (y1 > y2) {
            seg = seg.reverse();
            y1 = seg.getY(0);
            y2 = seg.getY(1);
        }
        final double x1 = seg.getX(0);
        final double x2 = seg.getX(1);
        // skip segment if it is left of the stabbing line
        final double maxx = Math.max(x1, x2);
        if (maxx < stabbingRayLeftPt.getX()) {
            continue;
        }
        // the same depth info
        if (seg.isHorizontal()) {
            continue;
        }
        // skip if segment is above or below stabbing line
        if (stabbingRayLeftPt.getY() < y1 || stabbingRayLeftPt.getY() > y2) {
            continue;
        }
        // skip if stabbing ray is right of the segment
        if (CGAlgorithmsDD.orientationIndex(seg.getP0(), seg.getP1(), stabbingRayLeftPt) == CGAlgorithms.RIGHT) {
            continue;
        }
        // stabbing line cuts this segment, so record it
        int depth = dirEdge.getDepth(Position.LEFT);
        // if segment direction was flipped, use RHS depth instead
        if (!seg.getP0().equals(p1)) {
            depth = dirEdge.getDepth(Position.RIGHT);
        }
        final DepthSegment ds = new DepthSegment(seg, depth);
        stabbedSegments.add(ds);
    }
}
Also used : LineSegmentDouble(com.revolsys.geometry.model.segment.LineSegmentDouble) Point(com.revolsys.geometry.model.Point) Edge(com.revolsys.geometry.geomgraph.Edge) DirectedEdge(com.revolsys.geometry.geomgraph.DirectedEdge) Point(com.revolsys.geometry.model.Point) LineSegment(com.revolsys.geometry.model.segment.LineSegment)

Example 4 with Edge

use of com.revolsys.geometry.geomgraph.Edge in project com.revolsys.open by revolsys.

the class LineBuilder method buildLines.

private void buildLines(final int opCode) {
    for (final Edge e : this.lineEdgesList) {
        final LineString line = this.geometryFactory.lineString(e.getLineString());
        this.resultLineList.add(line);
        e.setInResult(true);
    }
}
Also used : LineString(com.revolsys.geometry.model.LineString) DirectedEdge(com.revolsys.geometry.geomgraph.DirectedEdge) Edge(com.revolsys.geometry.geomgraph.Edge)

Example 5 with Edge

use of com.revolsys.geometry.geomgraph.Edge in project com.revolsys.open by revolsys.

the class LineBuilder method collectLineEdge.

/**
 * Collect line edges which are in the result.
 * Line edges are in the result if they are not part of
 * an area boundary, if they are in the result of the overlay operation,
 * and if they are not covered by a result area.
 *
 * @param de the directed edge to test
 * @param opCode the overlap operation
 * @param edges the list of included line edges
 */
private void collectLineEdge(final DirectedEdge de, final int opCode, final List<Edge> edges) {
    final Label label = de.getLabel();
    final Edge e = de.getEdge();
    // include L edges which are in the result
    if (de.isLineEdge()) {
        if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {
            // Debug.println("de: " + de.getLabel());
            // Debug.println("edge: " + e.getLabel());
            edges.add(e);
            de.setVisitedEdge(true);
        }
    }
}
Also used : Label(com.revolsys.geometry.geomgraph.Label) DirectedEdge(com.revolsys.geometry.geomgraph.DirectedEdge) Edge(com.revolsys.geometry.geomgraph.Edge)

Aggregations

Edge (com.revolsys.geometry.geomgraph.Edge)23 DirectedEdge (com.revolsys.geometry.geomgraph.DirectedEdge)15 Point (com.revolsys.geometry.model.Point)10 Label (com.revolsys.geometry.geomgraph.Label)6 LineString (com.revolsys.geometry.model.LineString)4 Iterator (java.util.Iterator)4 Depth (com.revolsys.geometry.geomgraph.Depth)2 EdgeIntersection (com.revolsys.geometry.geomgraph.EdgeIntersection)2 EdgeIntersectionList (com.revolsys.geometry.geomgraph.EdgeIntersectionList)2 Location (com.revolsys.geometry.model.Location)2 NodedSegmentString (com.revolsys.geometry.noding.NodedSegmentString)2 ArrayList (java.util.ArrayList)2 DirectedEdgeStar (com.revolsys.geometry.geomgraph.DirectedEdgeStar)1 EdgeList (com.revolsys.geometry.geomgraph.EdgeList)1 Node (com.revolsys.geometry.geomgraph.Node)1 PlanarGraph (com.revolsys.geometry.geomgraph.PlanarGraph)1 EdgeSetIntersector (com.revolsys.geometry.geomgraph.index.EdgeSetIntersector)1 SegmentIntersector (com.revolsys.geometry.geomgraph.index.SegmentIntersector)1 SimpleMCSweepLineIntersector (com.revolsys.geometry.geomgraph.index.SimpleMCSweepLineIntersector)1 Geometry (com.revolsys.geometry.model.Geometry)1