File: vtkVRControlsHelper.h

package info (click to toggle)
paraview 5.11.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 497,236 kB
  • sloc: cpp: 3,171,290; ansic: 1,315,072; python: 134,290; xml: 103,324; sql: 65,887; sh: 5,286; javascript: 4,901; yacc: 4,383; java: 3,977; perl: 2,363; lex: 1,909; f90: 1,255; objc: 143; makefile: 119; tcl: 59; pascal: 50; fortran: 29
file content (164 lines) | stat: -rw-r--r-- 3,954 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*=========================================================================

Program:   Visualization Toolkit
Module:    vtkVRControlsHelper.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   vtkVRControlsHelper
 * @brief   Tooltip helper explaining controls
 * Helper class to draw one tooltip per button around the controller.
 *
 * @sa
 * vtkVRPanelRepresentation
 */

#ifndef vtkVRControlsHelper_h
#define vtkVRControlsHelper_h

#include "vtkEventData.h" // for vtkEventDataDevice
#include "vtkNew.h"       // for iVar
#include "vtkProp.h"
#include "vtkRenderingVRModule.h" // For export macro
#include "vtkWeakPointer.h"       // needed for vtkWeakPointer iVar.
#include <string>                 // for std::string

VTK_ABI_NAMESPACE_BEGIN
class vtkActor;
class vtkCallbackCommand;
class vtkLineSource;
class vtkPolyDataMapper;
class vtkRenderer;
class vtkTextActor3D;
class vtkTransform;

class VTKRENDERINGVR_EXPORT vtkVRControlsHelper : public vtkProp
{
public:
  ///@{
  /**
   * Standard methods for the class.
   */
  vtkTypeMacro(vtkVRControlsHelper, vtkProp);
  void PrintSelf(ostream& os, vtkIndent indent) override;
  ///@}

  enum ButtonSides
  {
    Back = -1,
    Front = 1
  };

  enum DrawSides
  {
    Left = -1,
    Right = 1
  };

  ///@{
  /**
   * Methods to interface with the vtkVRPanelWidget.
   */
  void BuildRepresentation();
  void UpdateRepresentation();
  ///@}

  ///@{
  /**
   * Methods supporting the rendering process.
   */
  void ReleaseGraphicsResources(vtkWindow*) override;
  int RenderOpaqueGeometry(vtkViewport*) override;
  int RenderTranslucentPolygonalGeometry(vtkViewport*) override;
  vtkTypeBool HasTranslucentPolygonalGeometry() override;
  ///@}

  ///@{
  /**
   * Set Tooltip text (used by TextActor)
   */
  void SetText(const std::string& str);
  ///@}

  void SetTooltipInfo(const char* s, int buttonSide, int drawSide, const char* txt)
  {
    if (!s || !txt)
    {
      return;
    }
    this->ComponentName = std::string(s);
    this->DrawSide = drawSide;
    this->ButtonSide = buttonSide;
    this->SetText(std::string(txt));
  }

  void SetEnabled(bool enabled);
  vtkGetMacro(Enabled, bool);
  vtkBooleanMacro(Enabled, bool);

  void SetDevice(vtkEventDataDevice val);

  virtual void SetRenderer(vtkRenderer* ren);
  virtual vtkRenderer* GetRenderer();

protected:
  vtkVRControlsHelper();
  ~vtkVRControlsHelper() override;

  double FrameSize[2];

  // The text
  vtkTextActor3D* TextActor;
  std::string Text;

  // The line
  vtkLineSource* LineSource;
  vtkPolyDataMapper* LineMapper;
  vtkActor* LineActor;

  vtkEventDataDevice Device;

  // Tooltip parameters
  std::string ComponentName;
  int DrawSide;   // Left/Right
  int ButtonSide; // Front/Back

  bool Enabled;

  double ControlPositionLC[3];

  // The renderer in which this widget is placed
  vtkWeakPointer<vtkRenderer> Renderer;

  vtkCallbackCommand* MoveCallbackCommand;
  unsigned long ObserverTag;
  static void MoveEvent(vtkObject* object, unsigned long event, void* clientdata, void* calldata);

  /**
   * Must be overridden in subclasses to init the member variable
   * ControlPositionLC to position the tooltip on the component.
   */
  virtual void InitControlPosition() = 0;

  vtkNew<vtkTransform> TempTransform;
  double LastPhysicalTranslation[3];
  double LastEventPosition[3];
  double LastEventOrientation[4];
  bool NeedUpdate;
  bool LabelVisible;

private:
  vtkVRControlsHelper(const vtkVRControlsHelper&) = delete;
  void operator=(const vtkVRControlsHelper&) = delete;
};

VTK_ABI_NAMESPACE_END
#endif