egml_core/model/geometry/primitives/
point.rs1use crate::impl_abstract_geometric_primitive_traits;
2use crate::model::geometry::primitives::{
3 AbstractGeometricPrimitive, AsAbstractGeometricPrimitive, AsAbstractGeometricPrimitiveMut,
4};
5use crate::model::geometry::{DirectPosition, Envelope};
6use nalgebra::Isometry3;
7
8#[derive(Debug, Clone, PartialEq, Default)]
12pub struct Point {
13 pub(crate) abstract_geometric_primitive: AbstractGeometricPrimitive,
14 pos: DirectPosition,
15}
16
17impl Point {
18 pub fn new(pos: DirectPosition) -> Self {
31 Self {
32 abstract_geometric_primitive: AbstractGeometricPrimitive::default(),
33 pos,
34 }
35 }
36
37 pub fn pos(&self) -> &DirectPosition {
39 &self.pos
40 }
41
42 pub fn set_pos(&mut self, pos: DirectPosition) {
43 self.pos = pos;
44 }
45}
46
47impl Point {
48 pub fn apply_transform(&mut self, m: &Isometry3<f64>) {
50 self.pos.apply_transform(m);
51 }
52
53 pub fn compute_envelope(&self) -> Envelope {
55 Envelope::new_unchecked(self.pos, self.pos)
56 }
57}
58
59impl AsAbstractGeometricPrimitive for Point {
60 fn abstract_geometric_primitive(&self) -> &AbstractGeometricPrimitive {
61 &self.abstract_geometric_primitive
62 }
63}
64
65impl AsAbstractGeometricPrimitiveMut for Point {
66 fn abstract_geometric_primitive_mut(&mut self) -> &mut AbstractGeometricPrimitive {
67 &mut self.abstract_geometric_primitive
68 }
69}
70
71impl_abstract_geometric_primitive_traits!(Point);