VTK  9.4.20251007
vtkViewport.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
25
26#ifndef vtkViewport_h
27#define vtkViewport_h
28
29#include "vtkObject.h"
30#include "vtkRenderingCoreModule.h" // For export macro
31#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
32
33#include "vtkSelection.h" // Needed for selection
34#include "vtkSmartPointer.h" // Needed for assigning default nullptr value
35
36#include <array> // To store matrices
37
38VTK_ABI_NAMESPACE_BEGIN
40class vtkAssemblyPath;
41class vtkProp;
43class vtkWindow;
44
45class VTKRENDERINGCORE_EXPORT VTK_MARSHALAUTO vtkViewport : public vtkObject
46{
47public:
48 vtkTypeMacro(vtkViewport, vtkObject);
49 void PrintSelf(ostream& os, vtkIndent indent) override;
50
58
63
68
75
81
83
95
97
101 vtkSetVector3Macro(Background, double);
102 vtkGetVector3Macro(Background, double);
104
106
110 vtkSetVector3Macro(Background2, double);
111 vtkGetVector3Macro(Background2, double);
113 //
114
116
120 vtkSetClampMacro(BackgroundAlpha, double, 0.0, 1.0);
121 vtkGetMacro(BackgroundAlpha, double);
123
125
130 vtkSetMacro(GradientBackground, bool);
131 vtkGetMacro(GradientBackground, bool);
132 vtkBooleanMacro(GradientBackground, bool);
134
136
141 vtkSetMacro(DitherGradient, bool);
142 vtkGetMacro(DitherGradient, bool);
143 vtkBooleanMacro(DitherGradient, bool);
145
146 enum class GradientModes : int
147 {
148 // Background color is used at the bottom, Background2 color is used at the top.
150 // Background color on the left, Background2 color on the right.
152 // Background color in the center, Background2 color on and beyond the ellipse edge.
153 // Ellipse touches all sides of the viewport. The ellipse is a circle for viewports with equal
154 // width and height.
156 // Background color in the center, Background2 color on and beyond the ellipse edge.
157 // Ellipse touches all corners of the viewport. The ellipse is a circle for viewports with equal
158 // width and height.
160 };
161
163
171
173
177 vtkSetVector2Macro(Aspect, double);
178 vtkGetVectorMacro(Aspect, double, 2);
179 virtual void ComputeAspect();
181
183
188 vtkSetVector2Macro(PixelAspect, double);
189 vtkGetVectorMacro(PixelAspect, double, 2);
191
193
198 vtkSetVector4Macro(Viewport, double);
199 vtkGetVectorMacro(Viewport, double, 4);
201
203
208 vtkSetVector3Macro(DisplayPoint, double);
209 vtkGetVectorMacro(DisplayPoint, double, 3);
211
213
218 vtkSetVector3Macro(ViewPoint, double);
219 vtkGetVectorMacro(ViewPoint, double, 3);
221
223
227 vtkSetVector4Macro(WorldPoint, double);
228 vtkGetVectorMacro(WorldPoint, double, 4);
230
234 virtual double* GetCenter() VTK_SIZEHINT(2);
235
239 virtual vtkTypeBool IsInViewport(int x, int y);
240
244 virtual vtkWindow* GetVTKWindow() = 0;
245
249 virtual void DisplayToView(); // these get modified in subclasses
250
254 virtual void ViewToDisplay(); // to handle stereo rendering
255
259 virtual void WorldToView();
260
264 virtual void ViewToWorld();
265
270 {
271 this->DisplayToView();
272 this->ViewToWorld();
273 }
274
279 {
280 this->WorldToView();
281 this->ViewToDisplay();
282 }
283
287 inline void WorldToDisplay(double& x, double& y, double& z)
288 {
289 this->WorldToView(x, y, z);
290 this->ViewToDisplay(x, y, z);
291 }
292
294
301 virtual void LocalDisplayToDisplay(double& x, double& y);
302 virtual void DisplayToNormalizedDisplay(double& u, double& v);
303 virtual void NormalizedDisplayToViewport(double& x, double& y);
304 virtual void ViewportToNormalizedViewport(double& u, double& v);
305 virtual void NormalizedViewportToView(double& x, double& y, double& z);
306 virtual void ViewToPose(double&, double&, double&) {}
307 virtual void PoseToWorld(double&, double&, double&) {}
308 virtual void DisplayToLocalDisplay(double& x, double& y);
309 virtual void NormalizedDisplayToDisplay(double& u, double& v);
310 virtual void ViewportToNormalizedDisplay(double& x, double& y);
311 virtual void NormalizedViewportToViewport(double& u, double& v);
312 virtual void ViewToNormalizedViewport(double& x, double& y, double& z);
313 virtual void PoseToView(double&, double&, double&) {}
314 virtual void WorldToPose(double&, double&, double&) {}
315 virtual void ViewToWorld(double&, double&, double&) {}
316 virtual void WorldToView(double&, double&, double&) {}
317 virtual void ViewToDisplay(double& x, double& y, double& z);
319
321
326 virtual int* GetSize() VTK_SIZEHINT(2);
327 virtual int* GetOrigin() VTK_SIZEHINT(2);
328 void GetTiledSize(int* width, int* height);
329 virtual void GetTiledSizeAndOrigin(int* width, int* height, int* lowerLeftX, int* lowerLeftY);
331
332 // The following methods describe the public pick interface for picking
333 // Props in a viewport without/with setting fieldAssociation and selection.
334
341 virtual vtkAssemblyPath* PickProp(double selectionX, double selectionY) = 0;
342
351 double selectionX1, double selectionY1, double selectionX2, double selectionY2) = 0;
352
358 vtkAssemblyPath* PickPropFrom(double selectionX, double selectionY, vtkPropCollection*);
359
365 vtkAssemblyPath* PickPropFrom(double selectionX1, double selectionY1, double selectionX2,
366 double selectionY2, vtkPropCollection*);
367
376 virtual vtkAssemblyPath* PickProp(double selectionX, double selectionY, int fieldAssociation,
377 vtkSmartPointer<vtkSelection> selection) = 0;
378
388 virtual vtkAssemblyPath* PickProp(double selectionX1, double selectionY1, double selectionX2,
389 double selectionY2, int fieldAssociation, vtkSmartPointer<vtkSelection> selection) = 0;
390
398 vtkAssemblyPath* PickPropFrom(double selectionX, double selectionY, vtkPropCollection*,
399 int fieldAssociation, vtkSmartPointer<vtkSelection> selection);
400
408 vtkAssemblyPath* PickPropFrom(double selectionX1, double selectionY1, double selectionX2,
409 double selectionY2, vtkPropCollection*, int fieldAssociation,
410 vtkSmartPointer<vtkSelection> selection);
411
413
417 double GetPickX() const { return (this->PickX1 + this->PickX2) * 0.5; }
418 double GetPickY() const { return (this->PickY1 + this->PickY2) * 0.5; }
419 double GetPickWidth() const { return this->PickX2 - this->PickX1 + 1; }
420 double GetPickHeight() const { return this->PickY2 - this->PickY1 + 1; }
421 double GetPickX1() const { return this->PickX1; }
422 double GetPickY1() const { return this->PickY1; }
423 double GetPickX2() const { return this->PickX2; }
424 double GetPickY2() const { return this->PickY2; }
428
432 virtual double GetPickedZ() { return this->PickedZ; }
433
435
439 vtkSetVector3Macro(EnvironmentalBG, double);
440 vtkGetVector3Macro(EnvironmentalBG, double);
442
444
448 vtkSetVector3Macro(EnvironmentalBG2, double);
449 vtkGetVector3Macro(EnvironmentalBG2, double);
452
458 vtkSetMacro(GradientEnvironmentalBG, bool);
459 vtkGetMacro(GradientEnvironmentalBG, bool);
460 vtkBooleanMacro(GradientEnvironmentalBG, bool);
462
463protected:
464 // Create a vtkViewport with a black background, a white ambient light,
465 // two-sided lighting turned on, a viewport of (0,0,1,1), and back face
466 // culling turned off.
468 ~vtkViewport() override;
469
470 // Ivars for picking
471 // Store a picked Prop (contained in an assembly path)
475 double PickX1;
476 double PickY1;
477 double PickX2;
478 double PickY2;
479 double PickedZ;
480 // End Ivars for picking
481
485 double Background[3];
486 double Background2[3];
488 double Viewport[4];
489 double Aspect[2];
490 double PixelAspect[2];
491 double Center[2];
495
499
500 int Size[2];
501 int Origin[2];
502 double DisplayPoint[3];
503 double ViewPoint[3];
504 double WorldPoint[4];
505
506private:
507 std::array<int, 2> LastComputeAspectSize;
508 std::array<double, 4> LastComputeAspectVPort;
509 std::array<double, 2> LastComputeAspectPixelAspect;
510
511 vtkViewport(const vtkViewport&) = delete;
512 void operator=(const vtkViewport&) = delete;
513};
514
515VTK_ABI_NAMESPACE_END
516#endif
a list of 2D actors
a list of nodes that form an assembly path
a simple class to control print indentation
Definition vtkIndent.h:29
an ordered list of Props
abstract superclass for all actors, volumes and annotations
Definition vtkProp.h:47
data object that represents a "selection" in VTK.
Hold a reference to a vtkObjectBase instance.
virtual vtkWindow * GetVTKWindow()=0
Return the vtkWindow that owns this vtkViewport.
double GetPickY2() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
virtual void ViewToWorld(double &, double &, double &)
These methods map from one coordinate system to another.
double GetPickX1() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
vtkPropCollection * Props
double GetPickX() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
double WorldPoint[4]
void WorldToDisplay(double &x, double &y, double &z)
Convert world point coordinates to display (or screen) coordinates.
vtkTypeBool HasViewProp(vtkProp *)
Query if a prop is in the list of props.
double Aspect[2]
virtual void WorldToView()
Convert world point coordinates to view coordinates.
virtual void DisplayToLocalDisplay(double &x, double &y)
These methods map from one coordinate system to another.
virtual void WorldToPose(double &, double &, double &)
These methods map from one coordinate system to another.
void WorldToDisplay()
Convert world point coordinates to display (or screen) coordinates.
~vtkViewport() override
vtkAssemblyPath * PickedProp
virtual void ViewToNormalizedViewport(double &x, double &y, double &z)
These methods map from one coordinate system to another.
virtual double * GetCenter()
Return the center of this viewport in display coordinates.
vtkPropCollection * GetViewProps()
Return any props in this viewport.
Definition vtkViewport.h:62
double PickX2
vtkGetEnumMacro(GradientMode, GradientModes)
Specify the direction of the gradient background.
virtual void DisplayToView()
Convert display coordinates to view coordinates.
double EnvironmentalBG2[3]
bool GradientBackground
double DisplayPoint[3]
double Background2[3]
virtual void ViewToPose(double &, double &, double &)
These methods map from one coordinate system to another.
double Background[3]
double GetPickX2() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
void DisplayToWorld()
Convert display (or screen) coordinates to world coordinates.
vtkActor2DCollection * Actors2D
double GetPickHeight() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
virtual void NormalizedDisplayToViewport(double &x, double &y)
These methods map from one coordinate system to another.
void RemoveActor2D(vtkProp *p)
Add/Remove different types of props to the renderer.
virtual void PoseToWorld(double &, double &, double &)
These methods map from one coordinate system to another.
double ViewPoint[3]
vtkWindow * VTKWindow
virtual void ComputeAspect()
Set the aspect ratio of the rendered image.
vtkPropCollection * PickResultProps
virtual int * GetSize()
Get the size and origin of the viewport in display coordinates.
double BackgroundAlpha
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void NormalizedViewportToView(double &x, double &y, double &z)
These methods map from one coordinate system to another.
virtual vtkTypeBool IsInViewport(int x, int y)
Is a given display point in this Viewport's viewport.
double EnvironmentalBG[3]
virtual int * GetOrigin()
Get the size and origin of the viewport in display coordinates.
void AddActor2D(vtkProp *p)
Add/Remove different types of props to the renderer.
double Viewport[4]
vtkAssemblyPath * PickPropFrom(double selectionX, double selectionY, vtkPropCollection *)
Same as PickProp with two arguments, but selects from the given collection of Props instead of the Re...
virtual void ViewportToNormalizedDisplay(double &x, double &y)
These methods map from one coordinate system to another.
double PickX1
vtkSetEnumMacro(GradientMode, GradientModes)
Specify the direction of the gradient background.
vtkActor2DCollection * GetActors2D()
Add/Remove different types of props to the renderer.
virtual void LocalDisplayToDisplay(double &x, double &y)
These methods map from one coordinate system to another.
void AddViewProp(vtkProp *)
Add a prop to the list of props.
GradientModes GradientMode
vtkPropCollection * PickFromProps
virtual void NormalizedDisplayToDisplay(double &u, double &v)
These methods map from one coordinate system to another.
bool GradientEnvironmentalBG
virtual double GetPickedZ()
Return the Z value for the last picked Prop.
virtual void GetTiledSizeAndOrigin(int *width, int *height, int *lowerLeftX, int *lowerLeftY)
Get the size and origin of the viewport in display coordinates.
double GetPickWidth() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
int Origin[2]
double PickY1
void RemoveAllViewProps()
Remove all props from the list of props.
double GetPickY() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
double PixelAspect[2]
virtual void DisplayToNormalizedDisplay(double &u, double &v)
These methods map from one coordinate system to another.
virtual vtkAssemblyPath * PickProp(double selectionX, double selectionY)=0
Return the Prop that has the highest z value at the given x, y position in the viewport.
virtual void ViewToDisplay(double &x, double &y, double &z)
These methods map from one coordinate system to another.
virtual void NormalizedViewportToViewport(double &u, double &v)
These methods map from one coordinate system to another.
void RemoveViewProp(vtkProp *)
Remove a prop from the list of props.
virtual void ViewToWorld()
Convert view point coordinates to world coordinates.
bool DitherGradient
void GetTiledSize(int *width, int *height)
Get the size and origin of the viewport in display coordinates.
virtual void PoseToView(double &, double &, double &)
These methods map from one coordinate system to another.
double PickY2
double Center[2]
virtual void ViewToDisplay()
Convert view coordinates to display coordinates.
virtual void ViewportToNormalizedViewport(double &u, double &v)
These methods map from one coordinate system to another.
double GetPickY1() const
Methods used to return the pick (x,y) in local display coordinates (i.e., it's that same as selection...
virtual void WorldToView(double &, double &, double &)
These methods map from one coordinate system to another.
double PickedZ
window superclass for vtkRenderWindow
Definition vtkWindow.h:29
int vtkTypeBool
Definition vtkABI.h:64
#define VTK_SIZEHINT(...)
#define VTK_MARSHAL_EXCLUDE_REASON_IS_INTERNAL
#define VTK_MARSHALAUTO
#define VTK_MARSHALEXCLUDE(reason)