Class CubeSurfaceFactory

  • All Implemented Interfaces:
    SurfaceFactory<CubeSurfaceFactory.Profile,​CubeAspect>

    public class CubeSurfaceFactory
    extends java.lang.Object
    implements SurfaceFactory<CubeSurfaceFactory.Profile,​CubeAspect>
    Surface factory for 3-d plotting.

    This can be used in one of two modes (determined at construction time), isotropic and non-isotropic. In isotropic mode, the scaling on each of the 3 axes is the same, and in non-isotropic mode they can vary independently of each other. The profile and aspect configuration keys (that is, the user interface) are different according to which mode is in effect, but the actual surfaces generated are the same either way, undistinguished instances of CubeSurface.

    Since:
    20 Feb 2013
    Author:
    Mark Taylor
    • Field Detail

      • XLOG_KEY

        public static final ConfigKey<java.lang.Boolean> XLOG_KEY
        Config key for X axis log scale flag.
      • YLOG_KEY

        public static final ConfigKey<java.lang.Boolean> YLOG_KEY
        Config key for Y axis log scale flag.
      • ZLOG_KEY

        public static final ConfigKey<java.lang.Boolean> ZLOG_KEY
        Config key for Z axis log scale flag.
      • XFLIP_KEY

        public static final ConfigKey<java.lang.Boolean> XFLIP_KEY
        Config key for X axis flip flag.
      • YFLIP_KEY

        public static final ConfigKey<java.lang.Boolean> YFLIP_KEY
        Config key for Y axis flip flag.
      • ZFLIP_KEY

        public static final ConfigKey<java.lang.Boolean> ZFLIP_KEY
        Config key for Z axis flip flag.
      • XLABEL_KEY

        public static final ConfigKey<java.lang.String> XLABEL_KEY
        Config key for X axis text label.
      • YLABEL_KEY

        public static final ConfigKey<java.lang.String> YLABEL_KEY
        Config key for Y axis text label.
      • ZLABEL_KEY

        public static final ConfigKey<java.lang.String> ZLABEL_KEY
        Config key for Z axis text label.
      • FRAME_KEY

        public static final ConfigKey<java.lang.Boolean> FRAME_KEY
        Config key for whether to draw axis wire frame.
      • XCROWD_KEY

        public static final ConfigKey<java.lang.Double> XCROWD_KEY
        Config key for X axis tick mark crowding.
      • YCROWD_KEY

        public static final ConfigKey<java.lang.Double> YCROWD_KEY
        Config key for Y axis tick mark crowding.
      • ZCROWD_KEY

        public static final ConfigKey<java.lang.Double> ZCROWD_KEY
        Config key for Z axis tick mark crowding.
      • ISOCROWD_KEY

        public static final ConfigKey<java.lang.Double> ISOCROWD_KEY
        Config key for isotropic tick mark crowding.
      • XMIN_KEY

        public static final ConfigKey<java.lang.Double> XMIN_KEY
        Config key for X axis lower bound, before subranging.
      • XMAX_KEY

        public static final ConfigKey<java.lang.Double> XMAX_KEY
        Config key for X axis upper bound, before subranging.
      • XSUBRANGE_KEY

        public static final ConfigKey<Subrange> XSUBRANGE_KEY
        Config key for X axis subrange.
      • YMIN_KEY

        public static final ConfigKey<java.lang.Double> YMIN_KEY
        Config key for Y axis lower bound, before subranging.
      • YMAX_KEY

        public static final ConfigKey<java.lang.Double> YMAX_KEY
        Config key for Y axis upper bound, before subranging.
      • YSUBRANGE_KEY

        public static final ConfigKey<Subrange> YSUBRANGE_KEY
        Config key for Y axis subrange.
      • ZMIN_KEY

        public static final ConfigKey<java.lang.Double> ZMIN_KEY
        Config key for Z axis lower bound, before subranging.
      • ZMAX_KEY

        public static final ConfigKey<java.lang.Double> ZMAX_KEY
        Config key for Z axis upper bound, before subranging.
      • ZSUBRANGE_KEY

        public static final ConfigKey<Subrange> ZSUBRANGE_KEY
        Config key for Z axis subrange.
      • XC_KEY

        public static final ConfigKey<java.lang.Double> XC_KEY
        Config key for X axis central position key (isotropic only).
      • YC_KEY

        public static final ConfigKey<java.lang.Double> YC_KEY
        Config key for Y axis central position key (isotropic only).
      • ZC_KEY

        public static final ConfigKey<java.lang.Double> ZC_KEY
        Config key for Z axis central position key (isotropic only).
      • SCALE_KEY

        public static final ConfigKey<java.lang.Double> SCALE_KEY
        Config key for cube edge length (isotropic only).
      • PHI_KEY

        public static final ConfigKey<java.lang.Double> PHI_KEY
        Config key for first Euler angle of rotation, units of degrees.
      • THETA_KEY

        public static final ConfigKey<java.lang.Double> THETA_KEY
        Config key for second Euler angle of rotation, units of degrees.
      • PSI_KEY

        public static final ConfigKey<java.lang.Double> PSI_KEY
        Config key for third Euler angle of rotation, units of degrees.
      • ZOOM_KEY

        public static final ConfigKey<java.lang.Double> ZOOM_KEY
        Config key for zoom factor.
      • XOFF_KEY

        public static final ConfigKey<java.lang.Double> XOFF_KEY
        Config key for graphics X offset, units of 1/2 screen size.
      • YOFF_KEY

        public static final ConfigKey<java.lang.Double> YOFF_KEY
        Config key for graphics Y offset, units of 1/2 screen size.
      • ISO_CENTER_TOLERANCE

        public static final double ISO_CENTER_TOLERANCE
        Proportional auto-ranging isotropic snap-to-origin threshold.
        See Also:
        Constant Field Values
    • Constructor Detail

      • CubeSurfaceFactory

        public CubeSurfaceFactory​(boolean isIso)
        Constructs an isotropic or non-isotropic cube surface factory.
        Parameters:
        isIso - whether to operate in isotropic mode
    • Method Detail

      • getAspectConfig

        public ConfigMap getAspectConfig​(Surface surface)
        Description copied from interface: SurfaceFactory
        Returns a ConfigMap that corresponds to the configuration of the given surface, which must have been created by this factory. The intention is that supplying the returned config items to this object's createAspect method with the right profile should come up with approximately the same surface, preferably without reference to any supplied ranges.

        The returned config items should be optimised for presentation to the user, so that for instance decimal values are reported to a reasonable level of precision. Because of this, and perhaps for other reasons related to implementation, a surface resulting from feeding the returned config back to this factory may not be identical to the supplied surface, so round-tripping is not guaranteed to be exact.

        Specified by:
        getAspectConfig in interface SurfaceFactory<CubeSurfaceFactory.Profile,​CubeAspect>
        Parameters:
        surface - plot surface; if it was not created by this factory, behaviour is undefined
        Returns:
        config map populated with items that should approximately reproduce the supplied surface
      • getRotation

        public static double[] getRotation​(ConfigMap config)
        Reads the intended rotation matrix from a configuration map.
        Parameters:
        config - config map
        Returns:
        9-element rotation matrix
      • eulerToRotationDegrees

        public static double[] eulerToRotationDegrees​(double[] eulers)
        Converts three ZXZ Euler angles to a rotation matrix.
        Parameters:
        eulers - 1, 2 or 3-element array giving Euler angles phi, theta, psi in degrees; if fewer elements than 3, later angles are assumed zero
        Returns:
        9-element rotation matrix
      • rotationToEulerDegrees

        public static double[] rotationToEulerDegrees​(double[] rotmat)
        Converts rotation matrix to three ZXZ Euler angles in degrees. May lose some accuracy near theta=0. Note the result is not unique.
        Parameters:
        rotmat - 9-element rotation matrix
        Returns:
        3-element array giving phi, theta, psi in degrees