public void zoomToProduct(Product product) {
if (product == null || product.getSceneGeoCoding() == null) {
return;
}
final GeneralPath[] generalPaths = getGeoBoundaryPaths(product);
Rectangle2D modelArea = new Rectangle2D.Double();
final Viewport viewport = getLayerCanvas().getViewport();
for (GeneralPath generalPath : generalPaths) {
final Rectangle2D rectangle2D = generalPath.getBounds2D();
if (modelArea.isEmpty()) {
if (!viewport.isModelYAxisDown()) {
modelArea.setFrame(rectangle2D.getX(), rectangle2D.getMaxY(),
rectangle2D.getWidth(), rectangle2D.getHeight());
}
modelArea = rectangle2D;
} else {
modelArea.add(rectangle2D);
}
}
Rectangle2D modelBounds = modelArea.getBounds2D();
modelBounds.setFrame(modelBounds.getX() - 2, modelBounds.getY() - 2,
modelBounds.getWidth() + 4, modelBounds.getHeight() + 4);
modelBounds = cropToMaxModelBounds(modelBounds);
viewport.zoom(modelBounds);
fireScrolled();
}