eu.mihosoft.vrl.v3d.Vertex Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JavaCad Show documentation
Show all versions of JavaCad Show documentation
A Java based CSG Cad library
/**
* Vertex.java
*
* Copyright 2014-2014 Michael Hoffer [email protected]. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY Michael Hoffer [email protected] "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL Michael Hoffer [email protected] OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are
* those of the authors and should not be interpreted as representing official
* policies, either expressed or implied, of Michael Hoffer
* [email protected].
*/
package eu.mihosoft.vrl.v3d;
import java.util.Objects;
// TODO: Auto-generated Javadoc
/**
* Represents a vertex of a polygon. This class provides {@link #normal} so
* primitives like {@link Cube} can return a smooth vertex normal, but
* {@link #normal} is not used anywhere else.
*/
public class Vertex {
/**
* Vertex position.
*/
public Vector3d pos;
/**
* Normal.
*/
public Vector3d normal;
/** The weight. */
private double weight = 1.0;
/**
* Constructor. Creates a vertex.
*
* @param pos position
* @param normal normal
*/
public Vertex(Vector3d pos, Vector3d normal) {
this.pos = pos;
this.normal = normal;
}
/**
* Constructor. Creates a vertex.
*
* @param pos position
* @param normal normal
* @param weight weight
*/
private Vertex(Vector3d pos, Vector3d normal, double weight) {
this.pos = pos;
this.normal = normal;
this.weight = weight;
}
/* (non-Javadoc)
* @see java.lang.Object#clone()
*/
@Override
public Vertex clone() {
return new Vertex(pos.clone(), normal.clone(), weight);
}
/**
* Inverts all orientation-specific data. (e.g. vertex normal).
*/
public void flip() {
normal = normal.negated();
}
/**
* Create a new vertex between this vertex and the specified vertex by
* linearly interpolating all properties using a parameter t.
*
* @param other vertex
* @param t interpolation parameter
* @return a new vertex between this and the specified vertex
*/
public Vertex interpolate(Vertex other, double t) {
return new Vertex(pos.lerp(other.pos, t),
normal.lerp(other.normal, t));
}
/**
* Returns this vertex in STL string format.
*
* @return this vertex in STL string format
*/
public String toStlString() {
return "vertex " + this.pos.toStlString();
}
/**
* Returns this vertex in STL string format.
*
* @param sb string builder
* @return the specified string builder
*/
public StringBuilder toStlString(StringBuilder sb) {
sb.append("vertex ");
return this.pos.toStlString(sb);
}
/**
* Returns this vertex in OBJ string format.
*
* @param sb string builder
* @return the specified string builder
*/
public StringBuilder toObjString(StringBuilder sb) {
sb.append("v ");
return this.pos.toObjString(sb).append("\n");
}
/**
* Returns this vertex in OBJ string format.
*
* @return this vertex in OBJ string format
*/
public String toObjString() {
return toObjString(new StringBuilder()).toString();
}
/**
* Applies the specified transform to this vertex.
*
* @param transform the transform to apply
* @return this vertex
*/
public Vertex transform(Transform transform) {
pos = pos.transform(transform, weight);
return this;
}
/**
* Applies the specified transform to a copy of this vertex.
*
* @param transform the transform to apply
* @return a copy of this transform
*/
public Vertex transformed(Transform transform) {
return clone().transform(transform);
}
/**
* Gets the weight.
*
* @return the weight
*/
public double getWeight() {
return weight;
}
/**
* Sets the weight.
*
* @param weight the weight to set
*/
public void setWeight(double weight) {
this.weight = weight;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
int hash = 7;
hash = 53 * hash + Objects.hashCode(this.pos);
return hash;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Vertex other = (Vertex) obj;
if (!this.pos.test(other.pos,Plane.EPSILON_Point)) {
return false;
}
return true;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return pos.toString();
}
public double getX() {
return pos.x;
}
public double getY() {
return pos.y;
}
public double getZ() {
return pos.z;
}
}