/**
*
*/
package cz.cuni.mff.peckam.java.origamist.modelstate;
import javax.vecmath.Point2d;
import javax.vecmath.Point3d;
/**
* A text marker which refers to a point on paper.
*
* @author Martin Pecka
*/
public class Marker implements Cloneable
{
/** The data of this marker needed for rendering. */
protected MarkerRenderData renderData;
/** The point on paper this marker refers to. */
protected Point2d point2d;
/** Number of steps this marker should be displayed. */
protected int stepsToHide;
/**
* @param text The text to display.
* @param point3d The point to refer to.
* @param point2d The point on paper this marker refers to.
* @param stepsToHide Number of steps this marker should be displayed.
*/
public Marker(String text, Point3d point3d, Point2d point2d, int stepsToHide)
{
this.renderData = new MarkerRenderData(text, point3d);
this.point2d = point2d;
this.stepsToHide = stepsToHide;
}
/**
* @return The point on paper this marker refers to.
*/
public Point2d getPoint2d()
{
return point2d;
}
/**
* @param point2d The point on paper this marker refers to.
*/
public void setPoint2d(Point2d point2d)
{
this.point2d = point2d;
}
/**
* @return Number of steps this marker should be displayed.
*/
public int getStepsToHide()
{
return stepsToHide;
}
/**
* @param stepsToHide Number of steps this marker should be displayed.
*/
public void setStepsToHide(int stepsToHide)
{
this.stepsToHide = stepsToHide;
}
/**
* @return The text to display.
*/
public String getText()
{
return renderData.getText();
}
/**
* @return The point to refer to.
*/
public Point3d getPoint3d()
{
return renderData.getPoint3d();
}
/**
* @param text The text to display.
*/
void setText(String text)
{
renderData.text = text;
}
/**
* @param point3d The point to refer to.
*/
void setPoint3d(Point3d point3d)
{
renderData.point3d = point3d;
}
/**
* @return The data of this marker needed for rendering.
*/
MarkerRenderData getRenderData()
{
return renderData;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((point2d == null) ? 0 : point2d.hashCode());
result = prime * result + ((renderData == null) ? 0 : renderData.hashCode());
result = prime * result + stepsToHide;
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Marker other = (Marker) obj;
if (point2d == null) {
if (other.point2d != null)
return false;
} else if (!point2d.equals(other.point2d))
return false;
if (renderData == null) {
if (other.renderData != null)
return false;
} else if (!renderData.equals(other.renderData))
return false;
if (stepsToHide != other.stepsToHide)
return false;
return true;
}
@Override
public String toString()
{
return "Marker [text=" + getText() + ", point3d=" + getPoint3d() + ", point2d=" + point2d + ", stepsToHide="
+ stepsToHide + "]";
}
@Override
protected Marker clone()
{
try {
Marker clone = (Marker) super.clone();
clone.renderData = renderData.clone();
clone.point2d = (Point2d) point2d.clone();
return clone;
} catch (CloneNotSupportedException e) {
return null;
}
}
}