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.
229 lines
6.2 KiB
C++
229 lines
6.2 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkAxesTransformRepresentation.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 vtkAxesTransformRepresentation
|
|
* @brief represent the vtkAxesTransformWidget
|
|
*
|
|
* The vtkAxesTransformRepresentation is a representation for the
|
|
* vtkAxesTransformWidget. This representation consists of a origin sphere
|
|
* with three tubed axes with cones at the end of the axes. In addition an
|
|
* optional label provides delta values of motion. Note that this particular
|
|
* widget draws its representation in 3D space, so the widget can be
|
|
* occluded.
|
|
* @sa
|
|
* vtkDistanceWidget vtkDistanceRepresentation vtkDistanceRepresentation2D
|
|
*/
|
|
|
|
#ifndef vtkAxesTransformRepresentation_h
|
|
#define vtkAxesTransformRepresentation_h
|
|
|
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
|
#include "vtkWidgetRepresentation.h"
|
|
|
|
class vtkHandleRepresentation;
|
|
class vtkPoints;
|
|
class vtkPolyData;
|
|
class vtkPolyDataMapper;
|
|
class vtkActor;
|
|
class vtkVectorText;
|
|
class vtkFollower;
|
|
class vtkBox;
|
|
class vtkCylinderSource;
|
|
class vtkGlyph3D;
|
|
class vtkDoubleArray;
|
|
class vtkTransformPolyDataFilter;
|
|
class vtkProperty;
|
|
|
|
class VTKINTERACTIONWIDGETS_EXPORT vtkAxesTransformRepresentation : public vtkWidgetRepresentation
|
|
{
|
|
public:
|
|
/**
|
|
* Instantiate class.
|
|
*/
|
|
static vtkAxesTransformRepresentation* New();
|
|
|
|
//@{
|
|
/**
|
|
* Standard VTK methods.
|
|
*/
|
|
vtkTypeMacro(vtkAxesTransformRepresentation, vtkWidgetRepresentation);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the two handle representations used for the
|
|
* vtkAxesTransformWidget. (Note: properties can be set by grabbing these
|
|
* representations and setting the properties appropriately.)
|
|
*/
|
|
vtkGetObjectMacro(OriginRepresentation, vtkHandleRepresentation);
|
|
vtkGetObjectMacro(SelectionRepresentation, vtkHandleRepresentation);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Methods to Set/Get the coordinates of the two points defining
|
|
* this representation. Note that methods are available for both
|
|
* display and world coordinates.
|
|
*/
|
|
double* GetOriginWorldPosition();
|
|
void GetOriginWorldPosition(double pos[3]);
|
|
void SetOriginWorldPosition(double pos[3]);
|
|
void SetOriginDisplayPosition(double pos[3]);
|
|
void GetOriginDisplayPosition(double pos[3]);
|
|
//@}
|
|
|
|
/**
|
|
* Specify a scale to control the size of the widget. Large values make the
|
|
* the widget larger.
|
|
*/
|
|
|
|
//@{
|
|
/**
|
|
* The tolerance representing the distance to the widget (in pixels) in
|
|
* which the cursor is considered near enough to the end points of
|
|
* the widget to be active.
|
|
*/
|
|
vtkSetClampMacro(Tolerance, int, 1, 100);
|
|
vtkGetMacro(Tolerance, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify the format to use for labelling information during
|
|
* transformation. Note that an empty string results in no label, or a
|
|
* format string without a "%" character will not print numeric values.
|
|
*/
|
|
vtkSetStringMacro(LabelFormat);
|
|
vtkGetStringMacro(LabelFormat);
|
|
//@}
|
|
|
|
/**
|
|
* Enum used to communicate interaction state.
|
|
*/
|
|
enum
|
|
{
|
|
Outside = 0,
|
|
OnOrigin,
|
|
OnX,
|
|
OnY,
|
|
OnZ,
|
|
OnXEnd,
|
|
OnYEnd,
|
|
OnZEnd
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* The interaction state may be set from a widget (e.g., vtkLineWidget2) or
|
|
* other object. This controls how the interaction with the widget
|
|
* proceeds. Normally this method is used as part of a handshaking
|
|
* process with the widget: First ComputeInteractionState() is invoked that
|
|
* returns a state based on geometric considerations (i.e., cursor near a
|
|
* widget feature), then based on events, the widget may modify this
|
|
* further.
|
|
*/
|
|
vtkSetClampMacro(InteractionState, int, Outside, OnZEnd);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Method to satisfy superclasses' API.
|
|
*/
|
|
void BuildRepresentation() override;
|
|
int ComputeInteractionState(int X, int Y, int modify = 0) override;
|
|
void StartWidgetInteraction(double e[2]) override;
|
|
void WidgetInteraction(double e[2]) override;
|
|
double* GetBounds() override;
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Methods required by vtkProp superclass.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow* w) override;
|
|
int RenderOpaqueGeometry(vtkViewport* viewport) override;
|
|
int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override;
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Scale text (font size along each dimension). This helps control
|
|
* the appearance of the 3D text.
|
|
*/
|
|
void SetLabelScale(double x, double y, double z)
|
|
{
|
|
double scale[3];
|
|
scale[0] = x;
|
|
scale[1] = y;
|
|
scale[2] = z;
|
|
this->SetLabelScale(scale);
|
|
}
|
|
virtual void SetLabelScale(double scale[3]);
|
|
virtual double* GetLabelScale();
|
|
//@}
|
|
|
|
/**
|
|
* Get the distance annotation property
|
|
*/
|
|
virtual vtkProperty* GetLabelProperty();
|
|
|
|
protected:
|
|
vtkAxesTransformRepresentation();
|
|
~vtkAxesTransformRepresentation() override;
|
|
|
|
// The handle and the rep used to close the handles
|
|
vtkHandleRepresentation* OriginRepresentation;
|
|
vtkHandleRepresentation* SelectionRepresentation;
|
|
|
|
// Selection tolerance for the handles
|
|
int Tolerance;
|
|
|
|
// Format for printing the distance
|
|
char* LabelFormat;
|
|
|
|
// The line
|
|
vtkPoints* LinePoints;
|
|
vtkPolyData* LinePolyData;
|
|
vtkPolyDataMapper* LineMapper;
|
|
vtkActor* LineActor;
|
|
|
|
// The distance label
|
|
vtkVectorText* LabelText;
|
|
vtkPolyDataMapper* LabelMapper;
|
|
vtkFollower* LabelActor;
|
|
|
|
// The 3D disk tick marks
|
|
vtkPoints* GlyphPoints;
|
|
vtkDoubleArray* GlyphVectors;
|
|
vtkPolyData* GlyphPolyData;
|
|
vtkCylinderSource* GlyphCylinder;
|
|
vtkTransformPolyDataFilter* GlyphXForm;
|
|
vtkGlyph3D* Glyph3D;
|
|
vtkPolyDataMapper* GlyphMapper;
|
|
vtkActor* GlyphActor;
|
|
|
|
// Support GetBounds() method
|
|
vtkBox* BoundingBox;
|
|
|
|
double LastEventPosition[3];
|
|
|
|
private:
|
|
vtkAxesTransformRepresentation(const vtkAxesTransformRepresentation&) = delete;
|
|
void operator=(const vtkAxesTransformRepresentation&) = delete;
|
|
};
|
|
|
|
#endif
|