Source code for tecplot.plot.axis

from builtins import super

from six import string_types

from ..constant import *
from ..exception import *
from .. import session
from ..tecutil import Index, log_setattr, sv
from .grid import GridLines, MinorGridLines
from .ticks import TickLabels, Ticks
from .title import (Axis2DTitle, DataAxis2DTitle, DataAxis3DTitle,
                    RadialAxisTitle)


class Axis(session.Style):
    def __init__(self, axes, name, **kwargs):
        self.axes = axes
        self.name = name
        kw = axes._style_attrs.copy()
        kw.update(**kwargs)
        super().__init__(axes._sv, Axis._sv_detail(name), **kw)

    @staticmethod
    def _sv_detail(name):
        if isinstance(name, string_types):
            return getattr(sv, name.upper() + 'DETAIL')
        else:
            _tr = {sv.X: sv.XDETAIL, sv.Y: sv.YDETAIL, sv.Z: sv.ZDETAIL,
                   sv.R: sv.RDETAIL, sv.THETA: sv.THETADETAIL}
            return _tr[name]

    @property
    def show(self):
        return self._get_style(bool, sv.SHOWAXIS)

    @show.setter
    def show(self, show):
        self._set_style(bool(show), sv.SHOWAXIS)

    @property
    def min(self):
        return self._get_style(float, sv.RANGEMIN)

    @min.setter
    def min(self, value):
        self._set_style(float(value), sv.RANGEMIN)

    @property
    def max(self):
        return self._get_style(float, sv.RANGEMAX)

    @max.setter
    def max(self, value):
        self._set_style(float(value), sv.RANGEMAX)

    @property
    def ticks(self):
        return Ticks(self)

    @property
    def tick_labels(self):
        return TickLabels(self)

    @property
    def grid_lines(self):
        return GridLines(self)

    @property
    def minor_grid_lines(self):
        return MinorGridLines(self)

    @property
    def title(self):
        return Axis2DTitle(self)

    def __eq__(self, that):
        return (isinstance(that, type(self)) and self.name == that.name and
                self.axes == that.axes)

    def __ne__(self, that):
        return not (self == that)


class ReversibleAxis(Axis):
    '''
    reverse
    '''


class LinearAxis(Axis):
    '''
    preserve_length
    '''


class DataAxis(Axis):
    @property
    def title(self):
        return DataAxis2DTitle(self)


class FieldAxis(DataAxis):
    @property
    def variable(self):
        """The `Variable` assigned to this axis.

        :type: `Variable`

        This is the spatial variable associated with this axis
        and is usually one of ``(X, Y, Z)``.

        Example::
            >>> import tecplot as tp
            >>> fr = tp.active_frame()
            >>> ds = fr.dataset
            >>> axes = fr.plot().axes
            >>> axes.x_axis.variable.name, axes.y_axis.variable.name
            ('X', 'Y')
            >>> axes.x_axis.variable = ds.variable('U')
            >>> axes.y_axis.variable = ds.variable('V')
            >>> axes.x_axis.variable.name, axes.y_axis.variable.name
            ('U', 'V')
        """
        ds = self.axes.plot.frame.dataset
        return ds.variable(self.variable_index)

    @variable.setter
    def variable(self, v):
        self.variable_index = v.index

    @property
    def variable_index(self):
        return self._get_style(Index, sv.VARNUM)

    @variable_index.setter
    def variable_index(self, i):
        self._set_style(Index(i), sv.VARNUM)


class IndexedLineAxis(DataAxis, LinearAxis, ReversibleAxis):
    def __init__(self, axes, name, index):
        self.index = Index(index)
        super().__init__(axes, name, offset1=self.index)

    def __eq__(self, that):
        return (isinstance(that, type(self)) and self.index == that.index and
                self.name == that.name and self.axes == that.axes)

    def __ne__(self, that):
        return not (self == that)


[docs]class Cartesian2DFieldAxis(FieldAxis, LinearAxis, ReversibleAxis): pass
[docs]class Cartesian3DFieldAxis(FieldAxis, LinearAxis): @property def title(self): return DataAxis3DTitle(self)
[docs]class PolarAngleLineAxis(DataAxis, ReversibleAxis): def __init__(self, axes): super().__init__(axes, sv.THETA) @property def mode(self): """Units used for the theta axis. :type: `ThetaMode` Possible values: `ThetaMode.Degrees`, `ThetaMode.Radians`, `ThetaMode.Arbitrary`. """ return self.axes._get_style(ThetaMode, sv.THETAMODE) @mode.setter def mode(self, value): self.axes._set_style(ThetaMode(value), sv.THETAMODE) @property def period(self): """Returns or sets the theta_period property. :type: `float` """ return self.axes._get_style(float, sv.THETAPERIOD) @period.setter def period(self, value): self.axes._set_style(float(value), sv.THETAPERIOD)
[docs]class RadialLineAxis(DataAxis, LinearAxis, ReversibleAxis): def __init__(self, axes): super().__init__(axes, sv.R) @property def title(self): return RadialAxisTitle(self)
[docs]class SketchAxis(LinearAxis): pass
[docs]class XYLineAxis(IndexedLineAxis): @property def reverse(self): return self._get_style(bool, sv.ISREVERSED) @reverse.setter def reverse(self, value): self._Set_style(bool(value), sv.ISREVERSED)