All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jeometry.simple.geom3D.primitive.SimpleLine3D Maven / Gradle / Ivy

package org.jeometry.simple.geom3D.primitive;

import org.jeometry.Jeometry;
import org.jeometry.factory.JeometryFactory;
import org.jeometry.geom3D.Geom3D;
import org.jeometry.geom3D.point.Point3D;
import org.jeometry.geom3D.point.Point3DContainer;
import org.jeometry.geom3D.primitive.Line3D;
import org.jeometry.simple.geom3D.mesh.SimpleEdge;

/**
 * A simple implementation of {@link Line3D}.
 * @param  the type of the underlying 3D points
 * @author Julien Seinturier - COMEX S.A. - [email protected] - https://github.com/jorigin/jeometry
 * @version {@value Jeometry#version} build {@value Jeometry#BUILD}
 * @since 1.0.0
 *
 */
public class SimpleLine3D implements Line3D{
  
  private static final long serialVersionUID = Jeometry.BUILD;

  /** The origin of the edge */
  private T end1    = null;

  /** The extremity of the edge */
  private T end2 = null;

  /**
   * Construct a line between two points.
   * @param end1 the first point of the line.
   * @param end2 the second point of the line.
   */
  public SimpleLine3D(T end1, T end2){
    this.end1 = end1;
    this.end2 = end2;
  }

  @Override
  public Point3DContainer getVertices(){
    Point3DContainer p3dm = JeometryFactory.createPoint3DContainer(2);
    p3dm.add(end1);
    p3dm.add(end2);
    return p3dm;
  }
  

  @Override
  public T getEnd1(){
    return this.end1;
  }

  @Override
  public T getEnd2(){
    return this.end2;
  }

  /**
   * Overload of the equals function of {@link Object}. This method return true if the reference of the
   * this line is the same that the object given in parameter. Otherwise, the method {@link #equals(Line3D)} is called
   * if the parameter is an instance of {@link Line3D}.
   * @param o the object to compare
   * @return true if this line and the object given in parameter are equals.
   */
  public boolean equals(Object o){
    if (o == this){
      return true;
    } else{
      if (o instanceof SimpleEdge){
        return equals((SimpleEdge) o);
      } else{
        return false;
      }
    }
  }
  
  @Override
  public String toString(){
    return getClass().getSimpleName()+": ["+"("+end1.getX()+", "+end1.getY()+", "+end1.getZ()+") : ("
                             +end2.getX()+", "+end2.getY()+", "+end2.getZ()+")";
  }

  /**
   * Return the two extremities of this line as an array of {@link Point3D 3D points}.
   * @return the two extremities of this line as an array of {@link Point3D 3D points}.
   */
  public Point3D[] getVerticesArray(){
    Point3D p3da[] = new Point3D[2];
    p3da[0] = end1;
    p3da[1] = end2;
    return p3da;
  }

  /**
   * Check whether two lines are the same. Two lines are the same if their extremity are {@link Geom3D#equals(Point3D, Point3D) equals}.
   * @param e the line to compare to this
   * @return true if the lines are the same and false otherwise.
   */
  public boolean equals(Line3D e){


    // Si deux objets ont même référence, ils sont identiques
    if (this == e){
      return true;
    } else {
      return ((Geom3D.equals(this.getEnd1(), e.getVertices().get(0)) &&
               Geom3D.equals(this.getEnd2(), e.getVertices().get(1))) ||
              (Geom3D.equals(this.getEnd2(), e.getVertices().get(0)) &&
               Geom3D.equals(this.getEnd1(), e.getVertices().get(1))));
    }

  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy