/*
* __ .__ .__ ._____.
* _/ |_ _______ __|__| ____ | | |__\_ |__ ______
* \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
* | | ( <_> > <| \ \___| |_| || \_\ \\___ \
* |__| \____/__/\_ \__|\___ >____/__||___ /____ >
* \/ \/ \/ \/
*
* Copyright (c) 2006-2011 Karsten Schmidt
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* http://creativecommons.org/licenses/LGPL/2.1/
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
package spimedb.util.geom;
public abstract class AxisAlignedCylinder implements Shape3D {
protected Vec3D pos;
protected float radius;
protected float radiusSquared;
protected float length;
protected AxisAlignedCylinder(roVec3D pos, float radius, float length) {
this.pos = pos.copy();
setRadius(radius);
setLength(length);
}
/**
* Checks if the given point is inside the cylinder.
*
* @param p
* @return true, if inside
*/
public abstract boolean containsPoint(XYZ p);
/**
* @return the length
*/
public float getLength() {
return length;
}
/**
* @return the cylinder's orientation axis
*/
public abstract Vec3D.Axis getMajorAxis();
/**
* Returns the cylinder's position (centroid).
*
* @return the pos
*/
public XYZ getPosition() {
return pos.copy();
}
/**
* @return the cylinder radius
*/
public float getRadius() {
return radius;
}
/**
* @param length
* the length to set
*/
public void setLength(float length) {
this.length = length;
}
/**
* @param pos
* the pos to set
*/
public void setPosition(Vec3D pos) {
this.pos.set(pos);
}
/**
* @param radius
*/
public void setRadius(float radius) {
this.radius = radius;
this.radiusSquared = radius * radius;
}
// /**
// * Builds a TriangleMesh representation of the cylinder at a default
// * resolution 30 degrees.
// *
// * @return mesh instance
// */
// public Mesh3D toMesh() {
// return toMesh(12, 0);
// }
//
// /**
// * Builds a TriangleMesh representation of the cylinder using the given
// * number of steps and start angle offset.
// *
// * @param steps
// * @param thetaOffset
// * @return mesh
// */
// public Mesh3D toMesh(int steps, float thetaOffset) {
// return toMesh(null, steps, thetaOffset);
// }
//
// public Mesh3D toMesh(Mesh3D mesh, int steps, float thetaOffset) {
// return new Cone(pos, getMajorAxis().getVector(), radius, radius, length)
// .toMesh(mesh, steps, thetaOffset, true, true);
// }
}