/**
*
*/
package org.goko.tools.viewer.jogl.utils.render.tool;
import java.util.ArrayList;
import java.util.List;
import javax.media.opengl.GL;
import javax.media.opengl.GL3;
import javax.vecmath.Color4f;
import javax.vecmath.Point4f;
import org.goko.core.common.exception.GkException;
import org.goko.core.controller.IGCodeContextProvider;
import org.goko.core.controller.IThreeAxisControllerAdapter;
import org.goko.core.gcode.rs274ngcv3.context.GCodeContext;
import org.goko.core.math.Tuple6b;
import org.goko.tools.viewer.jogl.service.JoglUtils;
import org.goko.tools.viewer.jogl.utils.render.internal.AbstractLineRenderer;
/**
* @author PsyKo
*
*/
public class ToolLinePrintRenderer extends AbstractLineRenderer{
/** Adapter giving the 3 axis positions */
private IThreeAxisControllerAdapter controllerAdapter;
private IGCodeContextProvider<GCodeContext> gcodeContextProvider;
/**
* @param renderPrimitive
* @param usedBuffers
*/
public ToolLinePrintRenderer(IThreeAxisControllerAdapter controllerService, IGCodeContextProvider<GCodeContext> gcodeContextProvider) {
super(GL.GL_LINES, VERTICES | COLORS);
this.controllerAdapter = controllerService;
this.gcodeContextProvider = gcodeContextProvider;
this.setLineWidth(2f);
}
/** (inheritDoc)
* @see org.goko.tools.viewer.jogl.utils.render.internal.AbstractVboJoglRenderer#performRender(javax.media.opengl.GL3)
*/
@Override
protected void performRender(GL3 gl) throws GkException {
updateGeometry();
super.performRender(gl);
}
/** (inheritDoc)
* @see org.goko.tools.viewer.jogl.utils.render.internal.AbstractVboJoglRenderer#buildGeometry()
*/
@Override
protected void buildGeometry() throws GkException {
List<Point4f> lstPoint = new ArrayList<Point4f>();
List<Color4f> lstColor = new ArrayList<Color4f>();
float x = controllerAdapter.getX().value(JoglUtils.JOGL_UNIT).floatValue();
float y = controllerAdapter.getY().value(JoglUtils.JOGL_UNIT).floatValue();
float z = controllerAdapter.getZ().value(JoglUtils.JOGL_UNIT).floatValue();
Tuple6b offset = new Tuple6b().setZero();
float sx = 0;
float sy = 0;
float sz = 0;
if(gcodeContextProvider != null){
offset = gcodeContextProvider.getGCodeContext().getActiveCoordinateSystemData();
sx = offset.getX().value(JoglUtils.JOGL_UNIT).floatValue();
sy = offset.getY().value(JoglUtils.JOGL_UNIT).floatValue();
sz = offset.getZ().value(JoglUtils.JOGL_UNIT).floatValue();
}
x += sx;
y += sy;
z += sz;
lstPoint.add( new Point4f(sx,sy,sz,1));
lstPoint.add( new Point4f(x,sy,sz,1));
lstColor.add(new Color4f(1f, 0.0f, 0.0f, 1f));
lstColor.add(new Color4f(1f, 0.0f, 0.0f, 1f));
lstPoint.add( new Point4f(x,sy, sz,1));
lstPoint.add( new Point4f(x,y, sz,1));
lstColor.add(new Color4f(0.0f, 1.0f, 0.0f, 1f));
lstColor.add(new Color4f(0.0f, 1.0f, 0.0f, 1f));
lstPoint.add( new Point4f(x,y, sz,1));
lstPoint.add( new Point4f(x,y, z,1));
lstColor.add(new Color4f(0.0f, 0.0f, 1.0f, 1f));
lstColor.add(new Color4f(0.0f, 0.0f, 1.0f, 1f));
setVerticesCount(lstPoint.size());
setVerticesBuffer( JoglUtils.buildFloatBuffer4f(lstPoint) );
setColorsBuffer( JoglUtils.buildFloatBuffer4f(lstColor) );
}
}