private void draw( Object parentGroup, GeometryIndex parentIndex, LinearRing linearRing, GraphicsContext graphics) { String groupName = baseName; if (parentIndex != null) { groupName += "." + editingService.getIndexService().format(parentIndex); } Composite edgeGroup = getOrCreateGroup(parentGroup, groupName + ".edges"); Composite vertexGroup = getOrCreateGroup(parentGroup, groupName + ".vertices"); Coordinate[] coordinates = linearRing.getCoordinates(); if (coordinates != null) { // Check if we have to draw the background as well (if there are controllers defined for it): GraphicsController controller = createGeometryController(parentIndex); if (controller != null) { Polygon polygon = mapWidget.getMapModel().getGeometryFactory().createPolygon(linearRing, null); graphics.drawPolygon(parentGroup, groupName + ".background", polygon, new ShapeStyle()); graphics.setController(parentGroup, groupName + ".background", controller); } // Draw individual edges: int max = coordinates.length; if (!styleService.isCloseRingWhileInserting() && editingService.getEditingState() == GeometryEditState.INSERTING && editingService .getIndexService() .isChildOf(parentIndex, editingService.getInsertIndex())) { max--; } for (int i = 1; i < max; i++) { GeometryIndex edgeIndex = editingService .getIndexService() .addChildren(parentIndex, GeometryIndexType.TYPE_EDGE, i - 1); String identifier = baseName + "." + editingService.getIndexService().format(edgeIndex); LineString edge = linearRing .getGeometryFactory() .createLineString(new Coordinate[] {coordinates[i - 1], coordinates[i]}); graphics.drawLine(edgeGroup, identifier, edge, findEdgeStyle(edgeIndex)); graphics.setController(edgeGroup, identifier, createEdgeController(edgeIndex)); } addInivisibleShapeToGraphicsContext(graphics, vertexGroup); for (int i = 0; i < coordinates.length - 1; i++) { GeometryIndex vertexIndex = editingService .getIndexService() .addChildren(parentIndex, GeometryIndexType.TYPE_VERTEX, i); String identifier = baseName + "." + editingService.getIndexService().format(vertexIndex); addShapeToGraphicsContext( graphics, vertexGroup, identifier, coordinates[i], findVertexStyle(vertexIndex)); graphics.setController(vertexGroup, identifier, createVertexController(vertexIndex)); } } }
private void draw( Object parentGroup, GeometryIndex parentIndex, Polygon polygon, GraphicsContext graphics) { String groupName = baseName; if (parentIndex != null) { groupName += "." + editingService.getIndexService().format(parentIndex); } Composite bgGroup = getOrCreateGroup(parentGroup, groupName + ".background"); Composite geometryGroup = getOrCreateGroup(parentGroup, groupName + ".geometries"); // Draw the exterior ring: GeometryIndex shellIndex = editingService .getIndexService() .addChildren(parentIndex, GeometryIndexType.TYPE_GEOMETRY, 0); if (!polygon.isEmpty()) { if (styleService.getBackgroundStyle() != null && styleService.getBackgroundStyle().getFillOpacity() > 0) { graphics.drawPolygon(bgGroup, "background", polygon, findGeometryStyle(shellIndex)); } draw(geometryGroup, shellIndex, polygon.getExteriorRing(), graphics); } // Draw the interior rings: for (int i = 0; i < polygon.getNumInteriorRing(); i++) { GeometryIndex holeIndex = editingService .getIndexService() .addChildren(parentIndex, GeometryIndexType.TYPE_GEOMETRY, i + 1); draw(geometryGroup, holeIndex, polygon.getInteriorRingN(i), graphics); } }