Search in sources :

Example 16 with Vertex

use of com.revolsys.geometry.model.vertex.Vertex in project com.revolsys.open by revolsys.

the class DirectionalFields method getMergedMap.

public Map<String, Object> getMergedMap(final Point point, final Record record1, Record record2) {
    final LineString line1 = record1.getGeometry();
    LineString line2 = record2.getGeometry();
    Record fromRecord;
    Record toRecord;
    LineString newLine;
    final Vertex line1From = line1.getVertex(0);
    final Vertex line2From = line2.getVertex(0);
    if (line1From.equals(2, line2From) && line1From.equals(2, point)) {
        record2 = getReverse(record2);
        line2 = record2.getGeometry();
        fromRecord = record2;
        toRecord = record1;
        newLine = line1.merge(point, line2);
    } else {
        final Vertex line1To = line1.getToVertex(0);
        final Vertex line2To = line2.getToVertex(0);
        if (line1To.equals(2, line2To) && line1To.equals(2, point)) {
            record2 = getReverse(record2);
            line2 = record2.getGeometry();
            fromRecord = record1;
            toRecord = record2;
            newLine = line1.merge(point, line2);
        } else if (line1To.equals(2, line2From) && line1To.equals(2, point)) {
            fromRecord = record1;
            toRecord = record2;
            newLine = line1.merge(point, line2);
        } else if (line1From.equals(2, line2To) && line1From.equals(2, point)) {
            fromRecord = record2;
            toRecord = record1;
            newLine = line2.merge(point, line1);
        } else {
            throw new IllegalArgumentException("Lines for records don't touch");
        }
    }
    final Map<String, Object> newValues = new LinkedHashMap<>(record1);
    setFromFieldValues(fromRecord, toRecord, newValues);
    setToFieldValues(toRecord, fromRecord, newValues);
    final RecordDefinition recordDefinition = record1.getRecordDefinition();
    final String geometryFieldName = recordDefinition.getGeometryFieldName();
    newValues.put(geometryFieldName, newLine);
    return newValues;
}
Also used : Vertex(com.revolsys.geometry.model.vertex.Vertex) LineString(com.revolsys.geometry.model.LineString) Record(com.revolsys.record.Record) LineString(com.revolsys.geometry.model.LineString) LinkedHashMap(java.util.LinkedHashMap) RecordDefinition(com.revolsys.record.schema.RecordDefinition)

Example 17 with Vertex

use of com.revolsys.geometry.model.vertex.Vertex in project com.revolsys.open by revolsys.

the class EditGeoreferencedImageOverlay method paintComponent.

@Override
protected void paintComponent(final Viewport2D viewport, final Graphics2D graphics) {
    super.paintComponent(viewport, graphics);
    final GeoreferencedImageLayer layer = this.layer;
    final GeoreferencedImage image = this.image;
    final BoundingBox moveImageBoundingBox = this.moveImageBoundingBox;
    if (layer != null && layer.isVisible() && layer.isExists() && image != null) {
        try (BaseCloseable transformCloseable = viewport.setUseModelCoordinates(graphics, true)) {
            final GeometryFactory viewportGeometryFactory = viewport.getGeometryFactory();
            final boolean showOriginalImage = layer.isShowOriginalImage();
            final BoundingBox imageBoundingBox = getImageBoundingBox();
            BoundingBox boundingBox = imageBoundingBox;
            BoundingBox outlineBoundingBox = boundingBox;
            if (moveImageBoundingBox != null) {
                if (showOriginalImage) {
                    boundingBox = moveImageBoundingBox;
                }
                outlineBoundingBox = moveImageBoundingBox;
            }
            final GeoreferencedImage cachedImage = getCachedImage(boundingBox);
            GeoreferencedImageLayerRenderer.renderAlpha(viewport, graphics, cachedImage, false, layer.getOpacity() / 255.0, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            GeoreferencedImageLayerRenderer.renderDifferentCoordinateSystem(viewport, graphics, imageBoundingBox);
            if (outlineBoundingBox != null && !outlineBoundingBox.isEmpty()) {
                final Polygon imageBoundary = outlineBoundingBox.convert(getViewportGeometryFactory()).toPolygon(1);
                graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
                viewport.drawGeometryOutline(imageBoundary, STYLE_BOX_OUTLINE);
                MarkerStyleRenderer.renderMarkerVertices(viewport, graphics, imageBoundary, STYLE_BOX_CORNER);
                final List<MappedLocation> tiePoints = image.getTiePoints();
                final int tiePointCount = tiePoints.size();
                final GeometryFactory viewGeometryFactory = getGeometryFactory();
                if (tiePointCount > 0) {
                    for (final MappedLocation mappedLocation : tiePoints) {
                        LineString line = mappedLocation.getSourceToTargetLine(image, boundingBox, !showOriginalImage);
                        if (line != null) {
                            line = line.convertGeometry(viewportGeometryFactory);
                            try (BaseCloseable transformCloseable1 = viewport.setUseModelCoordinates(graphics, true)) {
                                TIE_POINT_RENDERER.paintSelected(viewport, graphics, viewportGeometryFactory, line);
                            }
                        }
                    }
                    for (final MappedLocation mappedLocation : tiePoints) {
                        LineString line = mappedLocation.getSourceToTargetLine(image, boundingBox, !showOriginalImage);
                        if (line != null) {
                            line = line.convertGeometry(viewportGeometryFactory);
                            TIE_POINT_VERTEX_RENDERER.paintSelected(viewport, graphics, viewportGeometryFactory, line);
                        }
                    }
                }
                if (!showOriginalImage) {
                    final double width = image.getImageWidth() - 1;
                    final double height = image.getImageHeight() - 1;
                    final double[] targetCoordinates = MappedLocation.toModelCoordinates(image, boundingBox, true, 0, height, width, height, width, 0, 0, 0, 0, height);
                    final LineString line = viewGeometryFactory.lineString(2, targetCoordinates);
                    GeometryStyleRenderer.renderLineString(viewport, graphics, line, STYLE_IMAGE_LINE);
                }
            }
            final MappedLocation moveTiePoint = getMoveTiePoint();
            if (moveTiePoint != null) {
                final LineString line = moveTiePoint.getSourceToTargetLine(image, boundingBox, !showOriginalImage);
                Vertex vertex;
                if (this.moveTiePointSource) {
                    vertex = line.getVertex(0);
                } else {
                    vertex = line.getToVertex(0);
                }
                TIE_POINT_CLOSE_VERTEX_RENDERER.paintSelected(viewport, graphics, viewportGeometryFactory, vertex);
            }
        }
    }
    drawXorGeometry(graphics);
}
Also used : Vertex(com.revolsys.geometry.model.vertex.Vertex) BaseCloseable(com.revolsys.io.BaseCloseable) GeometryFactory(com.revolsys.geometry.model.GeometryFactory) BufferedGeoreferencedImage(com.revolsys.raster.BufferedGeoreferencedImage) GeoreferencedImage(com.revolsys.raster.GeoreferencedImage) MappedLocation(com.revolsys.raster.MappedLocation) GeoreferencedImageLayer(com.revolsys.swing.map.layer.raster.GeoreferencedImageLayer) Point(com.revolsys.geometry.model.Point) LineString(com.revolsys.geometry.model.LineString) BoundingBox(com.revolsys.geometry.model.BoundingBox) Polygon(com.revolsys.geometry.model.Polygon)

Example 18 with Vertex

use of com.revolsys.geometry.model.vertex.Vertex in project com.revolsys.open by revolsys.

the class EditRecordGeometryOverlay method paintComponent.

@Override
public void paintComponent(final Viewport2D viewport, final Graphics2D graphics) {
    final GeometryFactory geometryFactory2dFloating = getViewportGeometryFactory2d();
    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    if (isOverlayAction(ACTION_MOVE_GEOMETRY) && this.moveGeometryStart != null) {
        try (BaseCloseable transformCloseable = viewport.setUseModelCoordinates(graphics, true)) {
            for (final CloseLocation location : this.moveGeometryLocations) {
                Geometry geometry = location.getGeometry();
                final GeometryFactory geometryFactory = location.getGeometryFactory();
                final Point from = this.moveGeometryStart.convertGeometry(geometryFactory);
                final Point to = this.moveGeometryEnd.convertGeometry(geometryFactory);
                final double deltaX = to.getX() - from.getX();
                final double deltaY = to.getY() - from.getY();
                geometry = geometry.edit(editor -> editor.move(deltaX, deltaY));
                GEOMETRY_RENDERER.paintSelected(viewport, graphics, geometryFactory2dFloating, geometry);
                GEOMETRY_VERTEX_RENDERER.paintSelected(viewport, graphics, geometryFactory2dFloating, geometry);
            }
        }
    } else if (this.addGeometryEditor != null) {
        try (BaseCloseable transformCloseable = viewport.setUseModelCoordinates(graphics, true)) {
            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            final Geometry addGeometry = this.addGeometryEditor.getCurrentGeometry();
            GEOMETRY_RENDERER.paintSelected(viewport, graphics, geometryFactory2dFloating, addGeometry);
            GEOMETRY_VERTEX_RENDERER.paintSelected(viewport, graphics, geometryFactory2dFloating, addGeometry);
        }
    }
    if (this.moveGeometryStart == null) {
        final List<CloseLocation> mouseOverLocations = getMouseOverLocations();
        try (BaseCloseable transformCloseable = viewport.setUseModelCoordinates(graphics, true)) {
            for (final CloseLocation location : mouseOverLocations) {
                final Geometry geometry = location.getGeometry();
                GEOMETRY_RENDERER.paintSelected(viewport, graphics, geometryFactory2dFloating, geometry);
            }
        }
        for (final CloseLocation location : mouseOverLocations) {
            final Geometry geometry = location.getGeometry();
            GEOMETRY_VERTEX_RENDERER.paintSelected(viewport, graphics, geometryFactory2dFloating, geometry);
            if (!isOverlayAction(ACTION_MOVE_GEOMETRY) && !this.addGeometryEditVerticesStart && !this.editGeometryVerticesStart) {
                final Vertex vertex = location.getVertex();
                if (vertex == null) {
                    final MarkerStyle style = MarkerStyle.marker("xLine", 9, WebColors.Blue, 3, WebColors.Blue);
                    final double orientation = location.getSegment().getOrientaton();
                    final Point pointOnLine = location.getViewportPoint();
                    MarkerStyleRenderer.renderMarker(viewport, graphics, pointOnLine, style, orientation);
                } else {
                    GEOMETRY_CLOSE_VERTEX_RENDERER.paintSelected(viewport, graphics, geometryFactory2dFloating, vertex);
                }
            }
        }
    }
    drawXorGeometry(graphics);
}
Also used : CloseLocation(com.revolsys.swing.map.overlay.CloseLocation) Geometry(com.revolsys.geometry.model.Geometry) LineSegment(com.revolsys.geometry.model.segment.LineSegment) Arrays(java.util.Arrays) Icons(com.revolsys.swing.Icons) ElevationModelLayer(com.revolsys.swing.map.layer.elevation.ElevationModelLayer) Point2D(java.awt.geom.Point2D) FieldDefinition(com.revolsys.record.schema.FieldDefinition) CloseLocation(com.revolsys.swing.map.overlay.CloseLocation) SwingUtil(com.revolsys.swing.SwingUtil) Cursor(java.awt.Cursor) RenderingHints(java.awt.RenderingHints) VertexStyleRenderer(com.revolsys.swing.map.overlay.VertexStyleRenderer) Layer(com.revolsys.swing.map.layer.Layer) SetVertexUndoEdit(com.revolsys.swing.map.overlay.record.geometryeditor.SetVertexUndoEdit) Viewport2D(com.revolsys.swing.map.Viewport2D) Map(java.util.Map) BaseCloseable(com.revolsys.io.BaseCloseable) InsertVertexUndoEdit(com.revolsys.swing.map.overlay.record.geometryeditor.InsertVertexUndoEdit) MouseListener(java.awt.event.MouseListener) AbstractRecordLayer(com.revolsys.swing.map.layer.record.AbstractRecordLayer) UndoableEdit(javax.swing.undo.UndoableEdit) GeometryDataType(com.revolsys.geometry.model.GeometryDataType) ZoomOverlay(com.revolsys.swing.map.overlay.ZoomOverlay) Collection(java.util.Collection) Project(com.revolsys.swing.map.layer.Project) Set(java.util.Set) Maps(com.revolsys.collection.map.Maps) KeyEvent(java.awt.event.KeyEvent) DeleteVertexUndoEdit(com.revolsys.swing.map.overlay.record.geometryeditor.DeleteVertexUndoEdit) Logs(com.revolsys.logging.Logs) AddGeometryCompleteAction(com.revolsys.swing.map.overlay.AddGeometryCompleteAction) AppendVertexUndoEdit(com.revolsys.swing.map.overlay.record.geometryeditor.AppendVertexUndoEdit) MultipleUndo(com.revolsys.swing.undo.MultipleUndo) List(java.util.List) MarkerStyle(com.revolsys.swing.map.layer.record.style.MarkerStyle) PropertyChangeListener(java.beans.PropertyChangeListener) LayerRecord(com.revolsys.swing.map.layer.record.LayerRecord) AbstractUndoableEdit(com.revolsys.swing.undo.AbstractUndoableEdit) GeometryEditor(com.revolsys.geometry.model.editor.GeometryEditor) GeometryFactory(com.revolsys.geometry.model.GeometryFactory) Toolkit(java.awt.Toolkit) Point(com.revolsys.geometry.model.Point) AbstractLayer(com.revolsys.swing.map.layer.AbstractLayer) InputEvent(java.awt.event.InputEvent) ActionListener(java.awt.event.ActionListener) LineString(com.revolsys.geometry.model.LineString) RecordDefinition(com.revolsys.record.schema.RecordDefinition) LayerRecordMenu(com.revolsys.swing.map.layer.record.LayerRecordMenu) ArrayList(java.util.ArrayList) WebColors(com.revolsys.awt.WebColors) Graphics2D(java.awt.Graphics2D) Vertex(com.revolsys.geometry.model.vertex.Vertex) PropertyChangeEvent(java.beans.PropertyChangeEvent) LinkedHashSet(java.util.LinkedHashSet) MapPanel(com.revolsys.swing.map.MapPanel) MoveGeometryUndoEdit(com.revolsys.swing.map.overlay.record.geometryeditor.MoveGeometryUndoEdit) JOptionPane(javax.swing.JOptionPane) ActionEvent(java.awt.event.ActionEvent) DataTypes(com.revolsys.datatype.DataTypes) MouseEvent(java.awt.event.MouseEvent) MarkerStyleRenderer(com.revolsys.swing.map.layer.record.renderer.MarkerStyleRenderer) TreeMap(java.util.TreeMap) MouseMotionListener(java.awt.event.MouseMotionListener) AbstractOverlay(com.revolsys.swing.map.overlay.AbstractOverlay) LayerGroup(com.revolsys.swing.map.layer.LayerGroup) DataType(com.revolsys.datatype.DataType) Geometry(com.revolsys.geometry.model.Geometry) Collections(java.util.Collections) BoundingBox(com.revolsys.geometry.model.BoundingBox) Vertex(com.revolsys.geometry.model.vertex.Vertex) BaseCloseable(com.revolsys.io.BaseCloseable) GeometryFactory(com.revolsys.geometry.model.GeometryFactory) Point(com.revolsys.geometry.model.Point) MarkerStyle(com.revolsys.swing.map.layer.record.style.MarkerStyle)

Example 19 with Vertex

use of com.revolsys.geometry.model.vertex.Vertex in project com.revolsys.open by revolsys.

the class EditRecordGeometryOverlay method geometryEdit.

private GeometryEditor<?> geometryEdit(final MouseEvent event, final CloseLocation location) {
    final Geometry geometry = location.getGeometry();
    final Point newPoint = getSnapOrEventPointWithElevation(event, location);
    int[] vertexId = location.getVertexId();
    final GeometryEditor<?> geometryEditor = geometry.newGeometryEditor();
    if (vertexId == null) {
        vertexId = location.getSegmentIdNext();
        geometryEditor.insertVertex(vertexId, newPoint);
    } else {
        geometryEditor.setVertex(vertexId, newPoint);
    }
    if (geometryEditor.isModified()) {
        final int axisCount = geometryEditor.getAxisCount();
        if (axisCount > 2) {
            for (final Vertex vertex : geometryEditor.vertices()) {
                double z = vertex.getZ();
                if (z == 0 || !Double.isFinite(z)) {
                    z = getElevation(vertex);
                    if (Double.isFinite(z)) {
                        vertex.setZ(z);
                    }
                }
            }
        }
    }
    return geometryEditor;
}
Also used : Geometry(com.revolsys.geometry.model.Geometry) Vertex(com.revolsys.geometry.model.vertex.Vertex) Point(com.revolsys.geometry.model.Point) Point(com.revolsys.geometry.model.Point)

Example 20 with Vertex

use of com.revolsys.geometry.model.vertex.Vertex in project com.revolsys.open by revolsys.

the class EditRecordGeometryOverlay method getVertexGeometry.

protected Geometry getVertexGeometry(final MouseEvent event, final CloseLocation location) {
    final Geometry geometry = location.getGeometry();
    final DataType geometryDataType = DataTypes.getDataType(geometry);
    final DataType geometryPartDataType = getGeometryPartDataType(geometryDataType);
    int previousPointOffset;
    int[] vertexId = location.getVertexId();
    if (vertexId == null) {
        previousPointOffset = 0;
        vertexId = location.getSegmentId();
    } else {
        previousPointOffset = -1;
    }
    final GeometryFactory geometryFactory = location.getGeometryFactory();
    if (DataTypes.GEOMETRY.equals(geometryPartDataType)) {
    } else if (DataTypes.POINT.equals(geometryPartDataType)) {
    } else {
        final Point point = getPoint(geometryFactory, event);
        final Vertex vertex = geometry.getVertex(vertexId);
        Point previousPoint = null;
        Point nextPoint = null;
        if (DataTypes.LINE_STRING.equals(geometryPartDataType) || DataTypes.POLYGON.equals(geometryPartDataType)) {
            if (previousPointOffset == 0) {
                previousPoint = vertex;
            } else {
                previousPoint = vertex.getLinePrevious();
            }
            nextPoint = vertex.getLineNext();
        }
        final List<LineString> lines = new ArrayList<>();
        if (previousPoint != null && !previousPoint.isEmpty()) {
            lines.add(newXorLine(geometryFactory, previousPoint, point));
        }
        if (nextPoint != null && !nextPoint.isEmpty()) {
            lines.add(newXorLine(geometryFactory, nextPoint, point));
        }
        if (!lines.isEmpty()) {
            return geometryFactory.lineal(lines);
        }
    }
    return null;
}
Also used : Geometry(com.revolsys.geometry.model.Geometry) Vertex(com.revolsys.geometry.model.vertex.Vertex) GeometryFactory(com.revolsys.geometry.model.GeometryFactory) GeometryDataType(com.revolsys.geometry.model.GeometryDataType) DataType(com.revolsys.datatype.DataType) List(java.util.List) ArrayList(java.util.ArrayList) Point(com.revolsys.geometry.model.Point) Point(com.revolsys.geometry.model.Point)

Aggregations

Vertex (com.revolsys.geometry.model.vertex.Vertex)42 Point (com.revolsys.geometry.model.Point)18 Geometry (com.revolsys.geometry.model.Geometry)16 GeometryFactory (com.revolsys.geometry.model.GeometryFactory)14 LineString (com.revolsys.geometry.model.LineString)10 Polygon (com.revolsys.geometry.model.Polygon)6 Segment (com.revolsys.geometry.model.segment.Segment)6 ArrayList (java.util.ArrayList)6 GeometryEditor (com.revolsys.geometry.model.editor.GeometryEditor)4 AbstractVertex (com.revolsys.geometry.model.vertex.AbstractVertex)4 LineStringVertex (com.revolsys.geometry.model.vertex.LineStringVertex)4 BaseCloseable (com.revolsys.io.BaseCloseable)4 CloseLocation (com.revolsys.swing.map.overlay.CloseLocation)4 DataType (com.revolsys.datatype.DataType)3 LinearRing (com.revolsys.geometry.model.LinearRing)3 PointDoubleXY (com.revolsys.geometry.model.impl.PointDoubleXY)3 LineSegment (com.revolsys.geometry.model.segment.LineSegment)3 MapPanel (com.revolsys.swing.map.MapPanel)3 WebColors (com.revolsys.awt.WebColors)2 Maps (com.revolsys.collection.map.Maps)2