Class View

java.lang.Object
org.jzy3d.plot3d.rendering.view.View
Direct Known Subclasses:
ChartView, SelectableView

public class View extends Object
A View holds a Scene, a LightSet, an ICanvas to render into. It is the responsability to layout a set of concrete AbstractViewportManagers such as the rendering the scene or an AWTImageViewport for displaying an image in the same window. On can control the Camera with a and get notifyed by a IViewPointChangedListener that the view point has changed. The control is relative to the center of the Scene and is defined using polar coordinates. The View supports post rendering through the addition of
invalid @link
Renderer2d
s whose implementation can define Java2d calls to render on top on OpenGL2. Last, the View offers the ability to get an AxisBox for embedding the Scene and getting values along axes.
Author:
Martin Pernollet
  • Field Details

    • LOGGER

      protected static org.apache.logging.log4j.Logger LOGGER
    • cameraMode

      protected CameraMode cameraMode
    • viewMode

      protected ViewPositionMode viewMode
    • boundsMode

      protected ViewBoundMode boundsMode
    • backgroundColor

      protected Color backgroundColor
    • axisDisplayed

      protected boolean axisDisplayed
    • squared

      protected boolean squared
    • view2DLayout

      protected View2DLayout view2DLayout
      Settings for the layout of a 2D chart
    • view2DProcessing

      protected View2DProcessing view2DProcessing
    • cameraRenderingSphereRadiusFactor

      protected float cameraRenderingSphereRadiusFactor
    • maintainAllObjectsInView

      protected boolean maintainAllObjectsInView
      force to have all object maintained in screen, meaning axebox won't always keep the same size.
    • displayAxisWholeBounds

      protected boolean displayAxisWholeBounds
      display a magenta parallelepiped around the "whole bounds" of the axis (box + labels) for debugging purpose.
    • cam

      protected Camera cam
    • axis

      protected IAxis axis
    • quality

      protected Quality quality
    • scene

      protected Scene scene
    • canvas

      protected ICanvas canvas
    • painter

      protected IPainter painter
    • annotations

      protected Scene annotations
    • viewpoint

      protected Coord3d viewpoint
    • center

      protected Coord3d center
    • scaling

      protected Coord3d scaling
    • upVector

      protected Coord3d upVector
    • hasViewpointLimits

      protected boolean hasViewpointLimits
    • viewBounds

      protected BoundingBox3d viewBounds
    • chart

      protected Chart chart
    • layout

      protected IViewportLayout layout
    • viewPointChangedListeners

      protected List<IViewPointChangedListener> viewPointChangedListeners
    • viewLifecycleListeners

      protected List<IViewLifecycleEventListener> viewLifecycleListeners
    • viewEventListeners

      protected List<IViewEventListener> viewEventListeners
    • wasOnTopAtLastRendering

      protected boolean wasOnTopAtLastRendering
    • first

      protected boolean first
    • hidpi

      protected HiDPI hidpi
    • pixelScale

      protected Coord2d pixelScale
    • initialized

      protected boolean initialized
    • PI

      public static final float PI
      See Also:
    • PI_div2

      public static final float PI_div2
      See Also:
    • DISTANCE_DEFAULT

      public static final float DISTANCE_DEFAULT
      See Also:
    • AZIMUTH_FACING_X_DECREASING

      public static final float AZIMUTH_FACING_X_DECREASING
      See Also:
    • AZIMUTH_FACING_X_INCREASING

      public static final float AZIMUTH_FACING_X_INCREASING
      See Also:
    • AZIMUTH_FACING_Y_DECREASING

      public static final float AZIMUTH_FACING_Y_DECREASING
      See Also:
    • AZIMUTH_FACING_Y_INCREASING

      public static final float AZIMUTH_FACING_Y_INCREASING
      See Also:
    • ELEVATION_ON_TOP

      public static final float ELEVATION_ON_TOP
      See Also:
    • ELEVATION_0

      public static final float ELEVATION_0
      See Also:
    • ELEVATION_ON_BOTTOM

      public static final float ELEVATION_ON_BOTTOM
      See Also:
    • UP_VECTOR_X

      public static final Coord3d UP_VECTOR_X
    • UP_VECTOR_Y

      public static final Coord3d UP_VECTOR_Y
    • UP_VECTOR_Z

      public static final Coord3d UP_VECTOR_Z
    • VIEWPOINT_X_Y_MIN_NEAR_VIEWER

      public static final Coord3d VIEWPOINT_X_Y_MIN_NEAR_VIEWER
      A viewpoint allowing to have min X and Y values near viewer, growing toward horizon.
    • VIEWPOINT_AXIS_CORNER_TOUCH_BORDER

      public static final Coord3d VIEWPOINT_AXIS_CORNER_TOUCH_BORDER
      A viewpoint where two corners of the axis box touch top and bottom lines of the canvas.
    • VIEWPOINT_DEFAULT

      public static final Coord3d VIEWPOINT_DEFAULT
      A nice viewpoint to start the chart
    • VIEWPOINT_DEFAULT_OLD

      public static final Coord3d VIEWPOINT_DEFAULT_OLD
      A nice viewpoint to start the chart
    • dimensionDirty

      protected boolean dimensionDirty
    • viewDirty

      protected boolean viewDirty
      can be set to true by the Renderer3d so that the View knows it is rendering due to a canvas size change
    • factorViewPointDistance

      protected float factorViewPointDistance
      Applies a factor to the default camera distance which is set to the radius of the scene bounds. Changing this value also change the camera clipping planes.
    • slave

      protected boolean slave
      A slave view won't clear its color and depth buffer before rendering
    • spaceTransformer

      protected SpaceTransformer spaceTransformer
    • viewOverlay

      protected IViewOverlay viewOverlay
    • JGL_CORRECT_YZ

      public static float JGL_CORRECT_YZ
    • JGL_CORRECT_XZ

      public static float JGL_CORRECT_XZ
    • JGL_INVERSE_MATRIX_WORKAROUND

      protected static boolean JGL_INVERSE_MATRIX_WORKAROUND
  • Constructor Details

    • View

      public View(IChartFactory factory, Scene scene, ICanvas canvas, Quality quality)
      Create a view attached to a Scene, with its own Camera and Axe. The initial view point is set at
      invalid @link
      View.DEFAULT_VIEW
      .

      The Quality allows setting the rendering capabilities that are set one time by the init() method.

    • View

      protected View()
      An empty constructor to allow creating spied mocks
  • Method Details

    • initInstance

      public void initInstance(IChartFactory factory, Scene scene, ICanvas canvas, Quality quality)
      Initialize a view object. Invoked by constructor Method name is made clear to avoid confusion with init() which initialize open GL context.
      Parameters:
      factory -
      scene -
      canvas -
      quality -
    • configureHiDPIListener

      protected void configureHiDPIListener(ICanvas canvas)
      Upon pixel scale change, either at startup or during execution of the program, the listener will reconfigure the default font according to current HiDPI settings. This will reconfigure anything that draws based on AxisLayout.getFont(), hence:
      • the font of the axis text renderer
      • the font of the colorbar
    • dispose

      public void dispose()
    • shoot

      public void shoot()
      Current view selection into the mother Scene, and call to target canvas rendering.
    • project

      public void project()
      Perform the 2d projection of all Selectable objects of the scene. The result of the projection can be retrieved on the objects's instances.
    • projectMouse

      public Coord3d projectMouse(int x, int y)
      Perform the 3d projection of a 2d coordinate.
    • projectMouse

      public Coord3d projectMouse(Coord3d screen)
      Perform the 3d projection of a 2d coordinate. The z component of the screen coordinate should be between 0 and 1, representing the position in the depth range
    • projectMouse

      public Coord3d projectMouse(Coord2d mouse)
    • projectMouse

      public Coord3d projectMouse(IntegerCoord2d mouse)
    • markDimensionDirty

      public void markDimensionDirty()
      Might be invoked by a IScreenCanvas to indicate that dimension changed and that elements should be reprocessed at next rendering, e.g. 2d projections.
    • rotate

      public void rotate(Coord2d move)
      GENERAL DISPLAY CONTROLS
    • rotate

      public void rotate(Coord2d move, boolean updateView)
    • shift

      public void shift(float factor)
    • shift

      public void shift(float factor, boolean updateView)
    • zoom

      public void zoom(float factor)
    • zoom

      public void zoom(float factor, boolean updateView)
    • zoomX

      public void zoomX(float factor)
    • zoomX

      public void zoomX(float factor, boolean updateView)
    • zoomY

      public void zoomY(float factor)
    • zoomY

      public void zoomY(float factor, boolean updateView)
    • zoomZ

      public void zoomZ(float factor)
    • zoomZ

      public void zoomZ(float factor, boolean updateView)
    • setScale

      public void setScale(Scale scale)
      Z scale.
    • setScale

      public void setScale(Scale scale, boolean notify)
      Z scale.
    • setScaleX

      public void setScaleX(Scale scale)
    • setScaleX

      public void setScaleX(Scale scale, boolean notify)
    • setScaleY

      public void setScaleY(Scale scale)
    • setScaleY

      public void setScaleY(Scale scale, boolean notify)
    • setScaleZ

      public void setScaleZ(Scale scale)
    • setScaleZ

      public void setScaleZ(Scale scale, boolean notify)
    • getScale

      public Scale getScale()
    • lookToBox

      public void lookToBox(BoundingBox3d box)
      Set the surrounding AxisBox dimensions, the Camera target and the colorbar range.
    • setBoundMode

      public void setBoundMode(ViewBoundMode mode)
      Select between an automatic bounding (that allows fitting the entire scene graph), or a custom bounding.
    • updateBounds

      public void updateBounds()
      Set the bounds of the view according to the current ViewBoundMode , and orders a
      invalid @link
      {@link Camera.shoot()
      }.
    • getSceneGraphBounds

      public BoundingBox3d getSceneGraphBounds()
    • getSceneGraphBounds

      protected BoundingBox3d getSceneGraphBounds(Scene scene)
    • updateBoundsForceUpdate

      public void updateBoundsForceUpdate(boolean refresh)
      Update the bounds according to the scene graph whatever is the current ViewBoundMode, and orders a
      invalid @link
      {@link Camera.shoot()
      }
    • setBoundsManual

      public void setBoundsManual(BoundingBox3d bounds, boolean updateView)
      Set a manual bounding box and switch the bounding mode to {ViewBoundMode.MANUAL}, meaning that any call to updateBounds() will update view bounds to the current bounds.
    • setBoundsManual

      public void setBoundsManual(BoundingBox3d bounds)
      Set bounds and immediately refresh the view
    • setBoundManual

      @Deprecated public void setBoundManual(BoundingBox3d bounds)
      Deprecated.
    • init

      public void init()
      The initialization function:
      • specifies general GL settings that impact the rendering quality and performance (computation speed).
      • enable light management
      • load all required texture resources
      • fix the current view bounds to the whole scene graph bounds

      The rendering settings are set by the Quality given in the constructor parameters.

    • initBounds

      protected void initBounds()
    • initQuality

      public void initQuality()
    • initLights

      public void initLights()
    • initLights

      public void initLights(Scene scene)
    • initResources

      public void initResources()
    • clear

      public void clear()
      Clear the color and depth buffer.
    • render

      public void render()
      Trigger layout rendering which in turns invoke this renderView()
    • renderView

      public void renderView()
      Default view render implementation. Triggering View rendering is performer IViewportLayout. The layout implementation may either call renderView() or Render background, scene and overlay Mark dimension dirty false Trigger view events
    • renderBackground

      public void renderBackground(float left, float right)
      To be implemented (see AWTView)
    • renderBackground

      public void renderBackground(ViewportConfiguration backgroundViewPort)
      To be implemented (see AWTView)
    • renderScene

      public void renderScene()
    • renderScene

      public void renderScene(float left, float right)
    • renderScene

      public void renderScene(ViewportConfiguration viewport)
    • updateQuality

      @Deprecated public void updateQuality()
      Deprecated.
      Not called anymore as alpha and blending setting are not supposed to change during lifetime of a chart. If this should change, then the entire initQuality() method should be invoked
    • squarify

      protected Coord3d squarify()
    • squarify

      protected Coord3d squarify(Scene scene, ViewBoundMode boundmode, BoundingBox3d manualViewBounds, SpaceTransformer spaceTransformer)
      Return a 3d scaling factor that allows scaling the scene into a square box, according to the current ViewBoundMode.

      If the scene bounds are Infinite, NaN or zero, for a given dimension, the scaler will be set to 1 on the given dimension.

      Returns:
      a scaling factor for each dimension.
    • squarifyComputeBoundsRanges

      protected Coord3d squarifyComputeBoundsRanges(BoundingBox3d bounds)
    • computeScaledViewBounds

      public BoundingBox3d computeScaledViewBounds()
    • computeSceneScaling

      public Coord3d computeSceneScaling()
    • computeSceneScaling

      public Coord3d computeSceneScaling(Scene scene, boolean squared, ViewBoundMode boundmode, BoundingBox3d manualViewBounds, SpaceTransformer spaceTransformer)
    • updateCamera

      public void updateCamera(ViewportConfiguration viewport, BoundingBox3d boundsScaled)
    • updateCamera

      public void updateCamera(ViewportConfiguration viewport, BoundingBox3d bounds, ViewPositionMode viewmode, Coord3d viewpoint, Camera cam, CameraMode cameraMode, float factorViewPointDistance, Coord3d center, Coord3d scaling)
    • updateCameraWithoutShooting

      public void updateCameraWithoutShooting(ViewportConfiguration viewport, BoundingBox3d bounds, ViewPositionMode viewmode, Coord3d viewpoint, Camera cam, float factorViewPointDistance, Coord3d center, Coord3d scaling)
      Update the camera configuration without triggering the Camera.shoot(IPainter, CameraMode) method. This is useful in rare case where one need to manually invoke only a subset of OpenGL methods that are invoked by shoot method.
    • computeViewpointDistance

      public float computeViewpointDistance(BoundingBox3d bounds, float factorViewPointDistance)
    • computeCameraTarget

      protected Coord3d computeCameraTarget()
    • computeCameraTarget

      protected Coord3d computeCameraTarget(Coord3d center, Coord3d scaling)
    • computeCameraEye

      protected Coord3d computeCameraEye(Coord3d target)
    • computeCameraEye

      protected Coord3d computeCameraEye(Coord3d target, ViewPositionMode viewmode, Coord3d viewpoint)
      Compute the camera's eye position in cartesian coordinates based on viewmode, target, and a viewpoint given in polar coordinates around the target
    • computeCameraEyeFree

      protected Coord3d computeCameraEyeFree(Coord3d viewpoint, Coord3d target)
    • computeCameraEyeProfile

      protected Coord3d computeCameraEyeProfile(Coord3d viewpoint, Coord3d target)
      Parameters:
      viewpoint -
      target -
    • computeCameraEyeXY

      protected Coord3d computeCameraEyeXY(Coord3d viewpoint, Coord3d target)
    • computeCameraEyeYZ

      protected Coord3d computeCameraEyeYZ(Coord3d viewpoint, Coord3d target)
    • computeCameraEyeXZ

      protected Coord3d computeCameraEyeXZ(Coord3d viewpoint, Coord3d target)
    • computeCameraUp

      protected Coord3d computeCameraUp(Coord3d viewpoint)
      Compute the direction of the top of the camera relative to its center. Coord3d(0, 0, 1) means a vector parallel to Z axis, so camera is looking horizontally Coord3d(0, 1, 0) means a vector parallel to Y axis, so camera is looking vertically
    • triggerCameraUpEvents

      protected void triggerCameraUpEvents(Coord3d viewpoint)
    • computeCameraRenderingVolume

      protected void computeCameraRenderingVolume(Camera cam, ViewportConfiguration viewport, BoundingBox3d bounds)
      Configure the camera so that it will capture a given volume in the scene. Rendering in 3D requires capturing a sphere defined by the bounding box radius. Rendering in 2D requires capturing a square defined by the bounding box with additional white space for labels and margins.
    • computeCamera3D_RenderingSphere

      protected void computeCamera3D_RenderingSphere(Camera cam, ViewportConfiguration viewport, BoundingBox3d bounds)
      Camera clipping planes configuration for a rendering sphere (3D) Assume that axis labels are positioned accordingly (
      invalid @link
      AxisLabelProcessor#axisLabelPosition_3D()
    • computeCamera2D_RenderingSquare

      protected void computeCamera2D_RenderingSquare(Camera cam, ViewportConfiguration viewport, BoundingBox3d bounds)
      Camera clipping planes configuration for a rendering plane (2D)
    • renderAxeBox

      protected void renderAxeBox()
    • renderAxeBox

      protected void renderAxeBox(IAxis axe, Scene scene, Camera camera, Coord3d scaling, boolean axeBoxDisplayed)
    • renderSceneGraph

      public void renderSceneGraph()
    • renderSceneGraph

      public void renderSceneGraph(boolean light)
    • renderSceneGraph

      public void renderSceneGraph(boolean light, Camera camera, Scene scene, Coord3d scaling)
    • renderOverlay

      public void renderOverlay()
    • renderOverlay

      public void renderOverlay(ViewportConfiguration viewportConfiguration)
    • renderAnnotations

      public void renderAnnotations(Camera camera)
    • getPixelScale

      public Coord2d getPixelScale()
      Return a copy of the currently known pixel scale as notified by the canvas. If the View received no pixel scale change event, the pixel scale will be 0.
    • getHiDPI

      public HiDPI getHiDPI()
      Return HiDPI status as ACTUALLY possible by the ICanvas on the current screen and computer, regardless of the
      invalid @link
      {@link Quality#setHiDPIEnabled(true)
      }. Will always return
      invalid @link
      HiDPI.OFF
      is chart is set to
      invalid @link
      {@link Quality#setHiDPIEnabled(false)
      } as this forces the canvas to NOT make use of HiDPI.
      Returns:
    • get2DLayout

      public View2DLayout get2DLayout()
      Return the configuration of a 2D layout
    • get2DProcessing

      public View2DProcessing get2DProcessing()
      Return the result of processing a 2D layout using the layout configured with the instance returned by get2DLayout()
    • getPainter

      public IPainter getPainter()
    • getChart

      public Chart getChart()
    • setChart

      public void setChart(Chart chart)
    • isSlave

      public boolean isSlave()
    • setSlave

      public void setSlave(boolean slave)
    • getSpaceTransformer

      public SpaceTransformer getSpaceTransformer()
    • setSpaceTransformer

      public void setSpaceTransformer(SpaceTransformer transformer)
    • setSquarifier

      public void setSquarifier(ISquarifier squarifier)
    • getSquarifier

      public ISquarifier getSquarifier()
    • isInitialized

      public boolean isInitialized()
    • getLayout

      public IViewportLayout getLayout()
    • setLayout

      public void setLayout(IViewportLayout layout)
    • getCenter

      public Coord3d getCenter()
      Return the central point of the view scene, that is the last bounding box center set by lookToBox(org.jzy3d.maths.BoundingBox3d)
    • getBounds

      public BoundingBox3d getBounds()
    • getBoundsMode

      public ViewBoundMode getBoundsMode()
    • setViewPositionMode

      public void setViewPositionMode(ViewPositionMode mode)
      Set the ViewPositionMode applied to this view.
    • getViewMode

      public ViewPositionMode getViewMode()
      Return the ViewPositionMode applied to this view.
    • is2D

      public boolean is2D()
    • is2D_XY

      public boolean is2D_XY()
    • is2D_XZ

      public boolean is2D_XZ()
    • is2D_YZ

      public boolean is2D_YZ()
    • is3D

      public boolean is3D()
    • getScaling

      public Coord3d getScaling()
      Return the stretch ratio applied to the view
    • setViewPoint

      public void setViewPoint(Coord3d polar, boolean updateView)
      Set the viewpoint using polar coordinates relative to the target (i.e. the center of the scene). Only X and Y dimensions are required, as the distance to center will be computed automatically by
      invalid @link
      updateCamera()
      . The input coordinate is polar and considers
      • x is azimuth in [0;2xPI]
      • y is elevation in [-PI/2;+PI/2]. Will be clamped if out of bounds
      • z is range (distance to center) but ignored there as it is processed automatically
    • setViewPoint

      public void setViewPoint(Coord3d polar)
      Set the viewpoint and query a view update.
    • setViewPoint

      public void setViewPoint(double azimuth, double elevation, boolean updateView)
      Set the viewpoint using polar coordinates relative to the target (i.e. the center of the scene). Only X and Y dimensions are required, as the distance to center will be computed automatically by
      invalid @link
      updateCamera()
      . The input coordinate is polar and considers
      • azimuth in [0;2xPI]
      • elevation in [-PI/2;+PI/2]. Will be clamped if out of bounds
    • setViewPoint

      public void setViewPoint(double azimuth, double elevation)
    • getViewPoint

      public Coord3d getViewPoint()
      Get the viewpoint. The Z dimension is the one defined by
      invalid @link
      updateCamera()
      , which depends on the view scaling.
    • getLastViewScaling

      public Coord3d getLastViewScaling()
      Return the last used view scaling that was set according to the setSquared(boolean) status.
    • setAxis

      public void setAxis(IAxis axis)
    • getAxis

      public IAxis getAxis()
    • getAxisLayout

      public AxisLayout getAxisLayout()
    • getSquared

      public boolean getSquared()
    • setSquared

      public void setSquared(boolean status)
    • isAxisDisplayed

      public boolean isAxisDisplayed()
    • setAxisDisplayed

      public void setAxisDisplayed(boolean axisDisplayed)
    • setBackgroundColor

      public void setBackgroundColor(Color color)
    • getBackgroundColor

      public Color getBackgroundColor()
    • getCamera

      public Camera getCamera()
    • setCameraMode

      public void setCameraMode(CameraMode mode)
      Set the projection of this view, either Camera.ORTHOGONAL or Camera.PERSPECTIVE.
    • getCameraMode

      public CameraMode getCameraMode()
      Get the projection of this view, either CameraMode.ORTHOGONAL or CameraMode.PERSPECTIVE.
    • setMaximized

      public void setMaximized(boolean status)
    • isMaximized

      public boolean isMaximized()
    • getUpVector

      public Coord3d getUpVector()
    • setUpVector

      public void setUpVector(Coord3d upVector)
    • setUpVector

      public void setUpVector(Axis axis)
    • getCameraRenderingSphereRadiusFactor

      public float getCameraRenderingSphereRadiusFactor()
      See Also:
      • invalid @see
        setter
    • setCameraRenderingSphereRadiusFactor

      public void setCameraRenderingSphereRadiusFactor(float cameraRenderingSphereRadiusFactor)
      This allows zooming the 3d scene by editing the camera rendering sphere.
      • A value of 1 allows having an AxisBox with corners touching the top/bottom part of the canvas.
      • A value greater than 1 makes the rendering sphere bigger, hence the AxisBox appears smaller.
    • isMaintainAllObjectsInView

      public boolean isMaintainAllObjectsInView()
    • getFactorViewPointDistance

      public float getFactorViewPointDistance()
    • setFactorViewPointDistance

      public void setFactorViewPointDistance(float factorViewPointDistance)
    • setMaintainAllObjectsInView

      public void setMaintainAllObjectsInView(boolean maintainAllObjectsInView)
    • isDisplayAxisWholeBounds

      public boolean isDisplayAxisWholeBounds()
    • setDisplayAxisWholeBounds

      public void setDisplayAxisWholeBounds(boolean displayAxisWholeBounds)
    • getScene

      public Scene getScene()
    • getSceneViewportRectangle

      public Rectangle getSceneViewportRectangle()
    • getCanvas

      public ICanvas getCanvas()
    • getAnnotations

      public Graph getAnnotations()
    • addViewEventListener

      public boolean addViewEventListener(IViewEventListener listener)
    • removeViewOnTopEventListener

      public boolean removeViewOnTopEventListener(IViewEventListener listener)
    • fireViewOnTopEvent

      protected void fireViewOnTopEvent(boolean isOnTop)
    • fireViewFirstRenderStarts

      protected void fireViewFirstRenderStarts()
    • addViewPointChangedListener

      public boolean addViewPointChangedListener(IViewPointChangedListener listener)
    • removeViewPointChangedListener

      public boolean removeViewPointChangedListener(IViewPointChangedListener listener)
    • fireViewPointChangedEvent

      protected void fireViewPointChangedEvent(ViewPointChangedEvent e)
    • addViewLifecycleChangedListener

      public boolean addViewLifecycleChangedListener(IViewLifecycleEventListener listener)
    • removeViewLifecycleChangedListener

      public boolean removeViewLifecycleChangedListener(IViewLifecycleEventListener listener)
    • fireViewLifecycleHasInit

      protected void fireViewLifecycleHasInit(ViewLifecycleEvent e)
    • fireViewLifecycleWillRender

      protected void fireViewLifecycleWillRender(ViewLifecycleEvent e)
    • fireViewLifecycleHasRendered

      protected void fireViewLifecycleHasRendered(ViewLifecycleEvent e)