Zivid C++ API  2.4.2+1a2e8cfb-1
Defining the Future of 3D Machine Vision
PointCloud.h
Go to the documentation of this file.
1 
2 
3 /*******************************************************************************
4 
5  * This file is part of the Zivid 3D Camera API
6 
7  *
8 
9  * Copyright 2015-2021 (C) Zivid AS
10 
11  * All rights reserved.
12 
13  *
14 
15  * Zivid Software License, v1.0
16 
17  *
18 
19  * Redistribution and use in source and binary forms, with or without
20 
21  * modification, are permitted provided that the following conditions are met:
22 
23  *
24 
25  * 1. Redistributions of source code must retain the above copyright notice,
26 
27  * this list of conditions and the following disclaimer.
28 
29  *
30 
31  * 2. Redistributions in binary form must reproduce the above copyright notice,
32 
33  * this list of conditions and the following disclaimer in the documentation
34 
35  * and/or other materials provided with the distribution.
36 
37  *
38 
39  * 3. Neither the name of Zivid AS nor the names of its contributors may be used
40 
41  * to endorse or promote products derived from this software without specific
42 
43  * prior written permission.
44 
45  *
46 
47  * 4. This software, with or without modification, must not be used with any
48 
49  * other 3D camera than from Zivid AS.
50 
51  *
52 
53  * 5. Any software provided in binary form under this license must not be
54 
55  * reverse engineered, decompiled, modified and/or disassembled.
56 
57  *
58 
59  * THIS SOFTWARE IS PROVIDED BY ZIVID AS "AS IS" AND ANY EXPRESS OR IMPLIED
60 
61  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
62 
63  * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
64 
65  * DISCLAIMED. IN NO EVENT SHALL ZIVID AS OR CONTRIBUTORS BE LIABLE FOR ANY
66 
67  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
68 
69  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
70 
71  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
72 
73  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
74 
75  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
76 
77  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
78 
79  *
80 
81  * Contact: Zivid Customer Success Team <customersuccess@zivid.com>
82 
83  * Info: http://www.zivid.com
84 
85  ******************************************************************************/
86 
87 
88 
89 #pragma once
90 
91 #include <Zivid/Matrix.h>
92 #include "Zivid/Array2D.h"
94 #include "Zivid/Image.h"
95 #include "Zivid/Point.h"
97 #include "Zivid/SNR.h"
98 
99 #include <iosfwd>
100 #include <memory>
101 #include <string>
102 
103 namespace Zivid
104 {
114  {
115  public:
122  enum class Downsampling
123  {
124  by2x2,
125  by3x3,
126  by4x4,
127  };
128 
131 
133  ZIVID_CORE_EXPORT size_t width() const;
134 
136  ZIVID_CORE_EXPORT size_t height() const;
137 
140  ZIVID_CORE_EXPORT size_t size() const;
141 
144 
160 
180 
192 
205 
218 
225 
239 
253 
265  template<typename DataFormat>
267  {
268  static_assert(HasCopyDataImplReturnArray2DTag<DataFormat>::value,
269  "The provided DataFormat is unsupported. Please refer to the documentation for "
270  "this method for the supported DataFormats.");
271  return copyDataImpl(ReturnArray2DTag<DataFormat>{});
272  }
273 
329  template<typename DataFormat>
330  void copyData(DataFormat *destination) const
331  {
332  static_assert(HasCopyDataImpl<DataFormat *>::value,
333  "The provided DataFormat is unsupported. Please refer to the documentation for "
334  "this method for the supported data formats.");
335  return copyDataImpl(destination);
336  }
337 
340  ZIVID_CORE_EXPORT std::string toString() const;
341 
347 
375 
384 
385 #ifndef NO_DOC
386  ZIVID_CORE_EXPORT class PointCloudImpl &getImpl();
387  ZIVID_CORE_EXPORT const class PointCloudImpl &getImpl() const;
388  ZIVID_CORE_EXPORT explicit PointCloud(std::shared_ptr<class PointCloudImpl> other);
389 #endif
390 
391  private:
392  template<class T>
393  struct ReturnArray2DTag
394  {};
395 
396  template<typename... Args>
397  class HasCopyDataImplReturnArray2DTag
398  {
399  template<typename C,
400  typename = decltype(std::declval<C>().copyDataImpl(std::declval<ReturnArray2DTag<Args>>()...))>
401  static std::true_type test(int);
402  template<typename C>
403  static std::false_type test(...);
404 
405  public:
406  static constexpr bool value = decltype(test<PointCloud>(0))::value;
407  };
408 
409  template<typename... Args>
410  class HasCopyDataImpl
411  {
412  template<typename C, typename = decltype(std::declval<C>().copyDataImpl(std::declval<Args>()...))>
413  static std::true_type test(int);
414  template<typename C>
415  static std::false_type test(...);
416 
417  public:
418  static constexpr bool value = decltype(test<PointCloud>(0))::value;
419  };
420 
421  ZIVID_CORE_EXPORT Array2D<PointXYZ> copyDataImpl(ReturnArray2DTag<PointXYZ> /*tag*/) const;
422  ZIVID_CORE_EXPORT Array2D<PointXYZW> copyDataImpl(ReturnArray2DTag<PointXYZW> /*tag*/) const;
423  ZIVID_CORE_EXPORT Array2D<PointZ> copyDataImpl(ReturnArray2DTag<PointZ> /*tag*/) const;
424  ZIVID_CORE_EXPORT Array2D<ColorRGBA> copyDataImpl(ReturnArray2DTag<ColorRGBA> /*tag*/) const;
425  ZIVID_CORE_EXPORT Array2D<PointXYZColorRGBA> copyDataImpl(ReturnArray2DTag<PointXYZColorRGBA> /*tag*/) const;
426  ZIVID_CORE_EXPORT Array2D<PointXYZColorBGRA> copyDataImpl(ReturnArray2DTag<PointXYZColorBGRA> /*tag*/) const;
427  ZIVID_CORE_EXPORT Array2D<SNR> copyDataImpl(ReturnArray2DTag<SNR> /*tag*/) const;
428  ZIVID_CORE_EXPORT void copyDataImpl(PointXYZ *destination) const;
429  ZIVID_CORE_EXPORT void copyDataImpl(PointXYZW *destination) const;
430  ZIVID_CORE_EXPORT void copyDataImpl(PointZ *destination) const;
431  ZIVID_CORE_EXPORT void copyDataImpl(ColorRGBA *destination) const;
432  ZIVID_CORE_EXPORT void copyDataImpl(PointXYZColorRGBA *destination) const;
433  ZIVID_CORE_EXPORT void copyDataImpl(PointXYZColorBGRA *destination) const;
434  ZIVID_CORE_EXPORT void copyDataImpl(SNR *destination) const;
435 
436  std::shared_ptr<class PointCloudImpl> m_impl;
437  };
438 
440  ZIVID_CORE_EXPORT std::ostream &operator<<(std::ostream &stream, const PointCloud &pointCloud);
441 
442 #ifndef NO_DOC
444  namespace Detail
445  {
446  ZIVID_CORE_EXPORT void waitUntilProcessingIsComplete(const PointCloud &pointCloud);
447  } // namespace Detail
448 #endif
449 
450 } // namespace Zivid
#define ZIVID_CORE_EXPORT
Definition: CoreExport.h:101
Two-dimensional container of data
Definition: Array2D.h:119
A 2-dimensional image
Definition: Image.h:115
Point cloud with x, y, z, RGB color and SNR laid out on a 2D grid
Definition: PointCloud.h:114
ZIVID_CORE_EXPORT PointCloud & downsample(Downsampling downsampling)
Downsample the point cloud in-place
ZIVID_CORE_EXPORT Array2D< PointXYZW > copyPointsXYZW() const
Array2D of point coordinates in 4D
void copyData(DataFormat *destination) const
Copy data in the specified DataFormat to a destination buffer
Definition: PointCloud.h:330
ZIVID_CORE_EXPORT Array2D< PointZ > copyPointsZ() const
Array2D of Z coordinates
ZIVID_CORE_EXPORT Image< ColorRGBA > copyImageRGBA() const
Get point cloud colors as 8-bit RGBA image
Downsampling
Option for downsampling
Definition: PointCloud.h:123
ZIVID_CORE_EXPORT Array2D< PointXYZColorRGBA > copyPointsXYZColorsRGBA() const
Array2D of PointXYZColorRGBA
Array2D< DataFormat > copyData() const
Array2D with point cloud data using specified DataFormat
Definition: PointCloud.h:266
ZIVID_CORE_EXPORT Array2D< ColorRGBA > copyColorsRGBA() const
Array2D of point colors in 8-bit RGBA format
ZIVID_CORE_EXPORT size_t size() const
Get the size of the point cloud (total number of points)
ZIVID_CORE_EXPORT std::string toString() const
Get string representation of the point cloud
ZIVID_CORE_EXPORT Array2D< PointXYZColorBGRA > copyPointsXYZColorsBGRA() const
Array2D of PointXYZColorBGRA
ZIVID_CORE_EXPORT Array2D< SNR > copySNRs() const
Array2D of SNR values
ZIVID_CORE_EXPORT PointCloud()
Create an empty point cloud
ZIVID_CORE_EXPORT Array2D< PointXYZ > copyPointsXYZ() const
Array2D of point coordinates
ZIVID_CORE_EXPORT size_t width() const
Get the width of the point cloud (number of columns)
ZIVID_CORE_EXPORT PointCloud downsampled(Downsampling downsampling) const
Get a downsampled point cloud
ZIVID_CORE_EXPORT bool isEmpty() const
Check if the point cloud is empty (contains zero points)
ZIVID_CORE_EXPORT size_t height() const
Get the height of the point cloud (number of rows)
ZIVID_CORE_EXPORT PointCloud & transform(const Zivid::Matrix4x4 &matrix)
Transform the point cloud in-place by the given 4x4 transformation matrix
The main Zivid namespace. All Zivid code is found here
Definition: Application.h:99
std::ostream & operator<<(std::ostream &stream, const Array2D< T > &array)
Serialize array information to a stream
Definition: Array2D.h:214