package org.jzy3d.plot3d.rendering.ordering;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.rendering.view.Camera;
import org.jzy3d.plot3d.rendering.view.View;
import org.jzy3d.plot3d.transform.Transform;

import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;



/** An ordering strategy is a {@link Comparator} for {@link AbstractDrawable}s
 * that may compute the priority between {@link AbstractDrawable}s d1 and d2.
 *
 * @author Martin Pernollet
 *
 */
public abstract class AbstractOrderingStrategy implements Comparator{
    
    /** Returns a score for ranking this drawable among other drawables of the scenegraph. */
    public abstract double score(AbstractDrawable drawable);

    public abstract double score(Coord3d coord);

    /**
     * @throws java.lang.IllegalArgumentException: "Comparison method violates its general contract!" on some JVM. Fix with System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
     * @param monotypes
     * @param cam
     */
    public void sort(List monotypes, Camera cam){
		setCamera(cam);
		Collections.sort(monotypes, this);
	}
	
	/** Return the opposite of closest distance, so that closest distance is sorted after farest distance.*/
	protected int comparison(double dist1, double dist2){
		if(dist1 == dist2)
			return 0;
		else if(dist1 < dist2)
			return 1;//*Math.max((int)Math.abs(dist1-dist2),1);
		else
			return -1;//*Math.max((int)Math.abs(dist1-dist2),1);
	}
	
	/* */

	public void setAll(GL gl, GLU glu, Camera camera, Transform transform){
		this.gl        = gl;
		this.glu       = glu;
		this.camera    = camera;
		this.transform = transform;
	}
	
	public Camera getCamera() {
		return camera;
	}

	public void setCamera(Camera camera) {
		this.camera = camera;
	}

	public Transform getTransform() {
		return transform;
	}

	public void setTransform(Transform transform) {
		this.transform = transform;
	}
	
	public GL getGl() {
		return gl;
	}

	public void setGl(GL gl) {
		this.gl = gl;
	}

	public GLU getGlu() {
		return glu;
	}

	public void setGlu(GLU glu) {
		this.glu = glu;
	}
	

    public View getView() {
        return view;
    }

    public void setView(View view) {
        this.view = view;
    }
	
	/* */
	

    protected View view;
    protected Camera camera;
	protected Transform transform;
	protected GL gl;
	protected GLU glu;
	
}

 

Ads help maintain this website.