VTK
|
takes care of drawing 2D axes More...
#include <vtkAxis.h>
Public Types | |
enum | { TICK_SIMPLE = 0, TICK_WILKINSON_EXTENDED } |
typedef vtkContextItem | Superclass |
enum | Location { LEFT = 0, BOTTOM, RIGHT, TOP, PARALLEL } |
enum | { STANDARD_NOTATION = 0, SCIENTIFIC_NOTATION, FIXED_NOTATION } |
enum | { AUTO = 0, FIXED, CUSTOM } |
Public Types inherited from vtkContextItem | |
typedef vtkAbstractContextItem | Superclass |
Public Types inherited from vtkAbstractContextItem | |
typedef vtkObject | Superclass |
Public Types inherited from vtkObject | |
typedef vtkObjectBase | Superclass |
Public Member Functions | |
virtual int | IsA (const char *type) |
vtkAxis * | NewInstance () const |
virtual void | PrintSelf (ostream &os, vtkIndent indent) |
virtual void | SetNumberOfTicks (int numberOfTicks) |
virtual void | SetMinimum (double minimum) |
virtual void | SetMaximum (double maximum) |
virtual void | SetUnscaledMinimum (double minimum) |
virtual void | SetUnscaledMaximum (double maximum) |
virtual void | SetMinimumLimit (double lowest) |
virtual void | SetMaximumLimit (double highest) |
virtual void | SetUnscaledMinimumLimit (double lowest) |
virtual void | SetUnscaledMaximumLimit (double highest) |
virtual void | Update () |
virtual bool | Paint (vtkContext2D *painter) |
virtual void | AutoScale () |
virtual void | RecalculateTickSpacing () |
virtual vtkDoubleArray * | GetTickPositions () |
virtual vtkFloatArray * | GetTickScenePositions () |
virtual vtkStringArray * | GetTickLabels () |
vtkRectf | GetBoundingRect (vtkContext2D *painter) |
virtual void | SetPosition (int position) |
virtual int | GetPosition () |
void | SetPoint1 (const vtkVector2f &pos) |
void | SetPoint1 (float x, float y) |
virtual float * | GetPoint1 () |
virtual void | GetPoint1 (float &, float &) |
virtual void | GetPoint1 (float[2]) |
vtkVector2f | GetPosition1 () |
void | SetPoint2 (const vtkVector2f &pos) |
void | SetPoint2 (float x, float y) |
virtual float * | GetPoint2 () |
virtual void | GetPoint2 (float &, float &) |
virtual void | GetPoint2 (float[2]) |
vtkVector2f | GetPosition2 () |
virtual int | GetNumberOfTicks () |
virtual vtkTextProperty * | GetLabelProperties () |
virtual double | GetMinimum () |
virtual double | GetMaximum () |
virtual double | GetUnscaledMinimum () |
virtual double | GetUnscaledMaximum () |
virtual void | SetRange (double minimum, double maximum) |
virtual void | SetRange (double range[2]) |
virtual void | SetUnscaledRange (double minimum, double maximum) |
virtual void | SetUnscaledRange (double range[2]) |
virtual void | GetRange (double *range) |
virtual void | GetUnscaledRange (double *range) |
virtual double | GetMinimumLimit () |
virtual double | GetMaximumLimit () |
virtual double | GetUnscaledMinimumLimit () |
virtual double | GetUnscaledMaximumLimit () |
virtual int * | GetMargins () |
virtual void | GetMargins (int &, int &) |
virtual void | GetMargins (int[2]) |
virtual void | SetMargins (int, int) |
void | SetMargins (int[2]) |
virtual void | SetTitle (const vtkStdString &title) |
virtual vtkStdString | GetTitle () |
virtual vtkTextProperty * | GetTitleProperties () |
virtual bool | GetLogScaleActive () |
virtual bool | GetLogScale () |
virtual void | SetLogScale (bool logScale) |
virtual void | LogScaleOn () |
virtual void | LogScaleOff () |
virtual void | SetGridVisible (bool) |
virtual bool | GetGridVisible () |
virtual void | SetLabelsVisible (bool) |
virtual bool | GetLabelsVisible () |
virtual void | SetTicksVisible (bool) |
virtual bool | GetTicksVisible () |
virtual void | SetAxisVisible (bool) |
virtual bool | GetAxisVisible () |
virtual void | SetPrecision (int precision) |
virtual int | GetPrecision () |
virtual void | SetNotation (int notation) |
virtual int | GetNotation () |
virtual void | SetBehavior (int) |
virtual int | GetBehavior () |
virtual vtkPen * | GetPen () |
virtual vtkPen * | GetGridPen () |
virtual void | SetTickLabelAlgorithm (int) |
virtual int | GetTickLabelAlgorithm () |
virtual void | SetScalingFactor (double) |
virtual double | GetScalingFactor () |
virtual void | SetShift (double) |
virtual double | GetShift () |
virtual bool | SetCustomTickPositions (vtkDoubleArray *positions, vtkStringArray *labels=0) |
Public Member Functions inherited from vtkContextItem | |
vtkContextItem * | NewInstance () const |
virtual double | GetOpacity () |
virtual void | SetOpacity (double) |
Public Member Functions inherited from vtkAbstractContextItem | |
vtkAbstractContextItem * | NewInstance () const |
virtual bool | PaintChildren (vtkContext2D *painter) |
virtual void | ReleaseGraphicsResources () |
unsigned int | AddItem (vtkAbstractContextItem *item) |
bool | RemoveItem (vtkAbstractContextItem *item) |
bool | RemoveItem (unsigned int index) |
vtkAbstractContextItem * | GetItem (unsigned int index) |
unsigned int | GetItemIndex (vtkAbstractContextItem *item) |
unsigned int | GetNumberOfItems () |
void | ClearItems () |
unsigned int | Raise (unsigned int index) |
unsigned int | Lower (unsigned int index) |
virtual bool | Hit (const vtkContextMouseEvent &mouse) |
virtual vtkAbstractContextItem * | GetPickedItem (const vtkContextMouseEvent &mouse) |
virtual bool | MouseEnterEvent (const vtkContextMouseEvent &mouse) |
virtual bool | MouseMoveEvent (const vtkContextMouseEvent &mouse) |
virtual bool | MouseLeaveEvent (const vtkContextMouseEvent &mouse) |
virtual bool | MouseButtonPressEvent (const vtkContextMouseEvent &mouse) |
virtual bool | MouseButtonReleaseEvent (const vtkContextMouseEvent &mouse) |
virtual bool | MouseDoubleClickEvent (const vtkContextMouseEvent &mouse) |
virtual bool | MouseWheelEvent (const vtkContextMouseEvent &mouse, int delta) |
virtual bool | KeyPressEvent (const vtkContextKeyEvent &key) |
virtual void | SetScene (vtkContextScene *scene) |
virtual void | SetParent (vtkAbstractContextItem *parent) |
virtual vtkVector2f | MapToParent (const vtkVector2f &point) |
virtual vtkVector2f | MapFromParent (const vtkVector2f &point) |
virtual vtkVector2f | MapToScene (const vtkVector2f &point) |
virtual vtkVector2f | MapFromScene (const vtkVector2f &point) |
virtual unsigned int | StackAbove (unsigned int index, unsigned int under) |
virtual unsigned int | StackUnder (unsigned int child, unsigned int above) |
virtual bool | KeyReleaseEvent (const vtkContextKeyEvent &key) |
vtkContextScene * | GetScene () |
vtkAbstractContextItem * | GetParent () |
virtual bool | GetVisible () |
virtual void | SetVisible (bool) |
virtual bool | GetInteractive () |
virtual void | SetInteractive (bool) |
Public Member Functions inherited from vtkObject | |
vtkObject * | NewInstance () const |
virtual void | DebugOn () |
virtual void | DebugOff () |
bool | GetDebug () |
void | SetDebug (bool debugFlag) |
virtual void | Modified () |
virtual unsigned long | GetMTime () |
unsigned long | AddObserver (unsigned long event, vtkCommand *, float priority=0.0f) |
unsigned long | AddObserver (const char *event, vtkCommand *, float priority=0.0f) |
vtkCommand * | GetCommand (unsigned long tag) |
void | RemoveObserver (vtkCommand *) |
void | RemoveObservers (unsigned long event, vtkCommand *) |
void | RemoveObservers (const char *event, vtkCommand *) |
int | HasObserver (unsigned long event, vtkCommand *) |
int | HasObserver (const char *event, vtkCommand *) |
void | RemoveObserver (unsigned long tag) |
void | RemoveObservers (unsigned long event) |
void | RemoveObservers (const char *event) |
void | RemoveAllObservers () |
int | HasObserver (unsigned long event) |
int | HasObserver (const char *event) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(), float priority=0.0f) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, bool(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
int | InvokeEvent (unsigned long event, void *callData) |
int | InvokeEvent (const char *event, void *callData) |
int | InvokeEvent (unsigned long event) |
int | InvokeEvent (const char *event) |
Public Member Functions inherited from vtkObjectBase | |
const char * | GetClassName () const |
virtual void | Delete () |
virtual void | FastDelete () |
void | Print (ostream &os) |
virtual void | Register (vtkObjectBase *o) |
virtual void | UnRegister (vtkObjectBase *o) |
void | SetReferenceCount (int) |
void | PrintRevisions (ostream &) |
virtual void | PrintHeader (ostream &os, vtkIndent indent) |
virtual void | PrintTrailer (ostream &os, vtkIndent indent) |
int | GetReferenceCount () |
Static Public Member Functions | |
static int | IsTypeOf (const char *type) |
static vtkAxis * | SafeDownCast (vtkObjectBase *o) |
static vtkAxis * | New () |
static double | NiceNumber (double number, bool roundUp) |
static double | NiceMinMax (double &min, double &max, float pixelRange, float tickPixelSpacing) |
Static Public Member Functions inherited from vtkContextItem | |
static int | IsTypeOf (const char *type) |
static vtkContextItem * | SafeDownCast (vtkObjectBase *o) |
Static Public Member Functions inherited from vtkAbstractContextItem | |
static int | IsTypeOf (const char *type) |
static vtkAbstractContextItem * | SafeDownCast (vtkObjectBase *o) |
Static Public Member Functions inherited from vtkObject | |
static int | IsTypeOf (const char *type) |
static vtkObject * | SafeDownCast (vtkObjectBase *o) |
static vtkObject * | New () |
static void | BreakOnError () |
static void | SetGlobalWarningDisplay (int val) |
static void | GlobalWarningDisplayOn () |
static void | GlobalWarningDisplayOff () |
static int | GetGlobalWarningDisplay () |
Static Public Member Functions inherited from vtkObjectBase | |
static int | IsTypeOf (const char *name) |
static vtkObjectBase * | New () |
takes care of drawing 2D axes
The vtkAxis is drawn in screen coordinates. It is usually one of the last elements of a chart to be drawn. It renders the axis label, tick marks and tick labels. The tick marks and labels span the range of values between Minimum and Maximum. The Minimum and Maximum values are not allowed to extend beyond the MinimumLimit and MaximumLimit values, respectively.
Note that many other chart elements (e.g., vtkPlotPoints) refer to vtkAxis instances to determine how to scale raw data for presentation. In particular, care must be taken with logarithmic scaling. The axis Minimum, Maximum, and Limit values are stored both unscaled and scaled (with log(x) applied when GetLogScaleActive() returns true). User interfaces will most likely present the unscaled values as they represent the values provided by the user. Other chart elements may need the scaled values in order to draw in the same coordinate system.
Just because LogScale is set to true does not guarantee that the axis will use logarithmic scaling – the Minimum and Maximum values for the axis must both lie to the same side of origin (and not include the origin). Also, this switch from linear- to log-scaling may occur during a rendering pass if autoscaling is enabled. Because the log and pow functions are not invertible and the axis itself decides when to switch between them without offering any external class managing the axis a chance to save the old values, it saves old Limit values in NonLogUnscaled{Min,Max}Limit so that behavior is consistent when LogScale is changed from false to true and back again.
typedef vtkContextItem vtkAxis::Superclass |
enum vtkAxis::Location |
anonymous enum |
anonymous enum |
anonymous enum |
|
protected |
|
protected |
|
static |
|
virtual |
Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h.
Reimplemented from vtkContextItem.
|
static |
|
protectedvirtual |
Reimplemented from vtkContextItem.
vtkAxis* vtkAxis::NewInstance | ( | ) | const |
|
virtual |
Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from vtkContextItem.
|
static |
Creates a 2D Chart object.
|
virtual |
Get/set the position of the axis (LEFT, BOTTOM, RIGHT, TOP, PARALLEL).
|
virtual |
Get/set the position of the axis (LEFT, BOTTOM, RIGHT, TOP, PARALLEL).
void vtkAxis::SetPoint1 | ( | const vtkVector2f & | pos | ) |
Set point 1 of the axis (in pixels), this is usually the origin.
Set point 1 of the axis (in pixels), this is usually the origin.
|
virtual |
Get point 1 of the axis (in pixels), this is usually the origin.
Get point 1 of the axis (in pixels), this is usually the origin.
|
virtual |
Get point 1 of the axis (in pixels), this is usually the origin.
vtkVector2f vtkAxis::GetPosition1 | ( | ) |
Get point 1 of the axis (in pixels), this is usually the origin.
void vtkAxis::SetPoint2 | ( | const vtkVector2f & | pos | ) |
Set point 2 of the axis (in pixels), this is usually the terminus.
Set point 2 of the axis (in pixels), this is usually the terminus.
|
virtual |
Get point 2 of the axis (in pixels), this is usually the terminus.
Get point 2 of the axis (in pixels), this is usually the terminus.
|
virtual |
Get point 2 of the axis (in pixels), this is usually the terminus.
vtkVector2f vtkAxis::GetPosition2 | ( | ) |
Get point 2 of the axis (in pixels), this is usually the terminus.
|
virtual |
Set the number of tick marks for this axis. Default is -1, which leads to automatic calculation of nicely spaced tick marks.
|
virtual |
Get the number of tick marks for this axis.
|
virtual |
Get the vtkTextProperty that governs how the axis lables are displayed. Note that the alignment properties are not used.
|
virtual |
Set the logical minimum value of the axis, in plot coordinates. If LogScaleActive is true (not just LogScale), then this sets the minimum base-10 exponent.
|
virtual |
Get the logical minimum value of the axis, in plot coordinates. If LogScaleActive is true (not just LogScale), then this returns the minimum base-10 exponent.
|
virtual |
Set the logical maximum value of the axis, in plot coordinates. If LogScaleActive is true (not just LogScale), then this sets the maximum base-10 exponent.
|
virtual |
Get the logical maximum value of the axis, in plot coordinates. If LogScaleActive is true (not just LogScale), then this returns the maximum base-10 exponent.
|
virtual |
Set the logical, unscaled minimum value of the axis, in plot coordinates. Use this instead of SetMinimum() if you wish to provide the actual minimum instead of log10(the minimum) as part of the axis scale.
|
virtual |
Get the logical minimum value of the axis, in plot coordinates.
|
virtual |
Set the logical maximum value of the axis, in plot coordinates.
|
virtual |
Get the logical maximum value of the axis, in plot coordinates.
Set the logical range of the axis, in plot coordinates. The unscaled range will always be in the same coordinate system of the data being plotted, regardless of whether LogScale is true or false. When calling SetRange() and LogScale is true, the range must be specified in logarithmic coordinates. Using SetUnscaledRange(), you may ignore the value of LogScale.
|
virtual |
Set the logical range of the axis, in plot coordinates. The unscaled range will always be in the same coordinate system of the data being plotted, regardless of whether LogScale is true or false. When calling SetRange() and LogScale is true, the range must be specified in logarithmic coordinates. Using SetUnscaledRange(), you may ignore the value of LogScale.
Set the logical range of the axis, in plot coordinates. The unscaled range will always be in the same coordinate system of the data being plotted, regardless of whether LogScale is true or false. When calling SetRange() and LogScale is true, the range must be specified in logarithmic coordinates. Using SetUnscaledRange(), you may ignore the value of LogScale.
|
virtual |
Set the logical range of the axis, in plot coordinates. The unscaled range will always be in the same coordinate system of the data being plotted, regardless of whether LogScale is true or false. When calling SetRange() and LogScale is true, the range must be specified in logarithmic coordinates. Using SetUnscaledRange(), you may ignore the value of LogScale.
|
virtual |
Get the logical range of the axis, in plot coordinates. The unscaled range will always be in the same coordinate system of the data being plotted, regardless of whether LogScale is true or false. Calling GetRange() when LogScale is true will return the log10({min, max}).
|
virtual |
Get the logical range of the axis, in plot coordinates. The unscaled range will always be in the same coordinate system of the data being plotted, regardless of whether LogScale is true or false. Calling GetRange() when LogScale is true will return the log10({min, max}).
|
virtual |
Set the logical lowest possible value for Minimum, in plot coordinates.
|
virtual |
Get the logical lowest possible value for Minimum, in plot coordinates.
|
virtual |
Set the logical highest possible value for Maximum, in plot coordinates.
|
virtual |
Get the logical highest possible value for Maximum, in plot coordinates.
|
virtual |
Set the logical lowest possible value for Minimum, in plot coordinates.
|
virtual |
Get the logical lowest possible value for Minimum, in plot coordinates.
|
virtual |
Set the logical highest possible value for Maximum, in plot coordinates.
|
virtual |
Get the logical highest possible value for Maximum, in plot coordinates.
|
virtual |
Get the margins of the axis, in pixels.
|
virtual |
Get the margins of the axis, in pixels.
void vtkAxis::SetMargins | ( | int | [2] | ) |
Set the margins of the axis, in pixels.
|
virtual |
Get/set the title text of the axis.
|
virtual |
Get/set the title text of the axis.
|
virtual |
Get the vtkTextProperty that governs how the axis title is displayed.
|
virtual |
Get whether the axis is using a log scale. This will always be false when LogScale is false. It is only true when LogScale is true and the UnscaledRange does not cross or include the origin (zero). The limits (MinimumLimit, MaximumLimit, and their unscaled counterparts) do not prevent LogScaleActive from becoming true; they are adjusted if they cross or include the origin and the original limits are preserved for when LogScaleActive becomes false again.
|
virtual |
Get/set whether the axis should attempt to use a log scale. The default is false.
|
virtual |
Get/set whether the axis should attempt to use a log scale. The default is false.
|
virtual |
Get/set whether the axis should attempt to use a log scale. The default is false.
|
virtual |
Get/set whether the axis should attempt to use a log scale. The default is false.
|
virtual |
Get/set whether the axis grid lines should be drawn, default is true.
|
virtual |
Get/set whether the axis grid lines should be drawn, default is true.
|
virtual |
Get/set whether the axis labels should be visible.
|
virtual |
Get/set whether the axis labels should be visible.
|
virtual |
Get/set whether the tick marks should be visible.
|
virtual |
Get/set whether the tick marks should be visible.
|
virtual |
Get/set whether the axis line should be visible.
|
virtual |
Get/set whether the axis line should be visible.
|
virtual |
Get/set the numerical precision to use, default is 2.
|
virtual |
Get/set the numerical precision to use, default is 2.
|
virtual |
Get/set the numerical notation, standard, scientific or mixed (0, 1, 2).
|
virtual |
Get/set the numerical notation, standard, scientific or mixed (0, 1, 2).
|
virtual |
Get/set the behavior of the axis (auto or fixed). The default is 0 (auto).
|
virtual |
Get/set the behavior of the axis (auto or fixed). The default is 0 (auto).
|
virtual |
Get a pointer to the vtkPen object that controls the way this axis is drawn.
|
virtual |
Get a pointer to the vtkPen object that controls the way this axis is drawn.
|
virtual |
Get/set the tick label algorithm that is used to calculate the min, max and tick spacing. There are currently two algoriths, vtkAxis::TICK_SIMPLE is the default and uses a simple algorithm. The second option is vtkAxis::TICK_WILKINSON which uses an extended Wilkinson algorithm to find the optimal range, spacing and font parameters.
|
virtual |
Get/set the tick label algorithm that is used to calculate the min, max and tick spacing. There are currently two algoriths, vtkAxis::TICK_SIMPLE is the default and uses a simple algorithm. The second option is vtkAxis::TICK_WILKINSON which uses an extended Wilkinson algorithm to find the optimal range, spacing and font parameters.
|
virtual |
Get/set the scaling factor used for the axis, this defaults to 1.0 (no scaling), and is used to coordinate scaling with the plots, charts, etc.
|
virtual |
Get/set the scaling factor used for the axis, this defaults to 1.0 (no scaling), and is used to coordinate scaling with the plots, charts, etc.
|
virtual |
Get/set the scaling factor used for the axis, this defaults to 1.0 (no scaling), and is used to coordinate scaling with the plots, charts, etc.
|
virtual |
Get/set the scaling factor used for the axis, this defaults to 1.0 (no scaling), and is used to coordinate scaling with the plots, charts, etc.
|
virtual |
Update the geometry of the axis. Takes care of setting up the tick mark locations etc. Should be called by the scene before rendering.
Reimplemented from vtkAbstractContextItem.
|
virtual |
Paint event for the axis, called whenever the axis needs to be drawn.
Reimplemented from vtkAbstractContextItem.
|
virtual |
Use this function to autoscale the axes after setting the minimum and maximum values. This will cause the axes to select the nicest numbers that enclose the minimum and maximum values, and to select an appropriate number of tick marks.
|
virtual |
Recalculate the spacing of the tick marks - typically useful to do after scaling the axis.
|
virtual |
An array with the positions of the tick marks along the axis line. The positions are specified in the plot coordinates of the axis.
|
virtual |
An array with the positions of the tick marks along the axis line. The positions are specified in scene coordinates.
|
virtual |
A string array containing the tick labels for the axis.
|
virtual |
Set the tick positions, and optionally custom tick labels. If the labels and positions are null then automatic tick labels will be assigned. If only positions are supplied then appropriate labels will be generated according to the axis settings. If positions and labels are supplied they must be of the same length. Returns true on success, false on failure.
vtkRectf vtkAxis::GetBoundingRect | ( | vtkContext2D * | painter | ) |
Return a "nice number", often defined as 1, 2 or 5. If roundUp is true then the nice number will be rounded up, false it is rounded down. The supplied number should be between 0.0 and 9.9.
|
static |
Static function to calculate "nice" minimum, maximum, and tick spacing values.
|
protected |
Update whether log scaling will be used for layout and rendering. Log scaling is only active when LogScaling is true and the closed, unscaled range does not contain the origin. The boolean parameter determines whether the minimum and maximum values are set from their unscaled counterparts.
Calculate and assign nice labels/logical label positions.
|
protected |
Generate tick labels from the supplied double array of tick positions.
Calculate the next "nicest" numbers above and below the current minimum.
|
protected |
Return a tick mark for a logarithmic axis. If roundUp is true then the upper tick mark is returned. Otherwise the lower tick mark is returned. Tick marks will be: ... 0.1 0.2 .. 0.9 1 2 .. 9 10 20 .. 90 100 ... Parameter nicevalue will be set to true if tick mark is in: ... 0.1 0.2 0.5 1 2 5 10 20 50 100 ... Parameter order is set to the detected order of magnitude of the number.
Generate logarithmically-spaced tick marks with linear-style labels. This is for the case when log scaling is active, but the axis min and max span less than an order of magnitude. In this case, the most significant digit that varies is identified and ticks generated for each value that digit may take on. If that results in only 2 tick marks, the next-most-significant digit is varied. If more than 20 tick marks would result, the stride for the varying digit is increased.
|
protected |
Generate tick marks for logarithmic scale for specific order of magnitude. Mark generation is limited by parameters min and max. Tick marks will be: ... 0.1 0.2 .. 0.9 1 2 .. 9 10 20 .. 90 100 ... Tick labels will be: ... 0.1 0.2 0.5 1 2 5 10 20 50 100 ... If Parameter detaillabels is disabled tick labels will be: ... 0.1 1 10 100 ... If min/max is not in between 1.0 and 9.0 defaults will be used. If min and max do not differ 1 defaults will be used.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |