From 3c7014724e64a1acfeda0980b2549b30e468a549 Mon Sep 17 00:00:00 2001
From: Hanno Braun <hanno@braun-odw.eu>
Date: Tue, 30 Jan 2024 11:12:21 +0100
Subject: [PATCH] Refactor to reduce redundancy

---
 models/all/src/lib.rs | 44 ++++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 21 deletions(-)

diff --git a/models/all/src/lib.rs b/models/all/src/lib.rs
index d50aab1c3..4a303e082 100644
--- a/models/all/src/lib.rs
+++ b/models/all/src/lib.rs
@@ -1,7 +1,9 @@
 use fj::{
     core::{
         objects::Solid,
-        operations::{merge::Merge, transform::TransformObject},
+        operations::{
+            build::BuildSolid, merge::Merge, transform::TransformObject,
+        },
         services::Services,
     },
     math::{Scalar, Vector},
@@ -16,25 +18,25 @@ pub fn model(services: &mut Services) -> Solid {
     let axis = Vector::from([1., 1., 1.]).normalize();
     let angle_rad = Scalar::PI / 6.;
 
-    let cuboid = cuboid::model([1., 2., 3.], services)
-        .translate(offset * 1., services)
-        .rotate(axis * angle_rad * 1., services);
-    let spacer = spacer::model(2., 1., 1., services)
-        .translate(offset * 2., services)
-        .rotate(axis * angle_rad * 2., services);
-    let star = star::model(5, 2., 1., 1., services)
-        .translate(offset * 3., services)
-        .rotate(axis * angle_rad * 3., services);
-    let split = split::model(1., 0.2, services)
-        .translate(offset * 4., services)
-        .rotate(axis * angle_rad * 4., services);
-    let holes = holes::model(0.5, services)
-        .translate(offset * 5., services)
-        .rotate(axis * angle_rad * 5., services);
+    let models = [
+        cuboid::model([1., 2., 3.], services),
+        spacer::model(2., 1., 1., services),
+        star::model(5, 2., 1., 1., services),
+        split::model(1., 0.2, services),
+        holes::model(0.5, services),
+    ];
 
-    cuboid
-        .merge(&spacer)
-        .merge(&star)
-        .merge(&split)
-        .merge(&holes)
+    let mut all = Solid::empty();
+
+    for (i, model) in models.into_iter().enumerate() {
+        let f = i as f64;
+
+        let model = model
+            .translate(offset * f, services)
+            .rotate(axis * angle_rad * f, services);
+
+        all = all.merge(&model);
+    }
+
+    all
 }