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.

170 lines
5.2 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkContext3D.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 vtkContext3D
* @brief Class for drawing 3D primitives to a graphical context.
*
*
* This defines the interface for drawing onto a 3D context. The context must
* be set up with a vtkContextDevice3D derived class that provides the functions
* to facilitate the low level calls to the context. Currently only an OpenGL
* based device is provided.
*/
#ifndef vtkContext3D_h
#define vtkContext3D_h
#include "vtkObject.h"
#include "vtkRenderingContext2DModule.h" // For export macro
#include "vtkSmartPointer.h" // For SP ivars.
#include "vtkVector.h" // For the vector coordinates.
class vtkContextDevice3D;
class vtkPen;
class vtkBrush;
class vtkTransform;
class VTKRENDERINGCONTEXT2D_EXPORT vtkContext3D : public vtkObject
{
public:
vtkTypeMacro(vtkContext3D, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Creates a 3D context object.
*/
static vtkContext3D* New();
/**
* Begin painting on a vtkContextDevice3D, no painting can occur before this
* call has been made. Only one painter is allowed at a time on any given
* paint device. Returns true if successful, otherwise false.
*/
bool Begin(vtkContextDevice3D* device);
/**
* Get access to the underlying 3D context.
*/
vtkContextDevice3D* GetDevice();
/**
* Ends painting on the device, you would not usually need to call this as it
* should be called by the destructor. Returns true if the painter is no
* longer active, otherwise false.
*/
bool End();
/**
* Draw a line between the specified points.
*/
void DrawLine(const vtkVector3f& start, const vtkVector3f& end);
/**
* Draw a poly line between the specified points.
*/
void DrawPoly(const float* points, int n);
/**
* Draw a point at the point in 3D space.
*/
void DrawPoint(const vtkVector3f& point);
/**
* Draw a sequence of points at the specified locations.
*/
void DrawPoints(const float* points, int n);
/**
* Draw a sequence of points at the specified locations. The points will be
* colored by the colors array, which must have nc_comps components
* (defining a single color).
*/
void DrawPoints(const float* points, int n, unsigned char* colors, int nc_comps);
/**
* Draw triangles to generate the specified mesh.
*/
void DrawTriangleMesh(const float* mesh, int n, const unsigned char* colors, int nc);
/**
* Apply the supplied pen which controls the outlines of shapes, as well as
* lines, points and related primitives. This makes a deep copy of the vtkPen
* object in the vtkContext2D, it does not hold a pointer to the supplied object.
*/
void ApplyPen(vtkPen* pen);
/**
* Apply the supplied brush which controls the outlines of shapes, as well as
* lines, points and related primitives. This makes a deep copy of the vtkBrush
* object in the vtkContext2D, it does not hold a pointer to the supplied object.
*/
void ApplyBrush(vtkBrush* brush);
/**
* Set the transform for the context, the underlying device will use the
* matrix of the transform. Note, this is set immediately, later changes to
* the matrix will have no effect until it is set again.
*/
void SetTransform(vtkTransform* transform);
/**
* Compute the current transform applied to the context.
*/
vtkTransform* GetTransform();
/**
* Append the transform for the context, the underlying device will use the
* matrix of the transform. Note, this is set immediately, later changes to
* the matrix will have no effect until it is set again. The matrix of the
* transform will multiply the current context transform.
*/
void AppendTransform(vtkTransform* transform);
//@{
/**
* Push/pop the transformation matrix for the painter (sets the underlying
* matrix for the device when available).
*/
void PushMatrix();
void PopMatrix();
//@}
//@{
/**
* Enable/Disable the specified clipping plane.
* i is the index of the clipping plane being enabled or disabled (0 - 5).
* planeEquation points to the four coefficients of the equation for the
* clipping plane: Ax + By + Cz + D = 0. This is the equation format
* expected by glClipPlane.
*/
void EnableClippingPlane(int i, double* planeEquation);
void DisableClippingPlane(int i);
//@}
protected:
vtkContext3D();
~vtkContext3D() override;
vtkSmartPointer<vtkContextDevice3D> Device; // The underlying device
vtkSmartPointer<vtkTransform> Transform; // Current transform
private:
vtkContext3D(const vtkContext3D&) = delete;
void operator=(const vtkContext3D&) = delete;
};
#endif // VTKCONTEXT3D_H