28 : base(CreateFromXYZImage(image))
50 : base(CreateFromUndistortedImage(undistortedDepthMap))
76 : base(LoadFromFile(filePath))
88 : base(CreateFromPoints(points))
113 DllHelper.ExecuteAndMapReturnCodes(() =>
114 CInterface.peak_icv_PointCloud_GetPoints_GetCount(_handle, out numPoints));
122 var pointsC =
new Backend.Types.peak_icv_point_xyz[numPoints];
123 var handle = GCHandle.Alloc(pointsC, GCHandleType.Pinned);
127 IntPtr ptr = handle.AddrOfPinnedObject();
129 DllHelper.ExecuteAndMapReturnCodes(() =>
130 CInterface.peak_icv_PointCloud_GetPoints(_handle,
132 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_point_xyz>() * numPoints));
141 .Select(np =>
new PointXYZ(np.x, np.y, np.z))
151 public static IEqualityComparer<PointCloudXYZ>
Comparer {
get; } =
new PointCloudEqualityComparer();
153 private static Handle CreateFromUndistortedImage(
UndistortedImage undistortedDepthMap)
155 using var xyz =
new XYZImage(undistortedDepthMap);
156 return CreateFromXYZImage(xyz);
172 var cMatrix = matrix.ToCType();
173 DllHelper.ExecuteAndMapReturnCodes(() =>
174 CInterface.peak_icv_PointCloud_Transform(_handle, cMatrix, ref pointCloud._handle));
191 DllHelper.ExecuteAndMapReturnCodes(() =>
192 CInterface.peak_icv_PointCloud_TransformToWorkspace(_handle, extrinsicParameters.ToCType(),
194 ref pointCloud._handle));
198 private static Handle CreateFromXYZImage(
XYZImage image)
200 var handle =
new Handle();
201 DllHelper.ExecuteAndMapReturnCodes(() =>
202 CInterface.peak_icv_PointCloud_CreateFromXYZImage(out handle, image._handle));
206 private static Handle LoadFromFile(
string filePath)
208 var handle =
new Handle();
209 DllHelper.ExecuteAndMapReturnCodes(() =>
210 CInterface.peak_icv_PointCloud_CreateFromFile(out handle,
211 Backend.Types.peak_icv_point_type.PEAK_ICV_POINT_TYPE_XYZ, Utils.ToUtf8(filePath)));
215 private static Handle CreateFromPoints(
PointXYZ[] points)
217 Backend.Types.peak_icv_point_xyz[] pointsC = points.Select(point =>
218 new Backend.Types.peak_icv_point_xyz
225 var handle =
new Handle();
226 DllHelper.ExecuteAndMapReturnCodes(() =>
227 CInterface.peak_icv_PointCloud_CreateFromPoints(
228 out handle, pointsC, (nuint) pointsC.Length,
229 Backend.Types.peak_icv_point_type.PEAK_ICV_POINT_TYPE_XYZ));
233 private sealed class PointCloudEqualityComparer : IEqualityComparer<PointCloudXYZ>
237 if (ReferenceEquals(x, y))
242 if (ReferenceEquals(x,
null))
247 if (ReferenceEquals(y,
null))
258 var count = points.Count();