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.
160 lines
4.7 KiB
C++
160 lines
4.7 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkSeedRepresentation.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 vtkSeedRepresentation
|
|
* @brief represent the vtkSeedWidget
|
|
*
|
|
* The vtkSeedRepresentation is a superclass for classes representing the
|
|
* vtkSeedWidget. This representation consists of one or more handles
|
|
* (vtkHandleRepresentation) which are used to place and manipulate the
|
|
* points defining the collection of seeds.
|
|
*
|
|
* @sa
|
|
* vtkSeedWidget vtkHandleRepresentation vtkSeedRepresentation
|
|
*/
|
|
|
|
#ifndef vtkSeedRepresentation_h
|
|
#define vtkSeedRepresentation_h
|
|
|
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
|
#include "vtkWidgetRepresentation.h"
|
|
|
|
class vtkHandleList;
|
|
class vtkHandleRepresentation;
|
|
|
|
class VTKINTERACTIONWIDGETS_EXPORT vtkSeedRepresentation : public vtkWidgetRepresentation
|
|
{
|
|
public:
|
|
/**
|
|
* Instantiate class.
|
|
*/
|
|
static vtkSeedRepresentation* New();
|
|
|
|
//@{
|
|
/**
|
|
* Standard VTK methods.
|
|
*/
|
|
vtkTypeMacro(vtkSeedRepresentation, vtkWidgetRepresentation);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Methods to Set/Get the coordinates of seed points defining
|
|
* this representation. Note that methods are available for both
|
|
* display and world coordinates. The seeds are accessed by a seed
|
|
* number.
|
|
*/
|
|
virtual void GetSeedWorldPosition(unsigned int seedNum, double pos[3]);
|
|
virtual void SetSeedWorldPosition(unsigned int seedNum, double pos[3]);
|
|
virtual void SetSeedDisplayPosition(unsigned int seedNum, double pos[3]);
|
|
virtual void GetSeedDisplayPosition(unsigned int seedNum, double pos[3]);
|
|
//@}
|
|
|
|
/**
|
|
* Return the number of seeds (or handles) that have been created.
|
|
*/
|
|
int GetNumberOfSeeds();
|
|
|
|
/**
|
|
* This method is used to specify the type of handle representation to use
|
|
* for the internal vtkHandleWidgets within vtkSeedWidget. To use this
|
|
* method, create a dummy vtkHandleWidget (or subclass), and then invoke
|
|
* this method with this dummy. Then the vtkSeedRepresentation uses this
|
|
* dummy to clone vtkHandleWidgets of the same type. Make sure you set the
|
|
* handle representation before the widget is enabled.
|
|
*/
|
|
void SetHandleRepresentation(vtkHandleRepresentation* handle);
|
|
|
|
/**
|
|
* Get the handle representations used for a particular seed. A side effect of
|
|
* this method is that it will create a handle representation in the list of
|
|
* representations if one has not yet been created.
|
|
*/
|
|
vtkHandleRepresentation* GetHandleRepresentation(unsigned int num);
|
|
|
|
//@{
|
|
/**
|
|
* Returns the model HandleRepresentation.
|
|
*/
|
|
vtkHandleRepresentation* GetHandleRepresentation() { return this->HandleRepresentation; };
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* The tolerance representing the distance to the widget (in pixels) in
|
|
* which the cursor is considered near enough to the seed points of
|
|
* the widget to be active.
|
|
*/
|
|
vtkSetClampMacro(Tolerance, int, 1, 100);
|
|
vtkGetMacro(Tolerance, int);
|
|
//@}
|
|
|
|
// Used to communicate about the state of the representation
|
|
enum
|
|
{
|
|
Outside = 0,
|
|
NearSeed
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* These are methods specific to vtkSeedRepresentation and which are
|
|
* invoked from vtkSeedWidget.
|
|
*/
|
|
virtual int GetActiveHandle();
|
|
virtual void SetActiveHandle(int handleId);
|
|
// Returns the id of the seed created, -1 on failure. e is the display position.
|
|
virtual int CreateHandle(double e[2]);
|
|
// Delete last handle created
|
|
virtual void RemoveLastHandle();
|
|
// Delete the currently active handle
|
|
virtual void RemoveActiveHandle();
|
|
//@}
|
|
|
|
/**
|
|
* Remove the nth handle.
|
|
*/
|
|
virtual void RemoveHandle(int n);
|
|
|
|
//@{
|
|
/**
|
|
* These are methods that satisfy vtkWidgetRepresentation's API.
|
|
*/
|
|
void BuildRepresentation() override;
|
|
int ComputeInteractionState(int X, int Y, int modify = 0) override;
|
|
//@}
|
|
|
|
protected:
|
|
vtkSeedRepresentation();
|
|
~vtkSeedRepresentation() override;
|
|
|
|
// The handle and the rep used to close the handles
|
|
vtkHandleRepresentation* HandleRepresentation;
|
|
vtkHandleList* Handles;
|
|
|
|
// Selection tolerance for the handles
|
|
int Tolerance;
|
|
|
|
// The active seed (handle) based on the last ComputeInteractionState()
|
|
int ActiveHandle;
|
|
|
|
private:
|
|
vtkSeedRepresentation(const vtkSeedRepresentation&) = delete;
|
|
void operator=(const vtkSeedRepresentation&) = delete;
|
|
};
|
|
|
|
#endif
|