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.
228 lines
5.9 KiB
C++
228 lines
5.9 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkDistanceRepresentation3D.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 vtkDistanceRepresentation3D
|
|
* @brief represent the vtkDistanceWidget
|
|
*
|
|
* The vtkDistanceRepresentation3D is a representation for the
|
|
* vtkDistanceWidget. This representation consists of a measuring line (axis)
|
|
* and two vtkHandleWidgets to place the end points of the line. Note that
|
|
* this particular widget draws its representation in 3D space, so the widget
|
|
* can be occluded.
|
|
*
|
|
* @sa
|
|
* vtkDistanceWidget vtkDistanceRepresentation vtkDistanceRepresentation2D
|
|
*/
|
|
|
|
#ifndef vtkDistanceRepresentation3D_h
|
|
#define vtkDistanceRepresentation3D_h
|
|
|
|
#include "vtkDistanceRepresentation.h"
|
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
|
|
|
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 vtkDistanceRepresentation3D : public vtkDistanceRepresentation
|
|
{
|
|
public:
|
|
/**
|
|
* Instantiate class.
|
|
*/
|
|
static vtkDistanceRepresentation3D* New();
|
|
|
|
//@{
|
|
/**
|
|
* Standard VTK methods.
|
|
*/
|
|
vtkTypeMacro(vtkDistanceRepresentation3D, vtkDistanceRepresentation);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
//@}
|
|
|
|
/**
|
|
* Satisfy the superclasses API.
|
|
*/
|
|
double GetDistance() override { return this->Distance; }
|
|
|
|
//@{
|
|
/**
|
|
* Scale the glyphs used as tick marks. By default it is
|
|
* 1/40th of the length.
|
|
*/
|
|
void SetGlyphScale(double scale);
|
|
vtkGetMacro(GlyphScale, double);
|
|
//@}
|
|
|
|
/**
|
|
* Convenience method to get the line actor property.
|
|
*/
|
|
virtual vtkProperty* GetLineProperty();
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get position of the label title in normalized coordinates [0,1].
|
|
* 0 is at the start of the line whereas 1 is at the end.
|
|
*/
|
|
void SetLabelPosition(double labelPosition);
|
|
vtkGetMacro(LabelPosition, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the maximum number of ticks in ruler mode.
|
|
*/
|
|
vtkSetClampMacro(MaximumNumberOfRulerTicks, int, 1, VTK_INT_MAX);
|
|
vtkGetMacro(MaximumNumberOfRulerTicks, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Convenience method to get the glyph actor. Using this it is
|
|
* possible to control the appearance of the glyphs.
|
|
*/
|
|
vtkGetObjectMacro(GlyphActor, vtkActor);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Convenience method Get the label actor. It is possible to
|
|
* control the appearance of the label.
|
|
*/
|
|
vtkGetObjectMacro(LabelActor, vtkFollower);
|
|
virtual void SetLabelActor(vtkFollower*);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* 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* GetPoint1WorldPosition() override;
|
|
double* GetPoint2WorldPosition() override;
|
|
void GetPoint1WorldPosition(double pos[3]) override;
|
|
void GetPoint2WorldPosition(double pos[3]) override;
|
|
void SetPoint1WorldPosition(double pos[3]) override;
|
|
void SetPoint2WorldPosition(double pos[3]) override;
|
|
//@}
|
|
|
|
void SetPoint1DisplayPosition(double pos[3]) override;
|
|
void SetPoint2DisplayPosition(double pos[3]) override;
|
|
void GetPoint1DisplayPosition(double pos[3]) override;
|
|
void GetPoint2DisplayPosition(double pos[3]) override;
|
|
|
|
//@{
|
|
/**
|
|
* Method to satisfy superclasses' API.
|
|
*/
|
|
void BuildRepresentation() 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:
|
|
vtkDistanceRepresentation3D();
|
|
~vtkDistanceRepresentation3D() override;
|
|
|
|
// The line
|
|
vtkPoints* LinePoints;
|
|
vtkPolyData* LinePolyData;
|
|
vtkPolyDataMapper* LineMapper;
|
|
vtkActor* LineActor;
|
|
|
|
// The distance label
|
|
vtkVectorText* LabelText;
|
|
vtkPolyDataMapper* LabelMapper;
|
|
vtkFollower* LabelActor;
|
|
|
|
// Support internal operations
|
|
bool LabelScaleSpecified;
|
|
|
|
// The 3D disk tick marks
|
|
vtkPoints* GlyphPoints;
|
|
vtkDoubleArray* GlyphVectors;
|
|
vtkPolyData* GlyphPolyData;
|
|
vtkCylinderSource* GlyphCylinder;
|
|
vtkTransformPolyDataFilter* GlyphXForm;
|
|
vtkGlyph3D* Glyph3D;
|
|
vtkPolyDataMapper* GlyphMapper;
|
|
vtkActor* GlyphActor;
|
|
|
|
// Glyph3D scale
|
|
double GlyphScale;
|
|
bool GlyphScaleSpecified;
|
|
|
|
// The distance between the two points
|
|
double Distance;
|
|
|
|
// Support GetBounds() method
|
|
vtkBox* BoundingBox;
|
|
|
|
// Maximum number of ticks on the 3d ruler
|
|
int MaximumNumberOfRulerTicks;
|
|
|
|
// Label title position
|
|
double LabelPosition;
|
|
|
|
private:
|
|
vtkDistanceRepresentation3D(const vtkDistanceRepresentation3D&) = delete;
|
|
void operator=(const vtkDistanceRepresentation3D&) = delete;
|
|
|
|
// Internal method to update the position of the label.
|
|
void UpdateLabelPosition();
|
|
};
|
|
|
|
#endif
|