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.
208 lines
6.9 KiB
C++
208 lines
6.9 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkBalloonWidget.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 vtkBalloonWidget
|
|
* @brief popup text balloons above instance of vtkProp when hovering occurs
|
|
*
|
|
* The vtkBalloonWidget is used to popup text and/or an image when the mouse
|
|
* hovers over an instance of vtkProp. The widget keeps track of
|
|
* (vtkProp,vtkBalloon) pairs (where the internal vtkBalloon class is defined
|
|
* by a pair of vtkStdString and vtkImageData), and when the mouse stops
|
|
* moving for a user-specified period of time over the vtkProp, then the
|
|
* vtkBalloon is drawn nearby the vtkProp. Note that an instance of
|
|
* vtkBalloonRepresentation is used to draw the balloon.
|
|
*
|
|
* To use this widget, specify an instance of vtkBalloonWidget and a
|
|
* representation (e.g., vtkBalloonRepresentation). Then list all instances
|
|
* of vtkProp, a text string, and/or an instance of vtkImageData to be
|
|
* associated with each vtkProp. (Note that you can specify both text and an
|
|
* image, or just one or the other.) You may also wish to specify the hover
|
|
* delay (i.e., set in the superclass vtkHoverWidget).
|
|
*
|
|
* @par Event Bindings:
|
|
* By default, the widget observes the following VTK events (i.e., it
|
|
* watches the vtkRenderWindowInteractor for these events):
|
|
* <pre>
|
|
* MouseMoveEvent - occurs when mouse is moved in render window.
|
|
* TimerEvent - occurs when the time between events (e.g., mouse move)
|
|
* is greater than TimerDuration.
|
|
* KeyPressEvent - when the "Enter" key is pressed after the balloon appears,
|
|
* a callback is activated (e.g., WidgetActivateEvent).
|
|
* </pre>
|
|
*
|
|
* @par Event Bindings:
|
|
* Note that the event bindings described above can be changed using this
|
|
* class's vtkWidgetEventTranslator. This class translates VTK events
|
|
* into the vtkBalloonWidget's widget events:
|
|
* <pre>
|
|
* vtkWidgetEvent::Move -- start the timer
|
|
* vtkWidgetEvent::TimedOut -- when hovering occurs,
|
|
* vtkWidgetEvent::SelectAction -- activate any callbacks associated
|
|
* with the balloon.
|
|
* </pre>
|
|
*
|
|
* @par Event Bindings:
|
|
* This widget invokes the following VTK events on itself (which observers
|
|
* can listen for):
|
|
* <pre>
|
|
* vtkCommand::TimerEvent (when hovering is determined to occur)
|
|
* vtkCommand::EndInteractionEvent (after a hover has occurred and the
|
|
* mouse begins moving again).
|
|
* vtkCommand::WidgetActivateEvent (when the balloon is selected with a
|
|
* keypress).
|
|
* </pre>
|
|
*
|
|
* @sa
|
|
* vtkAbstractWidget
|
|
*/
|
|
|
|
#ifndef vtkBalloonWidget_h
|
|
#define vtkBalloonWidget_h
|
|
|
|
#include "vtkHoverWidget.h"
|
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
|
|
|
class vtkBalloonRepresentation;
|
|
class vtkProp;
|
|
class vtkAbstractPropPicker;
|
|
class vtkStdString;
|
|
class vtkPropMap;
|
|
class vtkImageData;
|
|
|
|
class VTKINTERACTIONWIDGETS_EXPORT vtkBalloonWidget : public vtkHoverWidget
|
|
{
|
|
public:
|
|
/**
|
|
* Instantiate this class.
|
|
*/
|
|
static vtkBalloonWidget* New();
|
|
|
|
//@{
|
|
/**
|
|
* Standard methods for a VTK class.
|
|
*/
|
|
vtkTypeMacro(vtkBalloonWidget, vtkHoverWidget);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
//@}
|
|
|
|
/**
|
|
* The method for activating and deactivating this widget. This method
|
|
* must be overridden because it performs special timer-related operations.
|
|
*/
|
|
void SetEnabled(int) override;
|
|
|
|
/**
|
|
* Specify an instance of vtkWidgetRepresentation used to represent this
|
|
* widget in the scene. Note that the representation is a subclass of vtkProp
|
|
* so it can be added to the renderer independent of the widget.
|
|
*/
|
|
void SetRepresentation(vtkBalloonRepresentation* r)
|
|
{
|
|
this->Superclass::SetWidgetRepresentation(reinterpret_cast<vtkWidgetRepresentation*>(r));
|
|
}
|
|
|
|
/**
|
|
* Return the representation as a vtkBalloonRepresentation.
|
|
*/
|
|
vtkBalloonRepresentation* GetBalloonRepresentation()
|
|
{
|
|
return reinterpret_cast<vtkBalloonRepresentation*>(this->WidgetRep);
|
|
}
|
|
|
|
/**
|
|
* Create the default widget representation if one is not set.
|
|
*/
|
|
void CreateDefaultRepresentation() override;
|
|
|
|
//@{
|
|
/**
|
|
* Add and remove text and/or an image to be associated with a vtkProp. You
|
|
* may add one or both of them.
|
|
*/
|
|
void AddBalloon(vtkProp* prop, vtkStdString* str, vtkImageData* img);
|
|
void AddBalloon(vtkProp* prop, const char* str, vtkImageData* img);
|
|
void AddBalloon(vtkProp* prop, const char* str) // for wrapping
|
|
{
|
|
this->AddBalloon(prop, str, nullptr);
|
|
}
|
|
void RemoveBalloon(vtkProp* prop);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Methods to retrieve the information associated with each vtkProp (i.e.,
|
|
* the information that makes up each balloon). A nullptr will be returned if
|
|
* the vtkProp does not exist, or if a string or image have not been
|
|
* associated with the specified vtkProp.
|
|
*/
|
|
const char* GetBalloonString(vtkProp* prop);
|
|
vtkImageData* GetBalloonImage(vtkProp* prop);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Update the balloon string or image. If the specified prop does not exist,
|
|
* then nothing is added not changed.
|
|
*/
|
|
void UpdateBalloonString(vtkProp* prop, const char* str);
|
|
void UpdateBalloonImage(vtkProp* prop, vtkImageData* image);
|
|
//@}
|
|
|
|
/**
|
|
* Return the current vtkProp that is being hovered over. Note that the
|
|
* value may be nullptr (if hovering over nothing or the mouse is moving).
|
|
*/
|
|
virtual vtkProp* GetCurrentProp() { return this->CurrentProp; }
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the object used to perform pick operations. Since the
|
|
* vtkBalloonWidget operates on vtkProps, the picker must be a subclass of
|
|
* vtkAbstractPropPicker. (Note: if not specified, an instance of
|
|
* vtkPropPicker is used.)
|
|
*/
|
|
void SetPicker(vtkAbstractPropPicker*);
|
|
vtkGetObjectMacro(Picker, vtkAbstractPropPicker);
|
|
//@}
|
|
|
|
/*
|
|
* Register internal Pickers within PickingManager
|
|
*/
|
|
void RegisterPickers() override;
|
|
|
|
protected:
|
|
vtkBalloonWidget();
|
|
~vtkBalloonWidget() override;
|
|
|
|
// This class implements the method called from its superclass.
|
|
int SubclassEndHoverAction() override;
|
|
int SubclassHoverAction() override;
|
|
|
|
// Classes for managing balloons
|
|
vtkPropMap* PropMap; // PIMPL'd map of (vtkProp,vtkStdString)
|
|
|
|
// Support for picking
|
|
vtkAbstractPropPicker* Picker;
|
|
|
|
// The vtkProp that is being hovered over (which may be nullptr)
|
|
vtkProp* CurrentProp;
|
|
|
|
private:
|
|
vtkBalloonWidget(const vtkBalloonWidget&) = delete;
|
|
void operator=(const vtkBalloonWidget&) = delete;
|
|
};
|
|
|
|
#endif
|