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.
nmWTAI-Platform/3rd/VTK7.1/include/vtkBillboardTextActor3D.h

142 lines
3.8 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkBillboardTextActor3D.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 vtkBillboardTextActor3D
* @brief Renders pixel-aligned text, facing the camera, anchored at a 3D point.
*/
#ifndef vtkBillboardTextActor3D_h
#define vtkBillboardTextActor3D_h
#include "vtkRenderingCoreModule.h" // For export macro
#include "vtkProp3D.h"
#include "vtkNew.h" // For.... vtkNew!
class vtkActor;
class vtkImageData;
class vtkPolyData;
class vtkPolyDataMapper;
class vtkRenderer;
class vtkTextProperty;
class vtkTextRenderer;
class vtkTexture;
class VTKRENDERINGCORE_EXPORT vtkBillboardTextActor3D: public vtkProp3D
{
public:
static vtkBillboardTextActor3D* New();
vtkTypeMacro(vtkBillboardTextActor3D, vtkProp3D)
void PrintSelf(ostream &os, vtkIndent indent) VTK_OVERRIDE;
/**
* The UTF-8 encoded string to display.
* @{
*/
void SetInput(const char *in);
vtkGetStringMacro(Input)
/** @} */
/**
* Can be used to set a fixed offset from the anchor point.
* Use display coordinates.
* @{
*/
vtkGetVector2Macro(DisplayOffset, int)
vtkSetVector2Macro(DisplayOffset, int)
/** @} */
/**
* The vtkTextProperty object that controls the rendered text.
* @{
*/
void SetTextProperty(vtkTextProperty *tprop);
vtkGetObjectMacro(TextProperty, vtkTextProperty)
/** @} */
/**
* Always returns true, as we're rendering an RGBA texture.
*/
int HasTranslucentPolygonalGeometry() VTK_OVERRIDE { return 1; }
/**
* Check/update geometry/texture in opaque pass, since it only happens once.
*/
int RenderOpaqueGeometry(vtkViewport *vp) VTK_OVERRIDE;
/**
* Just render in translucent pass, since it can execute multiple times
* (depth peeling, for instance).
*/
int RenderTranslucentPolygonalGeometry(vtkViewport *vp) VTK_OVERRIDE;
void ReleaseGraphicsResources(vtkWindow *win) VTK_OVERRIDE;
double *GetBounds() VTK_OVERRIDE;
using Superclass::GetBounds;
/**
* Returns the anchor position in display coordinates, with depth in NDC.
* Valid after calling RenderOpaqueGeometry.
*/
vtkGetVector3Macro(AnchorDC, double)
protected:
vtkBillboardTextActor3D();
~vtkBillboardTextActor3D();
bool InputIsValid();
bool TextureIsStale(vtkRenderer *ren);
void GenerateTexture(vtkRenderer *ren);
bool QuadIsStale(vtkRenderer *ren);
void GenerateQuad(vtkRenderer *ren);
// Used by the opaque pass to tell the translucent pass not to render.
void Invalidate();
bool IsValid();
// Used to sync the internal actor's state.
void PreRender();
// Text specification:
char *Input;
vtkTextProperty *TextProperty;
// Offset in display coordinates.
int DisplayOffset[2];
// Cached metadata to determine if things need rebuildin'
int RenderedDPI;
vtkTimeStamp InputMTime;
// Rendering stuffies
vtkNew<vtkTextRenderer> TextRenderer;
vtkNew<vtkImageData> Image;
vtkNew<vtkTexture> Texture;
vtkNew<vtkPolyData> Quad;
vtkNew<vtkPolyDataMapper> QuadMapper;
vtkNew<vtkActor> QuadActor;
// Display coordinate for anchor position. Z value is in NDC.
// Cached for GL2PS export on OpenGL2:
double AnchorDC[3];
private:
vtkBillboardTextActor3D(const vtkBillboardTextActor3D&) VTK_DELETE_FUNCTION;
void operator=(const vtkBillboardTextActor3D&) VTK_DELETE_FUNCTION;
};
#endif // vtkBillboardTextActor3D_h