# Point3DGrid

### Description

The Point3DGrid data type represents a cloud of points in a three-dimensional space.
Although the points are organized in a grid structure just like in a **Surface** object,
unlike there the X and Y coordinates of the points can have arbitrary values. Therefore
the whole Point3DGrid object has only a virtual grid structure, there is no guarantee that
two points that are neighbors in the grid lie close to each other in the space.
However, the grid structure allows to define regions of interest for a Point3DGrid object.
For every point in the cloud it is possible that it does not exist.
In this case a special value of point is stored to mark that the point is missing.

For most purposes the Surface objects should be preferred than Point3DGrid objects. Surface requires much less space and ensures that two neighboring points lie quite close to each other, at least in XY plane.

Some filters can introduce **invalid points**, that is, points
that have an infinite value in the one or more of the coordinates.

Invalid points can be localized using **Point3DGridValidPointsRegion**. This filter will also return
a region of all valid points, which, most of the time, should be the only points considered in further processing.

## Library Definition

Methods:

`int`

- returns number of grid columns**Width**()`int`

- returns number of grid rows**Height**()`Point3D*`

- returns pointer to point cloud data buffer**Data**()`Point3D*`

- returns pointer to first point in the index row**operator[]**( int index )`static bool`

- checks if a point is a valid point, i.e. it is not missing**IsPointValid**( const Point3D& inPoint )