You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
5.8 KiB
C
214 lines
5.8 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkSliderRepresentation.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkSliderRepresentation
|
||
|
* @brief abstract class defines the representation for a vtkSliderWidget
|
||
|
*
|
||
|
* This abstract class is used to specify how the vtkSliderWidget should
|
||
|
* interact with representations of the vtkSliderWidget. This class may be
|
||
|
* subclassed so that alternative representations can be created. The class
|
||
|
* defines an API, and a default implementation, that the vtkSliderWidget
|
||
|
* interacts with to render itself in the scene.
|
||
|
*
|
||
|
* @sa
|
||
|
* vtkSliderWidget
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkSliderRepresentation_h
|
||
|
#define vtkSliderRepresentation_h
|
||
|
|
||
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
||
|
#include "vtkWidgetRepresentation.h"
|
||
|
|
||
|
class VTKINTERACTIONWIDGETS_EXPORT vtkSliderRepresentation : public vtkWidgetRepresentation
|
||
|
{
|
||
|
public:
|
||
|
//@{
|
||
|
/**
|
||
|
* Standard methods for the class.
|
||
|
*/
|
||
|
vtkTypeMacro(vtkSliderRepresentation, vtkWidgetRepresentation);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the current value for the widget. The value should lie between
|
||
|
* the minimum and maximum values.
|
||
|
*/
|
||
|
void SetValue(double value);
|
||
|
vtkGetMacro(Value, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set the current minimum value that the slider can take. Setting the
|
||
|
* minimum value greater than the maximum value will cause the maximum
|
||
|
* value to grow to (minimum value + 1).
|
||
|
*/
|
||
|
void SetMinimumValue(double value);
|
||
|
vtkGetMacro(MinimumValue, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set the current maximum value that the slider can take. Setting the
|
||
|
* maximum value less than the minimum value will cause the minimum
|
||
|
* value to change to (maximum value - 1).
|
||
|
*/
|
||
|
void SetMaximumValue(double value);
|
||
|
vtkGetMacro(MaximumValue, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the length of the slider shape (in normalized display coordinates
|
||
|
* [0.01,0.5]). The slider length by default is 0.05.
|
||
|
*/
|
||
|
vtkSetClampMacro(SliderLength, double, 0.01, 0.5);
|
||
|
vtkGetMacro(SliderLength, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set the width of the slider in the directions orthogonal to the
|
||
|
* slider axis. Using this it is possible to create ellipsoidal and hockey
|
||
|
* puck sliders (in some subclasses). By default the width is 0.05.
|
||
|
*/
|
||
|
vtkSetClampMacro(SliderWidth, double, 0.0, 1.0);
|
||
|
vtkGetMacro(SliderWidth, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set the width of the tube (in normalized display coordinates) on which
|
||
|
* the slider moves. By default the width is 0.05.
|
||
|
*/
|
||
|
vtkSetClampMacro(TubeWidth, double, 0.0, 1.0);
|
||
|
vtkGetMacro(TubeWidth, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the length of each end cap (in normalized coordinates
|
||
|
* [0.0,0.25]). By default the length is 0.025. If the end cap length
|
||
|
* is set to 0.0, then the end cap will not display at all.
|
||
|
*/
|
||
|
vtkSetClampMacro(EndCapLength, double, 0.0, 0.25);
|
||
|
vtkGetMacro(EndCapLength, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the width of each end cap (in normalized coordinates
|
||
|
* [0.0,0.25]). By default the width is twice the tube width.
|
||
|
*/
|
||
|
vtkSetClampMacro(EndCapWidth, double, 0.0, 0.25);
|
||
|
vtkGetMacro(EndCapWidth, double);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Specify the label text for this widget. If the value is not set, or set
|
||
|
* to the empty string "", then the label text is not displayed.
|
||
|
*/
|
||
|
virtual void SetTitleText(const char*) {}
|
||
|
virtual const char* GetTitleText() { return nullptr; }
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/Get the format with which to print the slider value.
|
||
|
*/
|
||
|
vtkSetStringMacro(LabelFormat);
|
||
|
vtkGetStringMacro(LabelFormat);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the relative height of the label as compared to the length of the
|
||
|
* slider.
|
||
|
*/
|
||
|
vtkSetClampMacro(LabelHeight, double, 0.0, 2.0);
|
||
|
vtkGetMacro(LabelHeight, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the relative height of the title as compared to the length of the
|
||
|
* slider.
|
||
|
*/
|
||
|
vtkSetClampMacro(TitleHeight, double, 0.0, 2.0);
|
||
|
vtkGetMacro(TitleHeight, double);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Indicate whether the slider text label should be displayed. This is
|
||
|
* a number corresponding to the current Value of this widget.
|
||
|
*/
|
||
|
vtkSetMacro(ShowSliderLabel, vtkTypeBool);
|
||
|
vtkGetMacro(ShowSliderLabel, vtkTypeBool);
|
||
|
vtkBooleanMacro(ShowSliderLabel, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Methods to interface with the vtkSliderWidget. Subclasses of this class
|
||
|
* actually do something.
|
||
|
*/
|
||
|
virtual double GetCurrentT() { return this->CurrentT; }
|
||
|
virtual double GetPickedT() { return this->PickedT; }
|
||
|
|
||
|
// Enums are used to describe what is selected
|
||
|
enum _InteractionState
|
||
|
{
|
||
|
Outside = 0,
|
||
|
Tube,
|
||
|
LeftCap,
|
||
|
RightCap,
|
||
|
Slider
|
||
|
};
|
||
|
|
||
|
protected:
|
||
|
vtkSliderRepresentation();
|
||
|
~vtkSliderRepresentation() override;
|
||
|
|
||
|
// Values
|
||
|
double Value;
|
||
|
double MinimumValue;
|
||
|
double MaximumValue;
|
||
|
|
||
|
// More ivars controlling the appearance of the widget
|
||
|
double SliderLength;
|
||
|
double SliderWidth;
|
||
|
double EndCapLength;
|
||
|
double EndCapWidth;
|
||
|
double TubeWidth;
|
||
|
|
||
|
// The current parametric coordinate
|
||
|
double CurrentT;
|
||
|
double PickedT;
|
||
|
|
||
|
// both the title and label
|
||
|
vtkTypeBool ShowSliderLabel;
|
||
|
char* LabelFormat;
|
||
|
double LabelHeight;
|
||
|
double TitleHeight;
|
||
|
|
||
|
private:
|
||
|
vtkSliderRepresentation(const vtkSliderRepresentation&) = delete;
|
||
|
void operator=(const vtkSliderRepresentation&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|