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;
}
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);
}
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);
}
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;
}
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;
}
Aggregations