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.
140 lines
4.5 KiB
C++
140 lines
4.5 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkDynamic2DLabelMapper.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.
|
|
|
|
=========================================================================*/
|
|
/*-------------------------------------------------------------------------
|
|
Copyright 2008 Sandia Corporation.
|
|
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
the U.S. Government retains certain rights in this software.
|
|
-------------------------------------------------------------------------*/
|
|
/**
|
|
* @class vtkDynamic2DLabelMapper
|
|
* @brief draw text labels at 2D dataset points
|
|
*
|
|
* vtkDynamic2DLabelMapper is a mapper that renders text at dataset
|
|
* points such that the labels do not overlap.
|
|
* Various items can be labeled including point ids, scalars,
|
|
* vectors, normals, texture coordinates, tensors, and field data components.
|
|
* This mapper assumes that the points are located on the x-y plane
|
|
* and that the camera remains perpendicular to that plane with a y-up
|
|
* axis (this can be constrained using vtkImageInteractor).
|
|
* On the first render, the mapper computes the visiblility of all labels
|
|
* at all scales, and queries this information on successive renders.
|
|
* This causes the first render to be much slower. The visibility algorithm
|
|
* is a greedy approach based on the point id, so the label for a point
|
|
* will be drawn unless the label for a point with lower id overlaps it.
|
|
*
|
|
* @warning
|
|
* Use this filter in combination with vtkSelectVisiblePoints if you want
|
|
* to label only points that are visible. If you want to label cells rather
|
|
* than points, use the filter vtkCellCenters to generate points at the
|
|
* center of the cells. Also, you can use the class vtkIdFilter to
|
|
* generate ids as scalars or field data, which can then be labeled.
|
|
*
|
|
* @sa
|
|
* vtkLabeledDataMapper
|
|
*
|
|
* @par Thanks:
|
|
* This algorithm was developed in the paper
|
|
* Ken Been and Chee Yap. Dynamic Map Labeling. IEEE Transactions on
|
|
* Visualization and Computer Graphics, Vol. 12, No. 5, 2006. pp. 773-780.
|
|
*/
|
|
|
|
#ifndef vtkDynamic2DLabelMapper_h
|
|
#define vtkDynamic2DLabelMapper_h
|
|
|
|
#include "vtkLabeledDataMapper.h"
|
|
#include "vtkRenderingLabelModule.h" // For export macro
|
|
|
|
class VTKRENDERINGLABEL_EXPORT vtkDynamic2DLabelMapper : public vtkLabeledDataMapper
|
|
{
|
|
public:
|
|
//@{
|
|
/**
|
|
* Instantiate object with %%-#6.3g label format. By default, point ids
|
|
* are labeled.
|
|
*/
|
|
static vtkDynamic2DLabelMapper* New();
|
|
vtkTypeMacro(vtkDynamic2DLabelMapper, vtkLabeledDataMapper);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
//@}
|
|
|
|
/**
|
|
* Set the points array name to use to give priority to labels.
|
|
* Defaults to "priority".
|
|
*/
|
|
void SetPriorityArrayName(const char* name);
|
|
|
|
//@{
|
|
/**
|
|
* Whether to reverse the priority order (i.e. low values have high priority).
|
|
* Default is off.
|
|
*/
|
|
vtkSetMacro(ReversePriority, bool);
|
|
vtkGetMacro(ReversePriority, bool);
|
|
vtkBooleanMacro(ReversePriority, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the label height padding as a percentage. The percentage
|
|
* is a percentage of your label height.
|
|
* Default is 50%.
|
|
*/
|
|
vtkSetMacro(LabelHeightPadding, float);
|
|
vtkGetMacro(LabelHeightPadding, float);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the label width padding as a percentage. The percentage
|
|
* is a percentage of your label ^height^ (yes, not a typo).
|
|
* Default is 50%.
|
|
*/
|
|
vtkSetMacro(LabelWidthPadding, float);
|
|
vtkGetMacro(LabelWidthPadding, float);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Draw non-overlapping labels to the screen.
|
|
*/
|
|
void RenderOpaqueGeometry(vtkViewport* viewport, vtkActor2D* actor) override;
|
|
void RenderOverlay(vtkViewport* viewport, vtkActor2D* actor) override;
|
|
//@}
|
|
|
|
protected:
|
|
vtkDynamic2DLabelMapper();
|
|
~vtkDynamic2DLabelMapper() override;
|
|
|
|
/**
|
|
* Calculate the current zoom scale of the viewport.
|
|
*/
|
|
double GetCurrentScale(vtkViewport* viewport);
|
|
|
|
float* LabelWidth;
|
|
float* LabelHeight;
|
|
float* Cutoff;
|
|
float ReferenceScale;
|
|
float LabelHeightPadding;
|
|
float LabelWidthPadding;
|
|
|
|
bool ReversePriority;
|
|
|
|
private:
|
|
vtkDynamic2DLabelMapper(const vtkDynamic2DLabelMapper&) = delete;
|
|
void operator=(const vtkDynamic2DLabelMapper&) = delete;
|
|
};
|
|
|
|
#endif
|