// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause /** * @class vtkPolyPlane * @brief Implicit function that is generated by extrusion of a polyline along the Z axis * * vtkPolyPlane is, as the name suggests, an extrusion of a vtkPolyLine. * The extrusion direction is assumed to be the Z vector. It can be used in * combination with a vtkCutter to cut a dataset with a polyplane. * vtkPolyPlane is a concrete implementation of the abstract class * vtkImplicitFunction. * * @todo * Generalize to extrusions along arbitrary directions. */ #ifndef vtkPolyPlane_h #define vtkPolyPlane_h #include "vtkCommonDataModelModule.h" // For export macro #include "vtkImplicitFunction.h" VTK_ABI_NAMESPACE_BEGIN class vtkPolyLine; class vtkDoubleArray; class VTKCOMMONDATAMODEL_EXPORT vtkPolyPlane : public vtkImplicitFunction { public: /** * Construct plane passing through origin and normal to z-axis. */ static vtkPolyPlane* New(); vtkTypeMacro(vtkPolyPlane, vtkImplicitFunction); void PrintSelf(ostream& os, vtkIndent indent) override; ///@{ /** * Evaluate plane equation for point x[3]. */ using vtkImplicitFunction::EvaluateFunction; double EvaluateFunction(double x[3]) override; ///@} /** * Evaluate function gradient at point x[3]. */ void EvaluateGradient(double x[3], double g[3]) override; ///@{ /** * Set/get point through which plane passes. Plane is defined by point * and normal. */ virtual void SetPolyLine(vtkPolyLine*); vtkGetObjectMacro(PolyLine, vtkPolyLine); ///@} /** * Override GetMTime to include the polyline */ vtkMTimeType GetMTime() override; protected: vtkPolyPlane(); ~vtkPolyPlane() override; void ComputeNormals(); double ExtrusionDirection[3]; vtkPolyLine* PolyLine; vtkTimeStamp NormalComputeTime; vtkDoubleArray* Normals; vtkIdType ClosestPlaneIdx; private: vtkPolyPlane(const vtkPolyPlane&) = delete; void operator=(const vtkPolyPlane&) = delete; }; VTK_ABI_NAMESPACE_END #endif