/*
 * Copyright (c) 2010-2011, Martin Pernollet
 * All rights reserved.
 *
 * Redistribution in binary form, with or without modification, is permitted.
 * Edition of source files is allowed.
 * Redistribution of original or modified source files is forbidden.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER 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.
 */

package org.jzy3d.plot3d.rendering.view;

import org.jzy3d.chart.factories.IChartComponentFactory;
import org.jzy3d.plot3d.rendering.canvas.ICanvas;
import org.jzy3d.plot3d.rendering.canvas.Quality;
import org.jzy3d.plot3d.rendering.scene.Scene;

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

/**
 * An {@ InteractiveView} handles 2d projection updates to ensure mouse is always computing
 * intersection with objects in a relevant state.
 *
 * @author Martin Pernollet
 */
public class SelectableView extends View{
	public SelectableView(IChartComponentFactory factory, Scene scene, ICanvas canvas, Quality quality) {
        super(factory, scene, canvas, quality);
    }

	/** If chart is rendered for the first time, or rendered because it,
	 * was resized, we need to update a projection for the CellSelector. */
	@Override
    public void render(GL gl, GLU glu) {
		if( dimensionDirty )
			wasDirty = true;

		super.render(gl, glu); // need to render before projecting to have coherent viewport in selector

		if( firstRender ){
			project();
			firstRender = false;
		}
		if( wasDirty ){
			wasDirty = false;
			project();
		}
	}

	public boolean hasRenderedOnce(){
		return !firstRender;
	}

	protected boolean firstRender = true;
	protected boolean wasDirty = false;
}

 

Ads help maintain this website.