package org.archstudio.bna.utils;
import java.awt.geom.Point2D;
import org.archstudio.bna.IMutableCoordinateMapper;
import org.archstudio.bna.IScrollableCoordinateMapper;
import org.archstudio.sysutils.SystemUtils;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
public class LinearCoordinateMapper extends AbstractCoordinateMapper implements IMutableCoordinateMapper,
IScrollableCoordinateMapper {
public LinearCoordinateMapper() {
}
@Override
public Rectangle getLocalBounds() {
return new Rectangle(//
SystemUtils.roundB(worldBounds.x * localScale), //
SystemUtils.roundB(worldBounds.y * localScale), //
SystemUtils.roundB(worldBounds.width * localScale), //
SystemUtils.roundB(worldBounds.height * localScale));
}
@Override
public Point worldToLocal(Point worldPoint) {
return new Point(//
SystemUtils.roundB(worldPoint.x * localScale - localOrigin.x), //
SystemUtils.roundB(worldPoint.y * localScale - localOrigin.y));
}
@Override
public Point2D worldToLocal(Point2D worldPoint) {
return new Point2D.Double(//
worldPoint.getX() * localScale - localOrigin.x, //
worldPoint.getY() * localScale - localOrigin.y);
}
@Override
public Point localToWorld(Point localPoint) {
return new Point(//
SystemUtils.roundB((localPoint.x + localOrigin.x) / localScale), //
SystemUtils.roundB((localPoint.y + localOrigin.y) / localScale));
}
@Override
public Point2D localToWorld(Point2D localPoint) {
return new Point2D.Double(//
(localPoint.getX() + localOrigin.x) / localScale, //
(localPoint.getY() + localOrigin.y) / localScale);
}
}