rust/land2d/src/lib.rs
branchtransitional_engine
changeset 15904 33798b649d9c
parent 15901 f39f0f614dbf
child 15905 022ec6b916b7
--- a/rust/land2d/src/lib.rs	Wed Jan 04 10:40:40 2023 +0100
+++ b/rust/land2d/src/lib.rs	Wed Jan 04 10:42:21 2023 +0100
@@ -1,5 +1,5 @@
 use std::{cmp, ops::Index, ops::IndexMut};
-
+use vec2d::Vec2D;
 use integral_geometry::{ArcPoints, EquidistantPoints, Line, Point, PotSize, Rect, Size, SizeMask};
 
 pub struct Land2D<T> {
@@ -295,6 +295,23 @@
     }
 }
 
+impl<T> From<Vec2D<T>> for Land2D<T> {
+    fn from(vec: Vec2D<T>) -> Self {
+        let actual_size = vec.size();
+        let pot_size = actual_size.next_power_of_two();
+
+        assert_eq!(actual_size, pot_size.size());
+
+        let top_left = Point::new(0, 0);
+        let play_box = Rect::from_size(top_left, actual_size);
+        Self {
+            play_box,
+            pixels: vec,
+            mask: pot_size.to_mask(),
+        }
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;