Image Manager (CVCore3D.dll) 14.0

Cloud of 3D points. More...

Functions

cvbres_t CVC3DCreateDensePointCloud (cvbdim_t Width, cvbdim_t Height, cvbval_t Flags, CVCOMPOSITE &PointCloud)
 Creates a new dense Cartesian 3D PointCloud. More...
 
cvbres_t CVC3DCreateSparsePointCloud (cvbint64_t NumPoints, cvbval_t Flags, CVCOMPOSITE &PointCloud)
 Creates a new sparse Cartesian 3D PointCloud. More...
 
cvbres_t CVC3DPointCloudAnalyzeLayout (CVCOMPOSITE PointCloud, CVC3DPointCloudLayout &Layout)
 Analyzes the available buffers/planes of the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetDatatype (CVCOMPOSITE PointCloud, cvbdatatype_t &DT)
 Gets the cvbdatatype_t of the x,y,z(,w) components of the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetLatticeSize (CVCOMPOSITE PointCloud, cvbdim_t &Width, cvbdim_t &Height)
 Gets the number of x,y,z(,w) point rows and columns of the given dense PointCloud. More...
 
cvbres_t CVC3DPointCloudGetNumPoints (CVCOMPOSITE PointCloud, cvbint64_t &NumPoints)
 Gets the number of x,y,z(,w) points in the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointCDsPointer (CVCOMPOSITE PointCloud, CVC3DPointCD *&pPoints, size_t &NumPoints)
 Tries to get the 3D points from the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointCFsPointer (CVCOMPOSITE PointCloud, CVC3DPointCF *&pPoints, size_t &NumPoints)
 Tries to get the 3D points from the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointComponentsPointers (CVCOMPOSITE PointCloud, void *&pXs, intptr_t &XsInc, void *&pYs, intptr_t &YsInc, void *&pZs, intptr_t &ZsInc, void *&pWs, intptr_t &WsInc, size_t &NumPoints)
 Tries to get the point components from the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointDsPointer (CVCOMPOSITE PointCloud, CVC3DPointD *&pPoints, size_t &NumPoints)
 Tries to get the 3D points from the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointFsPointer (CVCOMPOSITE PointCloud, CVC3DPointF *&pPoints, size_t &NumPoints)
 Tries to get the 3D points from the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointHDsPointer (CVCOMPOSITE PointCloud, CVC3DPointHD *&pPoints, size_t &NumPoints)
 Tries to get the 3D points from the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointHFsPointer (CVCOMPOSITE PointCloud, CVC3DPointHF *&pPoints, size_t &NumPoints)
 Tries to get the 3D points from the given PointCloud. More...
 
cvbres_t CVC3DPointCloudGetPointsConfidencePointer (CVCOMPOSITE PointCloud, void *&pConfidences, intptr_t &Increment, cvbdatatype_t &DataType)
 Tries to get the confidence components from the given PointCloud. More...
 

Detailed Description

Cloud of 3D points.

At its core the PointCloud is a collection of 3D points (x,y,z, and optionally w). The components' data type can either be float or double. To be flexible for various use cases additional information can also be aggregated via the IComposite.

A point cloud is a CVCOMPOSITE with at least three planes denoting Cartesian point components. If possible, these point components are aggregated in one or more __IPFNCBuffer__s. Other information like an ITransformation can be attached to the IComposite.

The functions in this section simplify PointCloud access, so you don't need to enumerate and analyze the **IPlane**s manually. Here you find functions to access the points (or point components), the number of points and the structural information like cvbdatatype_t and CVC3DPointCloudLayout.

Sparse and Dense **PointCloud**s

Sparse **PointCloud**s are – logically seen, not from a memory perspective – an array of points. The IPlane objects aggregated by the cloud's IComposite are one-dimensional (rank of 1). They give no assurance of the ordering of the points.

Dense **PointCloud**s are placed on a lattice with a given width and height. Their **IPlane**s are two-dimensional (rank of 2). The advantage of dense clouds is, that you have immediate neighbor information. The disadvantage is, that you cannot have arbitrary clouds (e.g. rotating a dense cloud quickly breaks the lattice view). Also points behind other points cannot be addressed (same x,y components with differing z components).

In memory there are no gaps in a dense cloud. You need to work around that with a confidence IPlane (CVCPR_PixConfidence plane role). And as dense clouds are also just points, you can access dense clouds like sparse clouds.

The easiest way to determine whether you have a dense point cloud is to call CVC3DPointCloudGetLatticeSize.

Confidence Plane

Confidence planes are especially important to dense **PointCloud**s as we cannot remove points without destroying the lattice. The confidence for a point ranges from 0 to 1 (inclusive), where 0 is 0% and 1 is 100%. A value of 0.5 thus has 50% confidence.

A confidence value in the confidence plane relates to the point with the same index in the x, y, z (, w) component planes. There is also a special point type available (CVC3DPointCF/CVC3DPointCD) which makes the confidence information directly available. You can create such **PointCloud**s by adding CVC3DPCF_XYZConfidence to the creation flags.

Memory Layout

__PointCloud__s do not have a fixed buffer layout. Following Common Vision Blox's plane model, each point component can be enumerated individually. With this approach various buffer layouts can be handled (see CVC3DPointCloudLayout for additional information on the possible layouts).

You can enumerate these planes and buffers with the CVCore library's IPlaneEnum, IPlane, IComposite and IPFNCBuffer functions.

Function Documentation

◆ CVC3DCreateDensePointCloud()

cvbres_t CVC3DCreateDensePointCloud ( cvbdim_t  Width,
cvbdim_t  Height,
cvbval_t  Flags,
CVCOMPOSITE PointCloud 
)

Creates a new dense Cartesian 3D PointCloud.

The resulting point cloud will always have a contiguous point array (CVC3DPCL_Interleaved) with the cvbdatatype_t of the point components being DT_Float | DT_Signed | 32 if CVC3DPCF_DTFloat is set in the Flags; DT_Float | DT_Signed | 64 if CVC3DPCF_DTDouble is set. The buffer's PFNC format is Coord3D_ABC32f if CVC3DPCF_XYZ is set; CVC3DPCF_XYZW and CVC3DPCF_XYZConfidence have no PFNC representation.

Creating the point cloud with with CVC3DPCF_XYZConfidence will provide interleaved XYZConfidence (PointCloudLayout will be CVC3DPCL_Linear), whereas creating it with CVC3DPCF_WithConfidence, only XYZ will be interleaved but not the confidence plane (PointCloudLayout will be CVC3DPCL_Interleaved).

Note
The content of the created point cloud is only allocated, but not guaranteed to be initialized with any value.
When the CVC3DPCF_XYZConfidence flag is used the confidence plane is also interleaved (see CVC3DPointCF/CVC3DPointCD) and has the data type of the point components.
If this function returns successfully you need to release the returned PointCloud via ReleaseObject if not needed anymore.
Parameters
[in]WidthNumber of Cartesian X, Y, Z(, W) points on the x-component of the lattice.
[in]HeightNumber of Cartesian X, Y, Z(, W) points on the y-component of the lattice.
[in]FlagsCVC3DPointCloudFlags specifying the kind of point cloud to be created.
[out]PointCloudVariable to receive the handle of the point cloud object as a CVCOMPOSITE.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_PARAMETER) if NumPoints is less or equal to 0 or Flags have an unsupported combination.
  • #CVC_ERROR (#CVC_E_MEMORY) if not enough memory was available to create the point cloud.
See also
PointCloud, CVC3DPointCloudAnalyzeLayout, CVC3DPointCloudGetDatatype, CVC3DPointCloudGetNumPoints, CVC3DPointCloudGetPointFsPointer, CVC3DPointCloudGetPointDsPointer, CVC3DPointCloudGetPointHFsPointer, CVC3DPointCloudGetPointHDsPointer, CVC3DCreateDensePointCloud, CVC3DPointCloudGetPointCFsPointer, CVC3DPointCloudGetPointCDsPointer

◆ CVC3DCreateSparsePointCloud()

cvbres_t CVC3DCreateSparsePointCloud ( cvbint64_t  NumPoints,
cvbval_t  Flags,
CVCOMPOSITE PointCloud 
)

Creates a new sparse Cartesian 3D PointCloud.

The resulting point cloud will have a contiguous point array (CVC3DPCL_Interleaved) with the cvbdatatype_t of the point components being DT_Float | DT_Signed | 32 if CVC3DPCF_DTFloat is set in the Flags; DT_Float | DT_Signed | 64 if CVC3DPCF_DTDouble is set. The buffer's PFNC format is Coord3D_ABC32f if CVC3DPCF_XYZ is set; CVC3DPCF_XYZW and CVC3DPCF_XYZConfidence have no PFNC representation.

Creating the point cloud with with CVC3DPCF_XYZConfidence will provide interleaved XYZConfidence (PointCloudLayout will be CVC3DPCL_Linear), whereas creating it with CVC3DPCF_WithConfidence, only XYZ will be interleaved but not the confidence plane (PointCloudLayout will be CVC3DPCL_Interleaved).

Note
The content of the created point cloud is only allocated, but not guaranteed to be initialized with any value.
If this function returns successfully you need to release the returned PointCloud via ReleaseObject if not needed anymore.
Parameters
[in]NumPointsNumber of Cartesian X, Y, Z(, W) points.
[in]FlagsCVC3DPointCloudFlags specifying the kind of point cloud to be created.
[out]PointCloudVariable to receive the handle of the point cloud object as a CVCOMPOSITE.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_PARAMETER) if NumPoints is less or equal to 0 or Flags have an unsupported combination.
  • #CVC_ERROR (#CVC_E_MEMORY) if not enough memory was available to create the point cloud.
See also
PointCloud, CVC3DPointCloudAnalyzeLayout, CVC3DPointCloudGetDatatype, CVC3DPointCloudGetNumPoints, CVC3DPointCloudGetPointFsPointer, CVC3DPointCloudGetPointDsPointer, CVC3DPointCloudGetPointHFsPointer, CVC3DPointCloudGetPointHDsPointer, CVC3DCreateDensePointCloud

◆ CVC3DPointCloudAnalyzeLayout()

cvbres_t CVC3DPointCloudAnalyzeLayout ( CVCOMPOSITE  PointCloud,
CVC3DPointCloudLayout Layout 
)

Analyzes the available buffers/planes of the given PointCloud.

This function queries the IPFNCBuffer and then the IPlaneEnum interfaces.

Parameters
[in]PointCloudPoint cloud to analyze.
[out]LayoutCVC3DPointCloudLayout of PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the point components in a known, compatible layout.
See also
CVC3DPointCloudLayout for additional layout information.

◆ CVC3DPointCloudGetDatatype()

cvbres_t CVC3DPointCloudGetDatatype ( CVCOMPOSITE  PointCloud,
cvbdatatype_t DT 
)

Gets the cvbdatatype_t of the x,y,z(,w) components of the given PointCloud.

Note
This function does more than just to query the IPlaneEnum or IPFNCBuffer interfaces. It also checks whether PointCloud will be treated as a point cloud.
Parameters
[in]PointCloudPoint cloud of which the point component cvbdatatype_t is to queried.
[out]DTThe cvbdatatype_t of the x,y,z(,w) components of the PointCloud points.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the point components in a known, compatible layout.

◆ CVC3DPointCloudGetLatticeSize()

cvbres_t CVC3DPointCloudGetLatticeSize ( CVCOMPOSITE  PointCloud,
cvbdim_t &  Width,
cvbdim_t &  Height 
)

Gets the number of x,y,z(,w) point rows and columns of the given dense PointCloud.

Note
This function does more than just to query the IPlaneEnum or IPFNCBuffer interfaces. It also checks whether PointCloud will be treated as a dense point cloud.
Parameters
[in]PointCloudPoint cloud of which the number of points is to be queried.
[out]WidthVariable to be filled with the number of columns.
[out]HeightVariable to be filled with the number of rows.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_INVALIDDIMENSION) if PointCloud is not a dense point cloud.
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the point components in a known, compatible layout.
See also
CVC3DPointCloudGetNumPoints

◆ CVC3DPointCloudGetNumPoints()

cvbres_t CVC3DPointCloudGetNumPoints ( CVCOMPOSITE  PointCloud,
cvbint64_t &  NumPoints 
)

Gets the number of x,y,z(,w) points in the given PointCloud.

Note
One a dense point cloud this is equivalent to this code:
cvbint64_t GetNumPoints(CVCOMPOSITE PointCloud)
{
cvbdim_t width = 0, height = 0;
if(cvbres_t error = CVC3DPointCloudGetLatticeSize(PointCloud, width, height))
throw std::logic_error("not a dense point cloud");
return static_cast<cvbint64_t>(width) * height;
}
void * CVCOMPOSITE
cvbres_t CVC3DPointCloudGetLatticeSize(CVCOMPOSITE PointCloud, cvbdim_t &Width, cvbdim_t &Height)
Gets the number of x,y,z(,w) point rows and columns of the given dense PointCloud.
Definition: PointCloudExports.cpp:837
This function does more than just to query the IPlaneEnum or IPFNCBuffer interfaces. It also checks whether PointCloud will be treated as a point cloud.
Parameters
[in]PointCloudPoint cloud of which the number of points is to be queried.
[out]NumPointsVariable to be filled with the number of points in the PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the point components in a known, compatible layout.
See also
CVC3DPointCloudGetLatticeSize

◆ CVC3DPointCloudGetPointCDsPointer()

cvbres_t CVC3DPointCloudGetPointCDsPointer ( CVCOMPOSITE  PointCloud,
CVC3DPointCD *&  pPoints,
size_t &  NumPoints 
)

Tries to get the 3D points from the given PointCloud.

This function gets the pointer to the internal array of X, Y, Z, C float points if it available.

Note
This function only succeeds if the component planes are stored interleaved in the PointCloud. For all other Cartesian point clouds you can use CVC3DPointCloudGetPointComponentsPointers.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points are to be accessed.
[out]pPointsVariable to be filled with pointer to first point in PointCloud.
[out]NumPointsVariable to be filled with the number of points in PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the points as contiguous CVC3DPointCD structs.
See also
CVC3DPointCloudGetPointComponentsPointers, CVC3DPointCloudAnalyzeLayout

◆ CVC3DPointCloudGetPointCFsPointer()

cvbres_t CVC3DPointCloudGetPointCFsPointer ( CVCOMPOSITE  PointCloud,
CVC3DPointCF *&  pPoints,
size_t &  NumPoints 
)

Tries to get the 3D points from the given PointCloud.

This function gets the pointer to the internal array of X, Y, Z, C float points if it available.

Note
This function only succeeds if the component planes are stored interleaved in the PointCloud. For all other Cartesian point clouds you can use CVC3DPointCloudGetPointComponentsPointers.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points are to be accessed.
[out]pPointsVariable to be filled with pointer to first point in PointCloud.
[out]NumPointsVariable to be filled with the number of points in PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the points as contiguous CVC3DPointCF structs.
See also
CVC3DPointCloudGetPointComponentsPointers, CVC3DPointCloudAnalyzeLayout

◆ CVC3DPointCloudGetPointComponentsPointers()

cvbres_t CVC3DPointCloudGetPointComponentsPointers ( CVCOMPOSITE  PointCloud,
void *&  pXs,
intptr_t &  XsInc,
void *&  pYs,
intptr_t &  YsInc,
void *&  pZs,
intptr_t &  ZsInc,
void *&  pWs,
intptr_t &  WsInc,
size_t &  NumPoints 
)

Tries to get the point components from the given PointCloud.

This function gets the pointers to the internal buffer(s) of X, Y, Z point components.

Note
This function supports all linear Cartesian point clouds. If the component planes are stored interleaved as e.g. CVC3DPointF, you can also use the CVC3DPointCloudGetPointFsPointer function to access the points as an array.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points components are to be accessed.
[out]pXsVariable to receive the pointer to the first X-component of the first point.
[out]XsIncIncrement to the next X-component of the next point in bytes.
[out]pYsVariable to receive the pointer to the first Y-component of the first point.
[out]YsIncIncrement to the next Y-component of the next point in bytes.
[out]pZsVariable to receive the pointer to the first Z-component of the first point.
[out]ZsIncIncrement to the next Z-component of the next point in bytes.
[out]pWsVariable to receive the pointer to the first W-component of the first point (if present; nullptr if not).
[out]WsIncIncrement to the next W-component of the next point in bytes (if present; 0 if not).
[out]NumPointsVariable to be filled with the number of points in PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the point components in a known, compatible layout.
See also
CVC3DPointCloudGetPointFsPointer, CVC3DPointCloudAnalyzeLayout, CVC3DPointCloudGetPointsConfidencePointer
Example
#include <limits>
#include <CVCError.h>
#include <iCVCore3D.h>
struct Range
{
float Min;
float Max;
};
cvbres_t CalculateBoundingBox(CVCOMPOSITE PointCloud, Range &XRange, Range &YRange, Range &ZRange)
{
cvbdatatype_t dt = 0;
if(cvbres_t error = CVC3DPointCloudGetDatatype(PointCloud, dt))
return error;
if(BytesPerPixel(dt) != sizeof(float)) // very simple check
return CVC_ERROR(CVC_E_INVALIDDATATYPE); // only support float-clouds
intptr_t Xs = 0, XsInc = 0;
intptr_t Ys = 0, YsInc = 0;
intptr_t Zs = 0, ZsInc = 0;
intptr_t Ws = 0, WsInc = 0;
size_t numPoints = 0;
if(cvbres_t error = CVC3DPointCloudGetPointComponentsPointers(PointCloud, reinterpret_cast<void *&>(Xs), XsInc,
reinterpret_cast<void *&>(Ys), YsInc,
reinterpret_cast<void *&>(Zs), ZsInc,
reinterpret_cast<void *&>(Ws), WsInc,
numPoints))
return error;
if(Ws != 0)
return CVC_ERROR(CVC_E_NOTSUPPORTED); // only x,y,z clouds
XRange.Min = YRange.Min = ZRange.Min = std::numeric_limits<float>::max();
XRange.Max = YRange.Max = ZRange.Max = std::numeric_limits<float>::lowest();
for(size_t pointIndex = 0; pointIndex < numPoints; ++pointIndex)
{
float x = *reinterpret_cast<float*>(Xs + pointIndex * XsInc);
float y = *reinterpret_cast<float*>(Ys + pointIndex * YsInc);
float z = *reinterpret_cast<float*>(Zs + pointIndex * ZsInc);
if(x < XRange.Min)
XRange.Min = x;
if(x > XRange.Max)
XRange.Max = x;
if(y < YRange.Min)
YRange.Min = y;
if(y > YRange.Max)
YRange.Max = y;
if(z < ZRange.Min)
ZRange.Min = Z;
if(z > ZRange.Max)
ZRange.Max = z;
}
return CVC_ERROR(CVC_E_OK);
}
long cvbdatatype_t
cvbval_t BytesPerPixel(cvbdatatype_t Datatype)
cvbres_t CVC3DPointCloudGetPointComponentsPointers(CVCOMPOSITE PointCloud, void *&pXs, intptr_t &XsInc, void *&pYs, intptr_t &YsInc, void *&pZs, intptr_t &ZsInc, void *&pWs, intptr_t &WsInc, size_t &NumPoints)
Tries to get the point components from the given PointCloud.
Definition: PointCloudExports.cpp:1885
cvbres_t CVC3DPointCloudGetDatatype(CVCOMPOSITE PointCloud, cvbdatatype_t &DT)
Gets the cvbdatatype_t of the x,y,z(,w) components of the given PointCloud.
Definition: PointCloudExports.cpp:1174

◆ CVC3DPointCloudGetPointDsPointer()

cvbres_t CVC3DPointCloudGetPointDsPointer ( CVCOMPOSITE  PointCloud,
CVC3DPointD *&  pPoints,
size_t &  NumPoints 
)

Tries to get the 3D points from the given PointCloud.

This function gets the pointer to the internal array of X, Y, Z double points if it available.

Note
This function only succeeds if the component planes are stored interleaved in the PointCloud. For all other Cartesian point clouds you can use CVC3DPointCloudGetPointComponentsPointers.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points are to be accessed.
[out]pPointsVariable to be filled with pointer to first point in PointCloud.
[out]NumPointsVariable to be filled with the number of points in PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the points as contiguous CVC3DPointD structs.
See also
CVC3DPointCloudGetPointComponentsPointers, CVC3DPointCloudAnalyzeLayout

◆ CVC3DPointCloudGetPointFsPointer()

cvbres_t CVC3DPointCloudGetPointFsPointer ( CVCOMPOSITE  PointCloud,
CVC3DPointF *&  pPoints,
size_t &  NumPoints 
)

Tries to get the 3D points from the given PointCloud.

This function gets the pointer to the internal array of X, Y, Z float points if it available.

Note
This function only succeeds if the component planes are stored interleaved in the PointCloud. For all other Cartesian point clouds you can use CVC3DPointCloudGetPointComponentsPointers.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points are to be accessed.
[out]pPointsVariable to be filled with pointer to first point in PointCloud.
[out]NumPointsVariable to be filled with the number of points in PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the points as contiguous CVC3DPointF structs.
See also
CVC3DPointCloudGetPointComponentsPointers, CVC3DPointCloudAnalyzeLayout

◆ CVC3DPointCloudGetPointHDsPointer()

cvbres_t CVC3DPointCloudGetPointHDsPointer ( CVCOMPOSITE  PointCloud,
CVC3DPointHD *&  pPoints,
size_t &  NumPoints 
)

Tries to get the 3D points from the given PointCloud.

This function gets the pointer to the internal array of X, Y, Z, W double points if it available.

Note
This function only succeeds if the component planes are stored interleaved in the PointCloud. For all other Cartesian point clouds you can use CVC3DPointCloudGetPointComponentsPointers.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points are to be accessed.
[out]pPointsVariable to be filled with pointer to first point in PointCloud.
[out]NumPointsVariable to be filled with the number of points in PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the points as contiguous CVC3DPointHD structs.
See also
CVC3DPointCloudGetPointComponentsPointers, CVC3DPointCloudAnalyzeLayout

◆ CVC3DPointCloudGetPointHFsPointer()

cvbres_t CVC3DPointCloudGetPointHFsPointer ( CVCOMPOSITE  PointCloud,
CVC3DPointHF *&  pPoints,
size_t &  NumPoints 
)

Tries to get the 3D points from the given PointCloud.

This function gets the pointer to the internal array of X, Y, Z, W float points if it available.

Note
This function only succeeds if the component planes are stored interleaved in the PointCloud. For all other Cartesian point clouds you can use CVC3DPointCloudGetPointComponentsPointers.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points are to be accessed.
[out]pPointsVariable to be filled with pointer to first point in PointCloud.
[out]NumPointsVariable to be filled with the number of points in PointCloud.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not store the points as contiguous CVC3DPointHF structs.
See also
CVC3DPointCloudGetPointComponentsPointers, CVC3DPointCloudAnalyzeLayout

◆ CVC3DPointCloudGetPointsConfidencePointer()

cvbres_t CVC3DPointCloudGetPointsConfidencePointer ( CVCOMPOSITE  PointCloud,
void *&  pConfidences,
intptr_t &  Increment,
cvbdatatype_t DataType 
)

Tries to get the confidence components from the given PointCloud.

This is a companion function to be used with any point access function like CVC3DPointCloudGetPointComponentsPointers to access the internal buffer of the confidence plane.

Note
It is possible that the confidence plane has a different cvbdatatype_t then the point data.
If the point cloud is also dense, then you can access the other rows by using the rowIncrement = pointIncrement * latticeWidth (see CVC3DPointCloudGetLatticeSize)
Parameters
[in]PointCloudPoint cloud of which the points confidence are to be accessed.
[out]pConfidencesVariable to receive the pointer to the first confidence component of the first point.
[out]IncrementIncrement to the next confidence component of the next point in bytes.
[out]DataTypeVariable to receive the data type of the confidence plane.
Returns
  • #CVC_ERROR (#CVC_E_OK) on success
  • #CVC_ERROR (#CVC_E_WRONGOBJECT) if PointCloud is not a valid point cloud IComposite.
  • #CVC_ERROR (#CVC_E_INVALIDDATATYPE) if PointCloud does not contain a confidence plane in a known form.
See also
CVC3DPointCloudGetPointComponentsPointers