/*
* BackgroundImage.java 8 juin 07
*
* Sweet Home 3D, Copyright (c) 2007 Emmanuel PUYBARET / eTeks <info@eteks.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.eteks.sweethome3d.model;
import java.awt.geom.Point2D;
import java.io.Serializable;
/**
* The image displayed in background of the plan.
* @author Emmanuel Puybaret
*/
public class BackgroundImage implements Serializable {
private static final long serialVersionUID = 1L;
private final Content image;
private final float scaleDistance;
private final float scaleDistanceXStart;
private final float scaleDistanceYStart;
private final float scaleDistanceXEnd;
private final float scaleDistanceYEnd;
private final float xOrigin;
private final float yOrigin;
private final boolean invisible;
/**
* Creates a visible background image.
*/
public BackgroundImage(Content image, float scaleDistance,
float scaleDistanceXStart, float scaleDistanceYStart,
float scaleDistanceXEnd, float scaleDistanceYEnd,
float xOrigin, float yOrigin) {
this(image, scaleDistance, scaleDistanceXStart,
scaleDistanceYStart, scaleDistanceXEnd, scaleDistanceYEnd, xOrigin, yOrigin, true);
}
/**
* Creates a background image.
* @since 1.8
*/
public BackgroundImage(Content image, float scaleDistance,
float scaleDistanceXStart, float scaleDistanceYStart,
float scaleDistanceXEnd, float scaleDistanceYEnd,
float xOrigin, float yOrigin, boolean visible) {
this.image = image;
this.scaleDistance = scaleDistance;
this.scaleDistanceXStart = scaleDistanceXStart;
this.scaleDistanceYStart = scaleDistanceYStart;
this.scaleDistanceXEnd = scaleDistanceXEnd;
this.scaleDistanceYEnd = scaleDistanceYEnd;
this.xOrigin = xOrigin;
this.yOrigin = yOrigin;
// Use an invisible field instead of a visible field to get a default false value
// for images created before version 1.8
this.invisible = !visible;
}
/**
* Returns the image content of this background image.
*/
public Content getImage() {
return this.image;
}
/**
* Returns the distance used to compute the scale of this image.
*/
public float getScaleDistance() {
return this.scaleDistance;
}
/**
* Returns the abcissa of the start point used to compute
* the scale of this image.
*/
public float getScaleDistanceXStart() {
return this.scaleDistanceXStart;
}
/**
* Returns the ordinate of the start point used to compute
* the scale of this image.
*/
public float getScaleDistanceYStart() {
return this.scaleDistanceYStart;
}
/**
* Returns the abcissa of the end point used to compute
* the scale of this image.
*/
public float getScaleDistanceXEnd() {
return this.scaleDistanceXEnd;
}
/**
* Returns the ordinate of the end point used to compute
* the scale of this image.
*/
public float getScaleDistanceYEnd() {
return this.scaleDistanceYEnd;
}
/**
* Returns the scale of this image.
*/
public float getScale() {
return getScale(this.scaleDistance,
this.scaleDistanceXStart, this.scaleDistanceYStart,
this.scaleDistanceXEnd, this.scaleDistanceYEnd);
}
/**
* Returns the scale equal to <code>scaleDistance</code> divided
* by the distance between the points
* (<code>scaleDistanceXStart</code>, <code>scaleDistanceYStart</code>)
* and (<code>scaleDistanceXEnd</code>, <code>scaleDistanceYEnd</code>).
*/
public static float getScale(float scaleDistance,
float scaleDistanceXStart, float scaleDistanceYStart,
float scaleDistanceXEnd, float scaleDistanceYEnd) {
return (float)(scaleDistance
/ Point2D.distance(scaleDistanceXStart, scaleDistanceYStart,
scaleDistanceXEnd, scaleDistanceYEnd));
}
/**
* Returns the origin abscissa of this image.
*/
public float getXOrigin() {
return this.xOrigin;
}
/**
* Returns the origin ordinate of this image.
*/
public float getYOrigin() {
return this.yOrigin;
}
/**
* Returns <code>true</code> if this image is visible in plan.
* @since 1.8
*/
public boolean isVisible() {
return !this.invisible;
}
}