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.
188 lines
5.6 KiB
C++
188 lines
5.6 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkPointsProjectedHull.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.
|
|
|
|
=========================================================================*/
|
|
/*----------------------------------------------------------------------------
|
|
Copyright (c) Sandia Corporation
|
|
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
|
|
----------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* @class vtkPointsProjectedHull
|
|
* @brief the convex hull of the orthogonal
|
|
* projection of the vtkPoints in the 3 coordinate directions
|
|
*
|
|
* a subclass of vtkPoints, it maintains the counter clockwise
|
|
* convex hull of the points (projected orthogonally in the
|
|
* three coordinate directions) and has a method to
|
|
* test for intersection of that hull with an axis aligned
|
|
* rectangle. This is used for intersection tests of 3D volumes.
|
|
*/
|
|
|
|
#ifndef vtkPointsProjectedHull_h
|
|
#define vtkPointsProjectedHull_h
|
|
|
|
#include "vtkCommonDataModelModule.h" // For export macro
|
|
#include "vtkPoints.h"
|
|
|
|
class VTKCOMMONDATAMODEL_EXPORT vtkPointsProjectedHull : public vtkPoints
|
|
{
|
|
vtkTypeMacro(vtkPointsProjectedHull, vtkPoints);
|
|
|
|
public:
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
static vtkPointsProjectedHull* New();
|
|
|
|
/**
|
|
* determine whether the resulting rectangle intersects the
|
|
* convex hull of the projection of the points along that axis.
|
|
*/
|
|
|
|
int RectangleIntersectionX(vtkPoints* R);
|
|
|
|
/**
|
|
* the convex hull of the projection of the points along the
|
|
* positive X-axis.
|
|
*/
|
|
|
|
int RectangleIntersectionX(float ymin, float ymax, float zmin, float zmax);
|
|
int RectangleIntersectionX(double ymin, double ymax, double zmin, double zmax);
|
|
|
|
/**
|
|
* of the parallel projection along the Y axis of the points
|
|
*/
|
|
|
|
int RectangleIntersectionY(vtkPoints* R);
|
|
|
|
/**
|
|
* the convex hull of the projection of the points along the
|
|
* positive Y-axis.
|
|
*/
|
|
|
|
int RectangleIntersectionY(float zmin, float zmax, float xmin, float xmax);
|
|
int RectangleIntersectionY(double zmin, double zmax, double xmin, double xmax);
|
|
|
|
/**
|
|
* of the parallel projection along the Z axis of the points
|
|
*/
|
|
|
|
int RectangleIntersectionZ(vtkPoints* R);
|
|
|
|
/**
|
|
* the convex hull of the projection of the points along the
|
|
* positive Z-axis.
|
|
*/
|
|
|
|
int RectangleIntersectionZ(float xmin, float xmax, float ymin, float ymax);
|
|
int RectangleIntersectionZ(double xmin, double xmax, double ymin, double ymax);
|
|
|
|
/**
|
|
* Returns the coordinates (y,z) of the points in the convex hull
|
|
* of the projection of the points down the positive x-axis. pts has
|
|
* storage for len*2 values.
|
|
*/
|
|
|
|
int GetCCWHullX(float* pts, int len);
|
|
int GetCCWHullX(double* pts, int len);
|
|
|
|
/**
|
|
* Returns the coordinates (z, x) of the points in the convex hull
|
|
* of the projection of the points down the positive y-axis. pts has
|
|
* storage for len*2 values.
|
|
*/
|
|
|
|
int GetCCWHullY(float* pts, int len);
|
|
int GetCCWHullY(double* pts, int len);
|
|
|
|
/**
|
|
* Returns the coordinates (x, y) of the points in the convex hull
|
|
* of the projection of the points down the positive z-axis. pts has
|
|
* storage for len*2 values.
|
|
*/
|
|
|
|
int GetCCWHullZ(float* pts, int len);
|
|
int GetCCWHullZ(double* pts, int len);
|
|
|
|
/**
|
|
* Returns the number of points in the convex hull of the projection
|
|
* of the points down the positive x-axis
|
|
*/
|
|
|
|
int GetSizeCCWHullX();
|
|
|
|
/**
|
|
* Returns the number of points in the convex hull of the projection
|
|
* of the points down the positive y-axis
|
|
*/
|
|
|
|
int GetSizeCCWHullY();
|
|
|
|
/**
|
|
* Returns the number of points in the convex hull of the projection
|
|
* of the points down the positive z-axis
|
|
*/
|
|
|
|
int GetSizeCCWHullZ();
|
|
|
|
void Initialize() override;
|
|
void Reset() override { this->Initialize(); }
|
|
|
|
/**
|
|
* Forces recalculation of convex hulls, use this if
|
|
* you delete/add points
|
|
*/
|
|
|
|
void Update();
|
|
|
|
protected:
|
|
vtkPointsProjectedHull();
|
|
~vtkPointsProjectedHull() override;
|
|
|
|
private:
|
|
int RectangleIntersection(double hmin, double hmax, double vmin, double vmax, int direction);
|
|
int GrahamScanAlgorithm(int direction);
|
|
void GetPoints();
|
|
int RectangleBoundingBoxIntersection(
|
|
double hmin, double hmax, double vmin, double vmax, int direction);
|
|
int RectangleOutside(double hmin, double hmax, double vmin, double vmax, int direction);
|
|
|
|
int RectangleOutside1DPolygon(double hmin, double hmax, double vmin, double vmax, int dir);
|
|
|
|
void InitFlags();
|
|
void ClearAllocations();
|
|
|
|
static int RemoveExtras(double* pts, int n);
|
|
static double Distance(double* p1, double* p2);
|
|
static vtkIdType PositionInHull(double* base, double* top, double* pt);
|
|
static int OutsideLine(
|
|
double hmin, double hmax, double vmin, double vmax, double* p0, double* p1, double* insidePt);
|
|
static int OutsideHorizontalLine(
|
|
double vmin, double vmax, double* p0, double* p1, double* insidePt);
|
|
static int OutsideVerticalLine(
|
|
double hmin, double hmax, double* p0, double* p1, double* insidePt);
|
|
|
|
double* Pts;
|
|
vtkIdType Npts;
|
|
vtkTimeStamp PtsTime;
|
|
|
|
double* CCWHull[3];
|
|
float HullBBox[3][4];
|
|
int HullSize[3];
|
|
vtkTimeStamp HullTime[3];
|
|
|
|
vtkPointsProjectedHull(const vtkPointsProjectedHull&) = delete;
|
|
void operator=(const vtkPointsProjectedHull&) = delete;
|
|
};
|
|
#endif
|