|
|
|
|
/*****************************************************************//**
|
|
|
|
|
* @file FITKPolyPlacementMapper.h
|
|
|
|
|
* @brief Polydata placement mapper.
|
|
|
|
|
*
|
|
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
|
|
|
* @date 2024-04-11
|
|
|
|
|
*********************************************************************/
|
|
|
|
|
|
|
|
|
|
#ifndef FITKPOLYPLACEMENTMAPPER_H
|
|
|
|
|
#define FITKPOLYPLACEMENTMAPPER_H
|
|
|
|
|
|
|
|
|
|
#include "vtkMapper2D.h"
|
|
|
|
|
|
|
|
|
|
#include "FITKVTKAlgorithmAPI.h"
|
|
|
|
|
|
|
|
|
|
class vtkRenderer;
|
|
|
|
|
class vtkCoordinate;
|
|
|
|
|
class vtkSelectVisiblePoints;
|
|
|
|
|
class FITKPolyRenderStrategy;
|
|
|
|
|
|
|
|
|
|
class FITKVTKALGORITHMAPI FITKPolyPlacementMapper : public vtkMapper2D
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
static FITKPolyPlacementMapper* New();
|
|
|
|
|
vtkTypeMacro(FITKPolyPlacementMapper, vtkMapper2D);
|
|
|
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Draw non-overlapping labels to the screen.
|
|
|
|
|
*/
|
|
|
|
|
void RenderOverlay(vtkViewport* viewport, vtkActor2D* actor) override;
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* The size of the point's mark need to be drawn.
|
|
|
|
|
*/
|
|
|
|
|
//vtkSetMacro(PixelSize, int);
|
|
|
|
|
//vtkGetMacro(PixelSize, int);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set the poly data label rendering strategy.
|
|
|
|
|
*/
|
|
|
|
|
virtual void SetRenderStrategy(FITKPolyRenderStrategy* s);
|
|
|
|
|
vtkGetObjectMacro(RenderStrategy, FITKPolyRenderStrategy);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* The maximum fraction of the screen that the labels may cover.
|
|
|
|
|
* Label placement stops when this fraction is reached.
|
|
|
|
|
*/
|
|
|
|
|
vtkSetClampMacro(MaximumLabelFraction, double, 0., 1.);
|
|
|
|
|
vtkGetMacro(MaximumLabelFraction, double);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* The type of iterator used when traversing the labels.
|
|
|
|
|
* May be vtkLabelHierarchy::FRUSTUM or vtkLabelHierarchy::FULL_SORT
|
|
|
|
|
*/
|
|
|
|
|
vtkSetMacro(IteratorType, int);
|
|
|
|
|
vtkGetMacro(IteratorType, int);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* Use label anchor point coordinates as normal vectors and eliminate those
|
|
|
|
|
* pointing away from the camera. Valid only when points are on a sphere
|
|
|
|
|
* centered at the origin (such as a 3D geographic view). Off by default.
|
|
|
|
|
*/
|
|
|
|
|
vtkGetMacro(PositionsAsNormals, bool);
|
|
|
|
|
vtkSetMacro(PositionsAsNormals, bool);
|
|
|
|
|
vtkBooleanMacro(PositionsAsNormals, bool);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* Enable drawing spokes (lines) to anchor point coordinates that were perturbed
|
|
|
|
|
* for being coincident with other anchor point coordinates.
|
|
|
|
|
*/
|
|
|
|
|
vtkGetMacro(GeneratePerturbedLabelSpokes, bool);
|
|
|
|
|
vtkSetMacro(GeneratePerturbedLabelSpokes, bool);
|
|
|
|
|
vtkBooleanMacro(GeneratePerturbedLabelSpokes, bool);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* Use the depth buffer to test each label to see if it should not be displayed if
|
|
|
|
|
* it would be occluded by other objects in the scene. Off by default.
|
|
|
|
|
*/
|
|
|
|
|
vtkGetMacro(UseDepthBuffer, bool);
|
|
|
|
|
vtkSetMacro(UseDepthBuffer, bool);
|
|
|
|
|
vtkBooleanMacro(UseDepthBuffer, bool);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* Tells the placer to place every label regardless of overlap.
|
|
|
|
|
* Off by default.
|
|
|
|
|
*/
|
|
|
|
|
vtkSetMacro(PlaceAllLabels, bool);
|
|
|
|
|
vtkGetMacro(PlaceAllLabels, bool);
|
|
|
|
|
vtkBooleanMacro(PlaceAllLabels, bool);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* Whether to render traversed bounds. Off by default.
|
|
|
|
|
*/
|
|
|
|
|
vtkSetMacro(OutputTraversedBounds, bool);
|
|
|
|
|
vtkGetMacro(OutputTraversedBounds, bool);
|
|
|
|
|
vtkBooleanMacro(OutputTraversedBounds, bool);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
//@{
|
|
|
|
|
/**
|
|
|
|
|
* Get the transform for the anchor points.
|
|
|
|
|
*/
|
|
|
|
|
vtkGetObjectMacro(AnchorTransform, vtkCoordinate);
|
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Release any graphics resources that are being consumed by this mapper.
|
|
|
|
|
* The parameter window could be used to determine which graphic
|
|
|
|
|
* resources to release.
|
|
|
|
|
*/
|
|
|
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
FITKPolyPlacementMapper();
|
|
|
|
|
~FITKPolyPlacementMapper() override;
|
|
|
|
|
|
|
|
|
|
#if VTK_MAJOR_VERSION < 9
|
|
|
|
|
void GetAnchorFrustumPlanes(double frustumPlanes[24], vtkRenderer* ren, vtkCoordinate* anchorTransform);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
virtual void SetAnchorTransform(vtkCoordinate*);
|
|
|
|
|
|
|
|
|
|
int FillInputPortInformation(int port, vtkInformation* info) override;
|
|
|
|
|
|
|
|
|
|
class Internal;
|
|
|
|
|
Internal* Buckets;
|
|
|
|
|
|
|
|
|
|
// int PixelSize = 20;
|
|
|
|
|
FITKPolyRenderStrategy* RenderStrategy{ nullptr };
|
|
|
|
|
|
|
|
|
|
vtkCoordinate* AnchorTransform;
|
|
|
|
|
vtkSelectVisiblePoints* VisiblePoints;
|
|
|
|
|
double MaximumLabelFraction;
|
|
|
|
|
bool PositionsAsNormals;
|
|
|
|
|
bool GeneratePerturbedLabelSpokes;
|
|
|
|
|
bool UseDepthBuffer;
|
|
|
|
|
bool PlaceAllLabels;
|
|
|
|
|
bool OutputTraversedBounds;
|
|
|
|
|
|
|
|
|
|
int LastRendererSize[2];
|
|
|
|
|
double LastCameraPosition[3];
|
|
|
|
|
double LastCameraFocalPoint[3];
|
|
|
|
|
double LastCameraViewUp[3];
|
|
|
|
|
double LastCameraParallelScale;
|
|
|
|
|
int IteratorType;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
FITKPolyPlacementMapper(const FITKPolyPlacementMapper&) = delete;
|
|
|
|
|
void operator=(const FITKPolyPlacementMapper&) = delete;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // FITKPOLYPLACEMENTMAPPER_H
|