/** * Returns a shape that can be used to draw the mark at the x, y coordinates * with appropriated rotation and size (according to the current style) * * @param x the x coordinate where the mark will be drawn * @param y the y coordinate where the mark will be drawn * @param rotation a custom rotation, other than the mark build in one * * @return a shape that can be used to draw the mark */ public Shape getTransformedShape(float x, float y, float rotation) { if (shape != null) { Rectangle2D bounds = shape.getBounds2D(); double shapeSize = (maxMarkSizeEnabled ? Math.max(bounds.getWidth(), bounds.getHeight()) : bounds.getHeight()); double scale = size / shapeSize; TransformedShape ts = new TransformedShape(); ts.shape = shape; ts.translate(x, y); ts.rotate(rotation); // flip the symbol to take into account the screen orientation // where the y grows from top to bottom ts.scale(scale, -scale); return ts; } else { return null; } }
/** * Returns a shape that can be used to draw the mark at the x, y coordinates * with appropriated rotation and size (according to the current style) * * @param x the x coordinate where the mark will be drawn * @param y the y coordinate where the mark will be drawn * * @return a shape that can be used to draw the mark */ public Shape getTransformedShape(float x, float y) { if (shape != null) { Rectangle2D bounds = shape.getBounds2D(); double shapeSize = Math.max(bounds.getWidth(), bounds.getHeight()); double scale = size / shapeSize; TransformedShape ts = new TransformedShape(); ts.shape = shape; ts.translate(x, y); ts.rotate(rotation); ts.scale(scale, -scale); return ts; } else { return null; } }