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.

170 lines
5.0 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkBiDimensionalRepresentation2D.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 vtkBiDimensionalRepresentation2D
* @brief represent the vtkBiDimensionalWidget
*
* The vtkBiDimensionalRepresentation2D is used to represent the
* bi-dimensional measure in a 2D (overlay) context. This representation
* consists of two perpendicular lines defined by four
* vtkHandleRepresentations. The four handles can be independently
* manipulated consistent with the orthogonal constraint on the lines. (Note:
* the four points are referred to as Point1, Point2, Point3 and
* Point4. Point1 and Point2 define the first line; and Point3 and Point4
* define the second orthogonal line.)
*
* To create this widget, you click to place the first two points. The third
* point is mirrored with the fourth point; when you place the third point
* (which is orthogonal to the lined defined by the first two points), the
* fourth point is dropped as well. After definition, the four points can be
* moved (in constrained fashion, preserving orthogonality). Further, the
* entire widget can be translated by grabbing the center point of the widget;
* each line can be moved along the other line; and the entire widget can be
* rotated around its center point.
*
* @sa
* vtkAngleWidget vtkHandleRepresentation vtkBiDimensionalRepresentation
*/
#ifndef vtkBiDimensionalRepresentation2D_h
#define vtkBiDimensionalRepresentation2D_h
#include "vtkBiDimensionalRepresentation.h"
#include "vtkInteractionWidgetsModule.h" // For export macro
class vtkHandleRepresentation;
class vtkCellArray;
class vtkPoints;
class vtkPolyData;
class vtkPolyDataMapper2D;
class vtkTextMapper;
class vtkActor2D;
class vtkProperty2D;
class vtkTextProperty;
class VTKINTERACTIONWIDGETS_EXPORT vtkBiDimensionalRepresentation2D
: public vtkBiDimensionalRepresentation
{
public:
/**
* Instantiate the class.
*/
static vtkBiDimensionalRepresentation2D* New();
//@{
/**
* Standard VTK methods.
*/
vtkTypeMacro(vtkBiDimensionalRepresentation2D, vtkBiDimensionalRepresentation);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@}
//@{
/**
* Retrieve the property used to control the appearance of the two
* orthogonal lines.
*/
vtkGetObjectMacro(LineProperty, vtkProperty2D);
vtkGetObjectMacro(SelectedLineProperty, vtkProperty2D);
//@}
//@{
/**
* Retrieve the property used to control the appearance of the text
* labels.
*/
vtkGetObjectMacro(TextProperty, vtkTextProperty);
//@}
// Used to communicate about the state of the representation
enum
{
Outside = 0,
NearP1,
NearP2,
NearP3,
NearP4,
OnL1Inner,
OnL1Outer,
OnL2Inner,
OnL2Outer,
OnCenter
};
//@{
/**
* These are methods that satisfy vtkWidgetRepresentation's API.
*/
void BuildRepresentation() override;
int ComputeInteractionState(int X, int Y, int modify = 0) override;
void StartWidgetDefinition(double e[2]) override;
void Point2WidgetInteraction(double e[2]) override;
void Point3WidgetInteraction(double e[2]) override;
void StartWidgetManipulation(double e[2]) override;
void WidgetInteraction(double e[2]) override;
void Highlight(int highlightOn) override;
//@}
//@{
/**
* Methods required by vtkProp superclass.
*/
void ReleaseGraphicsResources(vtkWindow* w) override;
int RenderOverlay(vtkViewport* viewport) override;
//@}
/**
* Get the text shown in the widget's label.
*/
char* GetLabelText() override;
//@{
/**
* Get the position of the widget's label in display coordinates.
*/
double* GetLabelPosition() override;
void GetLabelPosition(double pos[3]) override;
void GetWorldLabelPosition(double pos[3]) override;
//@}
protected:
vtkBiDimensionalRepresentation2D();
~vtkBiDimensionalRepresentation2D() override;
// Geometry of the lines
vtkCellArray* LineCells;
vtkPoints* LinePoints;
vtkPolyData* LinePolyData;
vtkPolyDataMapper2D* LineMapper;
vtkActor2D* LineActor;
vtkProperty2D* LineProperty;
vtkProperty2D* SelectedLineProperty;
// The labels for the line lengths
vtkTextProperty* TextProperty;
vtkTextMapper* TextMapper;
vtkActor2D* TextActor;
// Helper method
void ProjectOrthogonalPoint(
double x[4], double y[3], double x1[3], double x2[3], double x21[3], double dir, double xP[3]);
private:
vtkBiDimensionalRepresentation2D(const vtkBiDimensionalRepresentation2D&) = delete;
void operator=(const vtkBiDimensionalRepresentation2D&) = delete;
};
#endif