package org.geogebra.common.geogebra3D.euclidian3D.draw; import org.geogebra.common.euclidian.EuclidianController; import org.geogebra.common.geogebra3D.euclidian3D.EuclidianView3D; import org.geogebra.common.geogebra3D.euclidian3D.openGL.Renderer; import org.geogebra.common.geogebra3D.euclidian3D.openGL.Renderer.PickingType; import org.geogebra.common.kernel.geos.GeoElement; /** * Class for drawing surfaces * * @author matthieu * */ public abstract class Drawable3DSurfaces extends Drawable3D { /** * common constructor * * @param a_view3d * @param a_geo */ public Drawable3DSurfaces(EuclidianView3D a_view3d, GeoElement a_geo) { super(a_view3d); init(a_geo); } @Override protected void init(GeoElement a_plane3D) { super.init(a_plane3D); setPickingType(PickingType.SURFACE); } /** * common constructor for previewable * * @param a_view3d */ public Drawable3DSurfaces(EuclidianView3D a_view3d) { super(a_view3d); setPickingType(PickingType.SURFACE); } /** * draws the geometry that hides other drawables (for dashed curves) * * @param renderer */ abstract void drawGeometryHiding(Renderer renderer); @Override public void drawHiding(Renderer renderer) { if (isVisible() && hasTransparentAlpha()) { drawSurfaceGeometry(renderer); } drawTracesHidingSurface(renderer); } protected abstract void drawSurfaceGeometry(Renderer renderer); @Override public void drawTransp(Renderer renderer) { if (isVisible() && hasTransparentAlpha()) { setSurfaceHighlightingColor(); drawSurfaceGeometry(renderer); } drawTracesTranspSurface(renderer); } @Override protected void drawGeometryForPickingIntersection(Renderer renderer) { drawOutline(renderer); } // method used only if surface is not transparent @Override public void drawNotTransparentSurface(Renderer renderer) { if (isVisible() && getAlpha() == 255) { setSurfaceHighlightingColor(); drawSurfaceGeometry(renderer); } drawTracesNotTranspSurface(renderer); } @Override protected void updateColors() { updateAlpha(); setColorsOutlined(); } /* * protected boolean updateForItSelf(){ * * updateColors(); * * return true; } */ @Override protected void updateForView() { // overridden in subclasses } @Override public boolean isTransparent() { return getAlpha() <= EuclidianController.MAX_TRANSPARENT_ALPHA_VALUE_INT; } @Override public void addToDrawable3DLists(Drawable3DLists lists) { addToDrawable3DLists(lists, DRAW_TYPE_SURFACES); } @Override public void removeFromDrawable3DLists(Drawable3DLists lists) { removeFromDrawable3DLists(lists, DRAW_TYPE_SURFACES); } @Override protected double getColorShift() { return COLOR_SHIFT_SURFACE; } }