pointrain_core/pc/
xyzi_normal.rs1use crate::{
2 traits::{PointCloud, PointCloudWithIntensity, PointCloudWithNormal},
3 types::{Float, Normal, Position},
4};
5
6#[derive(Debug, Default, Clone, Copy, PartialEq)]
7pub struct PointXYZINormal {
8 pub pos: Position,
9 pub normal: Normal,
10 pub intensity: Float,
11 pub curvature: Float,
12}
13
14#[derive(Debug, Default, Clone)]
15pub struct PointCloudXYZINormal {
16 positions: Vec<Position>,
17 intensities: Vec<Float>,
18 normals: Vec<Normal>,
19 curvatures: Vec<Float>,
20}
21
22impl PointCloudXYZINormal {
23 pub fn new() -> Self {
24 Self::default()
25 }
26}
27
28impl PointCloud for PointCloudXYZINormal {
29 type Point = PointXYZINormal;
30
31 fn with_capacity(capacity: usize) -> Self {
32 Self {
33 positions: Vec::with_capacity(capacity),
34 intensities: Vec::with_capacity(capacity),
35 normals: Vec::with_capacity(capacity),
36 curvatures: Vec::with_capacity(capacity),
37 }
38 }
39
40 fn positions(&self) -> &[Position] {
41 &self.positions
42 }
43
44 fn add_point(&mut self, p: Self::Point) -> &mut Self {
45 self.positions.push(p.pos);
46 self.intensities.push(p.intensity);
47 self.normals.push(p.normal);
48 self.curvatures.push(p.curvature);
49 self
50 }
51}
52
53impl PointCloudWithIntensity for PointCloudXYZINormal {
54 fn intensities(&self) -> &[Float] {
55 &self.intensities
56 }
57}
58
59impl PointCloudWithNormal for PointCloudXYZINormal {
60 fn normals(&self) -> &[Normal] {
61 &self.normals
62 }
63
64 fn curvatures(&self) -> &[Float] {
65 &self.curvatures
66 }
67}