package org.geogebra.common.geogebra3D.euclidian3D.draw; import org.geogebra.common.euclidian.plot.CurvePlotter; import org.geogebra.common.geogebra3D.euclidian3D.EuclidianView3D; import org.geogebra.common.geogebra3D.euclidian3D.openGL.PlotterBrush; import org.geogebra.common.geogebra3D.euclidian3D.openGL.Renderer; import org.geogebra.common.kernel.Matrix.CoordSys; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoLocusND; /** * @author mathieu * * Drawable for locus * */ public class DrawLocus3D extends Drawable3DCurves { private GeoLocusND locus; private CoordSys transformCoordSys; /** * @param a_view3d * the 3D view where the curve is drawn * @param locus * the locus to draw * @param geo * locus itself or parent geo */ public DrawLocus3D(EuclidianView3D a_view3d, GeoLocusND locus, GeoElement geo, CoordSys transformSys) { super(a_view3d, geo); this.locus = locus; this.transformCoordSys = transformSys; } @Override public void drawGeometry(Renderer renderer) { renderer.getGeometryManager().draw(getGeometryIndex()); } @Override protected boolean updateForItSelf() { EuclidianView3D view = getView3D(); Renderer renderer = view.getRenderer(); PlotterBrush brush = renderer.getGeometryManager().getBrush(); brush.start(getReusableGeometryIndex()); brush.setThickness(getGeoElement().getLineThickness(), (float) view.getScale()); brush.setAffineTexture(0f, 0f); brush.setLength(1f); CurvePlotter.draw(brush, getLocus().getPoints(), transformCoordSys); setGeometryIndex(brush.end()); return true; } private GeoLocusND getLocus() { return locus; } @Override protected void updateForView() { if (getView3D().viewChangedByZoom() || getView3D().viewChangedByTranslate()) { setWaitForUpdate(); } } @Override public int getPickOrder() { return DRAW_PICK_ORDER_PATH; } @Override public void addToDrawable3DLists(Drawable3DLists lists) { addToDrawable3DLists(lists, DRAW_TYPE_CLIPPED_CURVES); } @Override public void removeFromDrawable3DLists(Drawable3DLists lists) { removeFromDrawable3DLists(lists, DRAW_TYPE_CLIPPED_CURVES); } @Override protected boolean isLabelVisible() { return false; } }