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.
254 lines
7.7 KiB
C++
254 lines
7.7 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkPoints2D.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 vtkPoints2D
|
|
* @brief represent and manipulate 2D points
|
|
*
|
|
* vtkPoints2D represents 2D points. The data model for vtkPoints2D is an
|
|
* array of vx-vy doublets accessible by (point or cell) id.
|
|
*/
|
|
|
|
#ifndef vtkPoints2D_h
|
|
#define vtkPoints2D_h
|
|
|
|
#include "vtkCommonCoreModule.h" // For export macro
|
|
#include "vtkObject.h"
|
|
|
|
#include "vtkDataArray.h" // Needed for inline methods
|
|
|
|
class vtkIdList;
|
|
|
|
class VTKCOMMONCORE_EXPORT vtkPoints2D : public vtkObject
|
|
{
|
|
public:
|
|
static vtkPoints2D* New(int dataType);
|
|
|
|
static vtkPoints2D* New();
|
|
|
|
vtkTypeMacro(vtkPoints2D, vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Allocate initial memory size. ext is no longer used.
|
|
*/
|
|
virtual vtkTypeBool Allocate(vtkIdType sz, vtkIdType ext = 1000);
|
|
|
|
/**
|
|
* Return object to instantiated state.
|
|
*/
|
|
virtual void Initialize();
|
|
|
|
/**
|
|
* Set/Get the underlying data array. This function must be implemented
|
|
* in a concrete subclass to check for consistency. (The tuple size must
|
|
* match the type of data. For example, 3-tuple data array can be assigned to
|
|
* a vector, normal, or points object, but not a tensor object, which has a
|
|
* tuple dimension of 9. Scalars, on the other hand, can have tuple dimension
|
|
* from 1-4, depending on the type of scalar.)
|
|
*/
|
|
virtual void SetData(vtkDataArray*);
|
|
vtkDataArray* GetData() { return this->Data; }
|
|
|
|
/**
|
|
* Return the underlying data type. An integer indicating data type is
|
|
* returned as specified in vtkSetGet.h.
|
|
*/
|
|
virtual int GetDataType() const;
|
|
|
|
/**
|
|
* Specify the underlying data type of the object.
|
|
*/
|
|
virtual void SetDataType(int dataType);
|
|
void SetDataTypeToBit() { this->SetDataType(VTK_BIT); }
|
|
void SetDataTypeToChar() { this->SetDataType(VTK_CHAR); }
|
|
void SetDataTypeToUnsignedChar() { this->SetDataType(VTK_UNSIGNED_CHAR); }
|
|
void SetDataTypeToShort() { this->SetDataType(VTK_SHORT); }
|
|
void SetDataTypeToUnsignedShort() { this->SetDataType(VTK_UNSIGNED_SHORT); }
|
|
void SetDataTypeToInt() { this->SetDataType(VTK_INT); }
|
|
void SetDataTypeToUnsignedInt() { this->SetDataType(VTK_UNSIGNED_INT); }
|
|
void SetDataTypeToLong() { this->SetDataType(VTK_LONG); }
|
|
void SetDataTypeToUnsignedLong() { this->SetDataType(VTK_UNSIGNED_LONG); }
|
|
void SetDataTypeToFloat() { this->SetDataType(VTK_FLOAT); }
|
|
void SetDataTypeToDouble() { this->SetDataType(VTK_DOUBLE); }
|
|
|
|
/**
|
|
* Return a void pointer. For image pipeline interface and other
|
|
* special pointer manipulation.
|
|
*/
|
|
void* GetVoidPointer(const int id) { return this->Data->GetVoidPointer(id); }
|
|
|
|
/**
|
|
* Reclaim any extra memory.
|
|
*/
|
|
virtual void Squeeze() { this->Data->Squeeze(); }
|
|
|
|
/**
|
|
* Make object look empty but do not delete memory.
|
|
*/
|
|
virtual void Reset();
|
|
|
|
//@{
|
|
/**
|
|
* Different ways to copy data. Shallow copy does reference count (i.e.,
|
|
* assigns pointers and updates reference count); deep copy runs through
|
|
* entire data array assigning values.
|
|
*/
|
|
virtual void DeepCopy(vtkPoints2D* ad);
|
|
virtual void ShallowCopy(vtkPoints2D* ad);
|
|
//@}
|
|
|
|
/**
|
|
* Return the memory in kibibytes (1024 bytes) consumed by this attribute data.
|
|
* Used to support streaming and reading/writing data. The value
|
|
* returned is guaranteed to be greater than or equal to the
|
|
* memory required to actually represent the data represented
|
|
* by this object. The information returned is valid only after
|
|
* the pipeline has been updated.
|
|
*/
|
|
unsigned long GetActualMemorySize();
|
|
|
|
/**
|
|
* Return number of points in array.
|
|
*/
|
|
vtkIdType GetNumberOfPoints() { return this->Data->GetNumberOfTuples(); }
|
|
|
|
/**
|
|
* Return a pointer to a double point x[2] for a specific id.
|
|
* WARNING: Just don't use this error-prone method, the returned pointer
|
|
* and its values are only valid as long as another method invocation is not
|
|
* performed. Prefer GetPoint() with the return value in argument.
|
|
*/
|
|
double* GetPoint(vtkIdType id) VTK_SIZEHINT(2) { return this->Data->GetTuple(id); }
|
|
|
|
/**
|
|
* Copy point components into user provided array v[2] for specified id.
|
|
*/
|
|
void GetPoint(vtkIdType id, double x[2]) { this->Data->GetTuple(id, x); }
|
|
|
|
/**
|
|
* Insert point into object. No range checking performed (fast!).
|
|
* Make sure you use SetNumberOfPoints() to allocate memory prior
|
|
* to using SetPoint().
|
|
*/
|
|
void SetPoint(vtkIdType id, const float x[2]) { this->Data->SetTuple(id, x); }
|
|
void SetPoint(vtkIdType id, const double x[2]) { this->Data->SetTuple(id, x); }
|
|
void SetPoint(vtkIdType id, double x, double y);
|
|
|
|
/**
|
|
* Insert point into object. Range checking performed and memory
|
|
* allocated as necessary.
|
|
*/
|
|
void InsertPoint(vtkIdType id, const float x[2]) { this->Data->InsertTuple(id, x); }
|
|
void InsertPoint(vtkIdType id, const double x[2]) { this->Data->InsertTuple(id, x); }
|
|
void InsertPoint(vtkIdType id, double x, double y);
|
|
|
|
/**
|
|
* Insert point into next available slot. Returns id of slot.
|
|
*/
|
|
vtkIdType InsertNextPoint(const float x[2]) { return this->Data->InsertNextTuple(x); }
|
|
vtkIdType InsertNextPoint(const double x[2]) { return this->Data->InsertNextTuple(x); }
|
|
vtkIdType InsertNextPoint(double x, double y);
|
|
|
|
/**
|
|
* Remove point described by its id
|
|
*/
|
|
void RemovePoint(vtkIdType id) { this->Data->RemoveTuple(id); }
|
|
|
|
/**
|
|
* Specify the number of points for this object to hold. Does an
|
|
* allocation as well as setting the MaxId ivar. Used in conjunction with
|
|
* SetPoint() method for fast insertion.
|
|
*/
|
|
void SetNumberOfPoints(vtkIdType numPoints);
|
|
|
|
/**
|
|
* Resize the internal array while conserving the data. Returns 1 if
|
|
* resizing succeeded and 0 otherwise.
|
|
*/
|
|
vtkTypeBool Resize(vtkIdType numPoints);
|
|
|
|
/**
|
|
* Given a list of pt ids, return an array of points.
|
|
*/
|
|
void GetPoints(vtkIdList* ptId, vtkPoints2D* fp);
|
|
|
|
/**
|
|
* Determine (xmin,xmax, ymin,ymax) bounds of points.
|
|
*/
|
|
virtual void ComputeBounds();
|
|
|
|
/**
|
|
* Return the bounds of the points.
|
|
*/
|
|
double* GetBounds() VTK_SIZEHINT(4);
|
|
|
|
/**
|
|
* Return the bounds of the points.
|
|
*/
|
|
void GetBounds(double bounds[4]);
|
|
|
|
protected:
|
|
vtkPoints2D(int dataType = VTK_FLOAT);
|
|
~vtkPoints2D() override;
|
|
|
|
double Bounds[4];
|
|
vtkTimeStamp ComputeTime; // Time at which bounds computed
|
|
vtkDataArray* Data; // Array which represents data
|
|
|
|
private:
|
|
vtkPoints2D(const vtkPoints2D&) = delete;
|
|
void operator=(const vtkPoints2D&) = delete;
|
|
};
|
|
|
|
inline void vtkPoints2D::Reset()
|
|
{
|
|
this->Data->Reset();
|
|
this->Modified();
|
|
}
|
|
|
|
inline void vtkPoints2D::SetNumberOfPoints(vtkIdType numPoints)
|
|
{
|
|
this->Data->SetNumberOfComponents(2);
|
|
this->Data->SetNumberOfTuples(numPoints);
|
|
this->Modified();
|
|
}
|
|
|
|
inline vtkTypeBool vtkPoints2D::Resize(vtkIdType numPoints)
|
|
{
|
|
this->Data->SetNumberOfComponents(2);
|
|
this->Modified();
|
|
return this->Data->Resize(numPoints);
|
|
}
|
|
|
|
inline void vtkPoints2D::SetPoint(vtkIdType id, double x, double y)
|
|
{
|
|
double p[2] = { x, y };
|
|
this->Data->SetTuple(id, p);
|
|
}
|
|
|
|
inline void vtkPoints2D::InsertPoint(vtkIdType id, double x, double y)
|
|
{
|
|
double p[2] = { x, y };
|
|
this->Data->InsertTuple(id, p);
|
|
}
|
|
|
|
inline vtkIdType vtkPoints2D::InsertNextPoint(double x, double y)
|
|
{
|
|
double p[2] = { x, y };
|
|
return this->Data->InsertNextTuple(p);
|
|
}
|
|
|
|
#endif
|