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.
250 lines
6.6 KiB
C++
250 lines
6.6 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkAnnotatedCubeActor.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 vtkAnnotatedCubeActor
|
|
* @brief a 3D cube with face labels
|
|
*
|
|
* vtkAnnotatedCubeActor is a hybrid 3D actor used to represent an anatomical
|
|
* orientation marker in a scene. The class consists of a 3D unit cube centered
|
|
* on the origin with each face labelled in correspondence to a particular
|
|
* coordinate direction. For example, with Cartesian directions, the user
|
|
* defined text labels could be: +X, -X, +Y, -Y, +Z, -Z, while for anatomical
|
|
* directions: A, P, L, R, S, I. Text is automatically centered on each cube
|
|
* face and is not restriceted to single characters. In addition to or in
|
|
* replace of a solid text label representation, the outline edges of the labels
|
|
* can be displayed. The individual properties of the cube, face labels
|
|
* and text outlines can be manipulated as can their visibility.
|
|
*
|
|
* @warning
|
|
* vtkAnnotatedCubeActor is primarily intended for use with
|
|
* vtkOrientationMarkerWidget. The cube face text is generated by vtkVectorText
|
|
* and therefore the font attributes are restricted.
|
|
*
|
|
* @sa
|
|
* vtkAxesActor vtkOrientationMarkerWidget vtkVectorText
|
|
*/
|
|
|
|
#ifndef vtkAnnotatedCubeActor_h
|
|
#define vtkAnnotatedCubeActor_h
|
|
|
|
#include "vtkProp3D.h"
|
|
#include "vtkRenderingAnnotationModule.h" // For export macro
|
|
|
|
class vtkActor;
|
|
class vtkAppendPolyData;
|
|
class vtkAssembly;
|
|
class vtkCubeSource;
|
|
class vtkFeatureEdges;
|
|
class vtkPropCollection;
|
|
class vtkProperty;
|
|
class vtkRenderer;
|
|
class vtkTransform;
|
|
class vtkTransformFilter;
|
|
class vtkVectorText;
|
|
|
|
class VTKRENDERINGANNOTATION_EXPORT vtkAnnotatedCubeActor : public vtkProp3D
|
|
{
|
|
public:
|
|
static vtkAnnotatedCubeActor* New();
|
|
vtkTypeMacro(vtkAnnotatedCubeActor, vtkProp3D);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* For some exporters and other other operations we must be
|
|
* able to collect all the actors or volumes. These methods
|
|
* are used in that process.
|
|
*/
|
|
void GetActors(vtkPropCollection*) override;
|
|
|
|
//@{
|
|
/**
|
|
* Support the standard render methods.
|
|
*/
|
|
int RenderOpaqueGeometry(vtkViewport* viewport) override;
|
|
int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override;
|
|
//@}
|
|
|
|
/**
|
|
* Does this prop have some translucent polygonal geometry?
|
|
*/
|
|
vtkTypeBool HasTranslucentPolygonalGeometry() override;
|
|
|
|
/**
|
|
* Shallow copy of an axes actor. Overloads the virtual vtkProp method.
|
|
*/
|
|
void ShallowCopy(vtkProp* prop) override;
|
|
|
|
/**
|
|
* Release any graphics resources that are being consumed by this actor.
|
|
* The parameter window could be used to determine which graphic
|
|
* resources to release.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
//@{
|
|
/**
|
|
* Get the bounds for this Actor as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax). (The
|
|
* method GetBounds(double bounds[6]) is available from the superclass.)
|
|
*/
|
|
void GetBounds(double bounds[6]);
|
|
double* GetBounds() VTK_SIZEHINT(6) override;
|
|
//@}
|
|
|
|
/**
|
|
* Get the actors mtime plus consider its properties and texture if set.
|
|
*/
|
|
vtkMTimeType GetMTime() override;
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the scale factor for the face text
|
|
*/
|
|
void SetFaceTextScale(double);
|
|
vtkGetMacro(FaceTextScale, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the individual face text properties.
|
|
*/
|
|
vtkProperty* GetXPlusFaceProperty();
|
|
vtkProperty* GetXMinusFaceProperty();
|
|
vtkProperty* GetYPlusFaceProperty();
|
|
vtkProperty* GetYMinusFaceProperty();
|
|
vtkProperty* GetZPlusFaceProperty();
|
|
vtkProperty* GetZMinusFaceProperty();
|
|
//@}
|
|
|
|
/**
|
|
* Get the cube properties.
|
|
*/
|
|
vtkProperty* GetCubeProperty();
|
|
|
|
/**
|
|
* Get the text edges properties.
|
|
*/
|
|
vtkProperty* GetTextEdgesProperty();
|
|
|
|
//@{
|
|
/**
|
|
* Set/get the face text.
|
|
*/
|
|
vtkSetStringMacro(XPlusFaceText);
|
|
vtkGetStringMacro(XPlusFaceText);
|
|
vtkSetStringMacro(XMinusFaceText);
|
|
vtkGetStringMacro(XMinusFaceText);
|
|
vtkSetStringMacro(YPlusFaceText);
|
|
vtkGetStringMacro(YPlusFaceText);
|
|
vtkSetStringMacro(YMinusFaceText);
|
|
vtkGetStringMacro(YMinusFaceText);
|
|
vtkSetStringMacro(ZPlusFaceText);
|
|
vtkGetStringMacro(ZPlusFaceText);
|
|
vtkSetStringMacro(ZMinusFaceText);
|
|
vtkGetStringMacro(ZMinusFaceText);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Enable/disable drawing the vector text edges.
|
|
*/
|
|
void SetTextEdgesVisibility(int);
|
|
int GetTextEdgesVisibility();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Enable/disable drawing the cube.
|
|
*/
|
|
void SetCubeVisibility(int);
|
|
int GetCubeVisibility();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Enable/disable drawing the vector text.
|
|
*/
|
|
void SetFaceTextVisibility(int);
|
|
int GetFaceTextVisibility();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Augment individual face text orientations.
|
|
*/
|
|
vtkSetMacro(XFaceTextRotation, double);
|
|
vtkGetMacro(XFaceTextRotation, double);
|
|
vtkSetMacro(YFaceTextRotation, double);
|
|
vtkGetMacro(YFaceTextRotation, double);
|
|
vtkSetMacro(ZFaceTextRotation, double);
|
|
vtkGetMacro(ZFaceTextRotation, double);
|
|
//@}
|
|
|
|
/**
|
|
* Get the assembly so that user supplied transforms can be applied
|
|
*/
|
|
vtkAssembly* GetAssembly() { return this->Assembly; }
|
|
|
|
protected:
|
|
vtkAnnotatedCubeActor();
|
|
~vtkAnnotatedCubeActor() override;
|
|
|
|
vtkCubeSource* CubeSource;
|
|
vtkActor* CubeActor;
|
|
|
|
vtkAppendPolyData* AppendTextEdges;
|
|
vtkFeatureEdges* ExtractTextEdges;
|
|
vtkActor* TextEdgesActor;
|
|
|
|
void UpdateProps();
|
|
|
|
char* XPlusFaceText;
|
|
char* XMinusFaceText;
|
|
char* YPlusFaceText;
|
|
char* YMinusFaceText;
|
|
char* ZPlusFaceText;
|
|
char* ZMinusFaceText;
|
|
|
|
double FaceTextScale;
|
|
|
|
double XFaceTextRotation;
|
|
double YFaceTextRotation;
|
|
double ZFaceTextRotation;
|
|
|
|
vtkVectorText* XPlusFaceVectorText;
|
|
vtkVectorText* XMinusFaceVectorText;
|
|
vtkVectorText* YPlusFaceVectorText;
|
|
vtkVectorText* YMinusFaceVectorText;
|
|
vtkVectorText* ZPlusFaceVectorText;
|
|
vtkVectorText* ZMinusFaceVectorText;
|
|
|
|
vtkActor* XPlusFaceActor;
|
|
vtkActor* XMinusFaceActor;
|
|
vtkActor* YPlusFaceActor;
|
|
vtkActor* YMinusFaceActor;
|
|
vtkActor* ZPlusFaceActor;
|
|
vtkActor* ZMinusFaceActor;
|
|
|
|
vtkTransformFilter* InternalTransformFilter;
|
|
vtkTransform* InternalTransform;
|
|
|
|
vtkAssembly* Assembly;
|
|
|
|
private:
|
|
vtkAnnotatedCubeActor(const vtkAnnotatedCubeActor&) = delete;
|
|
void operator=(const vtkAnnotatedCubeActor&) = delete;
|
|
};
|
|
|
|
#endif
|