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.
137 lines
4.3 KiB
C
137 lines
4.3 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkSplineRepresentation.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 vtkSplineRepresentation
|
||
|
* @brief representation for a spline.
|
||
|
*
|
||
|
* vtkSplineRepresentation is a vtkWidgetRepresentation for a spline.
|
||
|
* This 3D widget defines a spline that can be interactively placed in a
|
||
|
* scene. The spline has handles, the number of which can be changed, plus it
|
||
|
* can be picked on the spline itself to translate or rotate it in the scene.
|
||
|
* This is based on vtkSplineWidget.
|
||
|
* @sa
|
||
|
* vtkSplineWidget, vtkSplineWidget2
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkSplineRepresentation_h
|
||
|
#define vtkSplineRepresentation_h
|
||
|
|
||
|
#include "vtkCurveRepresentation.h"
|
||
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
||
|
|
||
|
class vtkActor;
|
||
|
class vtkCellPicker;
|
||
|
class vtkDoubleArray;
|
||
|
class vtkParametricFunctionSource;
|
||
|
class vtkParametricSpline;
|
||
|
class vtkPlaneSource;
|
||
|
class vtkPoints;
|
||
|
class vtkPolyData;
|
||
|
class vtkProp;
|
||
|
class vtkProperty;
|
||
|
class vtkSphereSource;
|
||
|
class vtkTransform;
|
||
|
|
||
|
class VTKINTERACTIONWIDGETS_EXPORT vtkSplineRepresentation : public vtkCurveRepresentation
|
||
|
{
|
||
|
public:
|
||
|
static vtkSplineRepresentation* New();
|
||
|
vtkTypeMacro(vtkSplineRepresentation, vtkCurveRepresentation);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
/**
|
||
|
* Grab the polydata (including points) that defines the spline. The
|
||
|
* polydata consists of points and line segments numbering Resolution + 1
|
||
|
* and Resolution, respectively. Points are guaranteed to be up-to-date when
|
||
|
* either the InteractionEvent or EndInteraction events are invoked. The
|
||
|
* user provides the vtkPolyData and the points and polyline are added to it.
|
||
|
*/
|
||
|
void GetPolyData(vtkPolyData* pd) override;
|
||
|
|
||
|
/**
|
||
|
* Set the number of handles for this widget.
|
||
|
*/
|
||
|
void SetNumberOfHandles(int npts) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/Get the number of line segments representing the spline for
|
||
|
* this widget.
|
||
|
*/
|
||
|
void SetResolution(int resolution);
|
||
|
vtkGetMacro(Resolution, int);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set the parametric spline object. Through vtkParametricSpline's API, the
|
||
|
* user can supply and configure one of two types of spline:
|
||
|
* vtkCardinalSpline, vtkKochanekSpline. The widget controls the open
|
||
|
* or closed configuration of the spline.
|
||
|
* WARNING: The widget does not enforce internal consistency so that all
|
||
|
* three are of the same type.
|
||
|
*/
|
||
|
virtual void SetParametricSpline(vtkParametricSpline*);
|
||
|
vtkGetObjectMacro(ParametricSpline, vtkParametricSpline);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Get the position of the spline handles.
|
||
|
*/
|
||
|
vtkDoubleArray* GetHandlePositions() override;
|
||
|
|
||
|
/**
|
||
|
* Get the approximate vs. the true arc length of the spline. Calculated as
|
||
|
* the summed lengths of the individual straight line segments. Use
|
||
|
* SetResolution to control the accuracy.
|
||
|
*/
|
||
|
double GetSummedLength() override;
|
||
|
|
||
|
/**
|
||
|
* Convenience method to allocate and set the handles from a vtkPoints
|
||
|
* instance. If the first and last points are the same, the spline sets
|
||
|
* Closed to the on InteractionState and disregards the last point, otherwise Closed
|
||
|
* remains unchanged.
|
||
|
*/
|
||
|
void InitializeHandles(vtkPoints* points) override;
|
||
|
|
||
|
/**
|
||
|
* These are methods that satisfy vtkWidgetRepresentation's API. Note that a
|
||
|
* version of place widget is available where the center and handle position
|
||
|
* are specified.
|
||
|
*/
|
||
|
void BuildRepresentation() override;
|
||
|
|
||
|
protected:
|
||
|
vtkSplineRepresentation();
|
||
|
~vtkSplineRepresentation() override;
|
||
|
|
||
|
// The spline
|
||
|
vtkParametricSpline* ParametricSpline;
|
||
|
vtkParametricFunctionSource* ParametricFunctionSource;
|
||
|
|
||
|
// The number of line segments used to represent the spline.
|
||
|
int Resolution;
|
||
|
|
||
|
// Specialized method to insert a handle on the poly line.
|
||
|
int InsertHandleOnLine(double* pos) override;
|
||
|
|
||
|
private:
|
||
|
vtkSplineRepresentation(const vtkSplineRepresentation&) = delete;
|
||
|
void operator=(const vtkSplineRepresentation&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|