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.
155 lines
5.0 KiB
C
155 lines
5.0 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkImageActorPointPlacer.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 vtkImageActorPointPlacer
|
||
|
* @brief Converts 2D display positions to world positions such that they lie on an ImageActor
|
||
|
*
|
||
|
* This PointPlacer is used to constrain the placement of points on the
|
||
|
* supplied image actor. Additionally, you may set bounds to restrict the
|
||
|
* placement of the points. The placement of points will then be constrained
|
||
|
* to lie not only on the ImageActor but also within the bounds specified.
|
||
|
* If no bounds are specified, they may lie anywhere on the supplied ImageActor.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkImageActorPointPlacer_h
|
||
|
#define vtkImageActorPointPlacer_h
|
||
|
|
||
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
||
|
#include "vtkPointPlacer.h"
|
||
|
|
||
|
class vtkBoundedPlanePointPlacer;
|
||
|
class vtkImageActor;
|
||
|
class vtkRenderer;
|
||
|
|
||
|
class VTKINTERACTIONWIDGETS_EXPORT vtkImageActorPointPlacer : public vtkPointPlacer
|
||
|
{
|
||
|
public:
|
||
|
/**
|
||
|
* Instantiate this class.
|
||
|
*/
|
||
|
static vtkImageActorPointPlacer* New();
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Standard methods for instances of this class.
|
||
|
*/
|
||
|
vtkTypeMacro(vtkImageActorPointPlacer, vtkPointPlacer);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Given and renderer and a display position in pixels,
|
||
|
* find a world position and orientation. In this class
|
||
|
* an internal vtkBoundedPlanePointPlacer is used to compute
|
||
|
* the world position and orientation. The internal placer
|
||
|
* is set to use the plane of the image actor and the bounds
|
||
|
* of the image actor as the constraints for placing points.
|
||
|
*/
|
||
|
int ComputeWorldPosition(
|
||
|
vtkRenderer* ren, double displayPos[2], double worldPos[3], double worldOrient[9]) override;
|
||
|
|
||
|
/**
|
||
|
* This method is identical to the one above since the
|
||
|
* reference position is ignored by the bounded plane
|
||
|
* point placer.
|
||
|
*/
|
||
|
int ComputeWorldPosition(vtkRenderer* ren, double displayPos[2], double refWorldPos[2],
|
||
|
double worldPos[3], double worldOrient[9]) override;
|
||
|
|
||
|
/**
|
||
|
* This method validates a world position by checking to see
|
||
|
* if the world position is valid according to the constraints
|
||
|
* of the internal placer (essentially - is this world position
|
||
|
* on the image?)
|
||
|
*/
|
||
|
int ValidateWorldPosition(double worldPos[3]) override;
|
||
|
|
||
|
/**
|
||
|
* This method is identical to the one above since the bounded
|
||
|
* plane point placer ignores orientation
|
||
|
*/
|
||
|
int ValidateWorldPosition(double worldPos[3], double worldOrient[9]) override;
|
||
|
|
||
|
/**
|
||
|
* Update the world position and orientation according the
|
||
|
* the current constraints of the placer. Will be called
|
||
|
* by the representation when it notices that this placer
|
||
|
* has been modified.
|
||
|
*/
|
||
|
int UpdateWorldPosition(vtkRenderer* ren, double worldPos[3], double worldOrient[9]) override;
|
||
|
|
||
|
/**
|
||
|
* A method for configuring the internal placer according
|
||
|
* to the constraints of the image actor.
|
||
|
* Called by the representation to give the placer a chance
|
||
|
* to update itself, which may cause the MTime to change,
|
||
|
* which would then cause the representation to update
|
||
|
* all of its points
|
||
|
*/
|
||
|
int UpdateInternalState() override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set / get the reference vtkImageActor used to place the points.
|
||
|
* An image actor must be set for this placer to work. An internal
|
||
|
* bounded plane point placer is created and set to match the bounds
|
||
|
* of the displayed image.
|
||
|
*/
|
||
|
void SetImageActor(vtkImageActor*);
|
||
|
vtkGetObjectMacro(ImageActor, vtkImageActor);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Optionally, you may set bounds to restrict the placement of the points.
|
||
|
* The placement of points will then be constrained to lie not only on
|
||
|
* the ImageActor but also within the bounds specified. If no bounds are
|
||
|
* specified, they may lie anywhere on the supplied ImageActor.
|
||
|
*/
|
||
|
vtkSetVector6Macro(Bounds, double);
|
||
|
vtkGetVector6Macro(Bounds, double);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Set the world tolerance. This propagates it to the internal
|
||
|
* BoundedPlanePointPlacer.
|
||
|
*/
|
||
|
void SetWorldTolerance(double s) override;
|
||
|
|
||
|
protected:
|
||
|
vtkImageActorPointPlacer();
|
||
|
~vtkImageActorPointPlacer() override;
|
||
|
|
||
|
// The reference image actor. Must be configured before this placer
|
||
|
// is used.
|
||
|
vtkImageActor* ImageActor;
|
||
|
|
||
|
// The internal placer.
|
||
|
vtkBoundedPlanePointPlacer* Placer;
|
||
|
|
||
|
// Used to keep track of whether the bounds of the
|
||
|
// input image have changed
|
||
|
double SavedBounds[6];
|
||
|
|
||
|
// See the SetBounds method
|
||
|
double Bounds[6];
|
||
|
|
||
|
private:
|
||
|
vtkImageActorPointPlacer(const vtkImageActorPointPlacer&) = delete;
|
||
|
void operator=(const vtkImageActorPointPlacer&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|