/*
GeoGebra - Dynamic Mathematics for Everyone
http://www.geogebra.org
This file is part of GeoGebra.
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.
*/
package org.geogebra.common.kernel;
import org.geogebra.common.kernel.Matrix.Coords;
import org.geogebra.common.kernel.kernelND.GeoQuadricNDConstants;
/**
* @author Mathieu Blossier
*/
public class RegionParameters {
private double t1, t2;
// private boolean isDefined; //tells if parameters have been fed with
// "real" numbers
private Coords normal; // normal on the region at this place
/**
* says if the point is on the path defined by the frontier of the region
*/
private boolean isOnPath = false;
/**
* Creates new region parameters
*/
public RegionParameters() {
this(Double.NaN, Double.NaN);
}
/**
* Creates new region parameters
*
* @param t1
* first parameter
* @param t2
* second parameter
*/
private RegionParameters(double t1, double t2) {
this.t1 = t1;
this.t2 = t2;
regionType = GeoQuadricNDConstants.QUADRIC_NOT_CLASSIFIED;
normal = new Coords(0, 0, 1, 0); // z-direction by default
}
/**
* @param rp
* copy parameters from given RegionParameters
*/
final public void set(RegionParameters rp) {
setT1(rp.t1);
setT2(rp.t2);
this.regionType = rp.regionType;
}
/*
* void appendXML(StringBuilder sb) { // pathParameter sb.append(
* "\t<pathParameter val=\""); sb.append(t); if (branch > 0) { sb.append(
* "\" branch=\""); sb.append(branch); } if (pathType > -1) { sb.append(
* "\" type=\""); sb.append(pathType); } sb.append("\"/>\n"); }
*/
/**
* @return first parameter
*/
public final double getT1() {
return t1;
}
/**
* @param t1
* new first parameter
*/
public final void setT1(double t1) {
if (isNaN(t1)) {
return;
}
this.t1 = t1;
}
/**
* @return second parameter
*/
public final double getT2() {
return t2;
}
/**
* @param t2
* new second parameter
*/
public final void setT2(double t2) {
if (isNaN(t2)) {
return;
}
this.t2 = t2;
}
private final static boolean isNaN(double t) {
if (Double.isNaN(t)) {
// isDefined=false; TODO unused
return true;
}
return false;
}
/**
* @param normal
* normal to the region at this place
*/
public void setNormal(Coords normal) {
this.normal = normal;
}
/**
* @return normal to the region at this place
*/
public Coords getNormal() {
return this.normal;
}
// //////////////////////////////////
// POINT ON PATH
/**
* set if the point is on the path defined by the frontier of the region
*
* @param isOnPath
* true if the point is on the frontier
*/
public final void setIsOnPath(boolean isOnPath) {
this.isOnPath = isOnPath;
}
/**
* says if the point in on the path defined by the frontier of the region
*
* @return true if the point in on the path defined by the frontier of the
* region
*/
public final boolean isOnPath() {
return isOnPath;
}
/**
*
* @return true if at least one of the parameters is NaN
*/
public boolean isNaN() {
return isNaN(t1) || isNaN(t2);
}
private int regionType = GeoQuadricNDConstants.QUADRIC_NOT_CLASSIFIED;
/**
* @return region type (for quadrics)
*/
public final int getRegionType() {
return regionType;
}
/**
* @param regionType
* new region type (for quadrics)
*/
public final void setRegionType(int regionType) {
this.regionType = regionType;
}
}