public void vectorDataLayerSelected(VectorDataLayer vectorDataLayer) { Debug.trace("VectorDataFigureEditor.vectorDataLayerSelected: " + vectorDataLayer.getName()); this.vectorDataNode = vectorDataLayer.getVectorDataNode(); setFigureCollection(vectorDataLayer.getFigureCollection()); setFigureFactory(vectorDataLayer.getFigureFactory()); final DefaultFigureStyle style = new DefaultFigureStyle(); style.fromCssString(vectorDataLayer.getVectorDataNode().getDefaultStyleCss()); setDefaultLineStyle(style); setDefaultPolygonStyle(style); }
protected VectorDataLayer createLayer(VectorDataNode vectorDataNode, RasterDataNode rasterDataNode, PropertySet configuration) { return new VectorDataLayer(this, vectorDataNode, rasterDataNode, configuration); }
@Override protected void renderLayer(Rendering rendering) { drawTrackPointConnections(rendering); super.renderLayer(rendering); }
@Override public boolean accept(Layer layer) { return layer instanceof VectorDataLayer && (((VectorDataLayer) layer).getVectorDataNode() == vectorDataNode); } }
if (selLayer instanceof VectorDataLayer) { final VectorDataLayer vectorLayer = (VectorDataLayer) selLayer; if (vectorLayer.getVectorDataNode() != null) { final String typeName = vectorLayer.getVectorDataNode().getFeatureType().getTypeName(); if (Product.GEOMETRY_FEATURE_TYPE_NAME.equals(typeName)) { layer = vectorLayer; if (vectorDataLayer.getFigureCollection().getFigureCount() > 0) { Figure figure = vectorDataLayer.getFigureCollection().getFigure(0); if (figure instanceof ShapeFigure) { return (ShapeFigure) figure;
private static Figure[] getFigures(VectorDataLayer vectorDataLayer, VectorDataFigureEditor figureEditor, MouseEvent mouseEvent) { Viewport viewport = figureEditor.getViewport(); AffineTransform v2mTransform = viewport.getViewToModelTransform(); Rectangle rectangle = figureEditor.getSelectionRectangle(); Figure[] figures = new Figure[0]; if (rectangle != null) { Shape shape = v2mTransform.createTransformedShape(rectangle); figures = vectorDataLayer.getFigureCollection().getFigures(shape); } else { v2mTransform.transform(mouseEvent.getPoint(), null); Point2D modelPoint = v2mTransform.transform(mouseEvent.getPoint(), null); AffineTransform m2vTransform = viewport.getModelToViewTransform(); Figure figure = vectorDataLayer.getFigureCollection().getFigure(modelPoint, m2vTransform); if (figure != null) { figures = new Figure[]{figure}; } } return figures; }
protected VectorDataLayer(VectorDataLayerType vectorDataLayerType, VectorDataNode vectorDataNode, SceneTransformProvider provider, PropertySet configuration) { super(vectorDataLayerType, configuration); setUniqueId(); this.vectorDataNode = vectorDataNode; setName(vectorDataNode.getName()); figureFactory = new SimpleFeatureFigureFactory(vectorDataNode.getFeatureType(), provider); figureCollection = new DefaultFigureCollection(); updateFigureCollection(); vectorDataChangeHandler = new VectorDataChangeHandler(); vectorDataNode.getProduct().addProductNodeListener(vectorDataChangeHandler); figureCollection.addChangeListener(new FigureChangeHandler()); }
@Override public void nodeChanged(ProductNodeEvent event) { if (event.getSourceNode() == getVectorDataNode()) { Debug.trace("VectorDataLayer$VectorDataChangeHandler.nodeChanged: event = " + event); if (ProductNode.PROPERTY_NAME_NAME.equals(event.getPropertyName())) { setName(getVectorDataNode().getName()); } else if (VectorDataNode.PROPERTY_NAME_STYLE_CSS.equals(event.getPropertyName())) { if (event.getNewValue() != null) { if (getVectorDataNode().getPlacemarkGroup().contains(sourceNode)) if (event.getPropertyName().equals(Placemark.PROPERTY_NAME_STYLE_CSS)) { updateFigureCollection();
private void setUniqueId() { setId(VectorDataLayerType.VECTOR_DATA_LAYER_ID_PREFIX + (++id)); }
public VectorDataLayer(LayerContext ctx, VectorDataNode vectorDataNode, SceneTransformProvider provider) { this(TYPE, vectorDataNode, provider, TYPE.createLayerConfig(ctx)); getConfiguration().setValue(VectorDataLayerType.PROPERTY_NAME_VECTOR_DATA, vectorDataNode.getName()); }
String css = placemark.getStyleCss(); final FigureStyle normalStyle = DefaultFigureStyle.createFromCss(css); final FigureStyle selectedStyle = getFigureFactory().deriveSelectedStyle(normalStyle); featureFigure.setNormalStyle(normalStyle); featureFigure.setSelectedStyle(selectedStyle); featureFigure = getFigureFactory().createSimpleFeatureFigure(simpleFeature, vectorDataNode.getDefaultStyleCss()); figureCollection.addFigure(featureFigure);
@Override public boolean accept(Layer layer) { return layer instanceof VectorDataLayer && ((VectorDataLayer) layer).getVectorDataNode() == vectorDataNode; } }
/** * Gets either the selected figures, or all the figures of the currently selected layer. * * @param selectedOnly If {@code true}, only selected figures are returned. * @return The feature figures or an empty array. * @since BEAM 4.10 */ public SimpleFeatureFigure[] getFeatureFigures(boolean selectedOnly) { ArrayList<SimpleFeatureFigure> selectedFigures = new ArrayList<>(); collectFeatureFigures(figureEditor.getFigureSelection(), selectedFigures); if (selectedFigures.isEmpty() && !selectedOnly && getSelectedLayer() instanceof VectorDataLayer) { VectorDataLayer vectorDataLayer = (VectorDataLayer) getSelectedLayer(); collectFeatureFigures(vectorDataLayer.getFigureCollection(), selectedFigures); } return selectedFigures.toArray(new SimpleFeatureFigure[selectedFigures.size()]); }
@Override public boolean accept(Layer layer) { return layer instanceof VectorDataLayer && featureTypeName.equals(((VectorDataLayer) layer).getVectorDataNode().getFeatureType().getTypeName()); } }
public boolean selectPlacemarks(PlacemarkGroup placemarkGroup, Placemark[] placemarks) { VectorDataLayer layer = selectVectorDataLayer(placemarkGroup.getVectorDataNode()); if (layer != null) { FigureCollection figureCollection = layer.getFigureCollection(); Figure[] figures = figureCollection.getFigures(); ArrayList<SimpleFeatureFigure> selectedFigures = new ArrayList<>(figures.length); HashSet<Placemark> placemarkSet = new HashSet<>(Arrays.asList(placemarks)); for (Figure figure : figures) { if (figure instanceof SimpleFeatureFigure) { SimpleFeatureFigure featureFigure = (SimpleFeatureFigure) figure; Placemark placemark = placemarkGroup.getPlacemark(featureFigure.getSimpleFeature()); if (placemarkSet.contains(placemark)) { selectedFigures.add(featureFigure); } } } figureEditor.getFigureSelection().removeAllFigures(); figureEditor.getFigureSelection().addFigures(selectedFigures.toArray(new Figure[selectedFigures.size()])); final int selectionStage = Math.min(selectedFigures.size(), 2); figureEditor.getFigureSelection().setSelectionStage(selectionStage); return true; } return false; }
private VectorDataNode getVectorDataNode(ProductSceneView view) { final Layer rootLayer = view.getRootLayer(); final Layer layer = LayerUtils.getChildLayer(rootLayer, LayerUtils.SearchMode.DEEP, VectorDataLayerFilterFactory.createGeometryFilter()); VectorDataNode vectorDataNode = null; if (layer instanceof VectorDataLayer) { VectorDataLayer vdl = (VectorDataLayer) layer; vectorDataNode = vdl.getVectorDataNode(); } return vectorDataNode; } }
@Override public void selectionChanged(SelectionChangeEvent event) { if (synchronizingPlacemarkSelectedState) { return; } final ProductSceneView sceneView = getSceneView(); if (sceneView != null) { Layer layer = sceneView.getSelectedLayer(); if (layer instanceof VectorDataLayer) { VectorDataLayer vectorDataLayer = (VectorDataLayer) layer; if (vectorDataLayer.getVectorDataNode() == getProduct().getPinGroup().getVectorDataNode() || vectorDataLayer.getVectorDataNode() == getProduct().getGcpGroup().getVectorDataNode()) { updateUIState(); } } } }
@Override public boolean accept(Layer layer) { if (layer instanceof VectorDataLayer) { VectorDataLayer vectorDataLayer = (VectorDataLayer) layer; final Figure[] figures = getFigures(vectorDataLayer, figureEditor, mouseEvent); if (figures.length > 0) { ProductSceneView sceneView = figureEditor.getProductSceneView(); // selectVectorDataLayer changes selectionRectangle // to preserve selection get rectangle first and set it afterwards Rectangle selectionRectangle = figureEditor.getSelectionRectangle(); sceneView.selectVectorDataLayer(vectorDataLayer.getVectorDataNode()); if (selectionRectangle != null) { figureEditor.setSelectionRectangle(selectionRectangle); } return true; } } return false; }
"The geometry is not contained in the product."); } else { vectorDataLayer.getVectorDataNode().getFeatureCollection().addAll(productFeatures);
@Override public void figureChanged(FigureChangeEvent event) { final Figure sourceFigure = event.getSourceFigure(); if (sourceFigure instanceof SimpleFeatureFigure) { SimpleFeatureFigure featureFigure = (SimpleFeatureFigure) sourceFigure; try { final VectorDataNode vectorDataNode = getVectorDataNode(); if (vectorDataNode != null ) { final SimpleFeature simpleFeature = featureFigure.getSimpleFeature(); Debug.trace("VectorDataLayer$FigureChangeHandler: vectorDataNode=" + vectorDataNode.getName() + ", featureType=" + simpleFeature.getFeatureType().getTypeName()); reactingAgainstFigureChange = true; vectorDataNode.fireFeaturesChanged(simpleFeature); // checkme - we could do better by computing changed modelRegion instead of passing null (nf) fireLayerDataChanged(null); } } finally { reactingAgainstFigureChange = false; } } } }