private void insertPlacemark(ProductSceneView view) {
Product product = view.getProduct();
final String[] uniqueNameAndLabel = PlacemarkNameFactory.createUniqueNameAndLabel(placemarkDescriptor,
product);
final String name = uniqueNameAndLabel[0];
final String label = uniqueNameAndLabel[1];
PixelPos rasterPos = new PixelPos(view.getCurrentPixelX() + 0.5f, view.getCurrentPixelY() + 0.5f);
Point2D modelPos = view.getRaster().getImageToModelTransform().transform(rasterPos, new Point2D.Double());
Point2D scenePos = new Point2D.Double();
try {
view.getRaster().getModelToSceneTransform().transform(modelPos, scenePos);
final AffineTransform sceneToImage = Product.findImageToModelTransform(product.getSceneGeoCoding()).createInverse();
rasterPos = (PixelPos) sceneToImage.transform(modelPos, new PixelPos());
} catch (TransformException | NoninvertibleTransformException e) {
Dialogs.showError("Could not place pin in image due to transformation exception: " + e.getMessage());
return;
}
final Placemark newPlacemark = Placemark.createPointPlacemark(placemarkDescriptor, name, label, "",
rasterPos, null, product.getSceneGeoCoding());
PlacemarkGroup placemarkGroup = placemarkDescriptor.getPlacemarkGroup(product);
String defaultStyleCss = placemarkGroup.getVectorDataNode().getDefaultStyleCss();
if(newPlacemark.getStyleCss().isEmpty()) {
newPlacemark.setStyleCss(defaultStyleCss);
}
placemarkGroup.add(newPlacemark);
UndoRedo.Manager undoManager = SnapApp.getDefault().getUndoManager(product);
if (undoManager != null) {
undoManager.addEdit(UndoablePlacemarkActionFactory.createUndoablePlacemarkInsertion(product, newPlacemark, placemarkDescriptor));
}
}