From f4f6a7db5d2ae2afd7da808f020b6a0dfb19da07 Mon Sep 17 00:00:00 2001 From: Chris Hodapp Date: Sun, 16 Feb 2020 18:15:29 -0500 Subject: [PATCH] Sorta fix curve_horn_start --- README.md | 3 ++- src/main.rs | 57 ++++++++++++++--------------------------------------- 2 files changed, 17 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index ca6f8aa..6ef06b3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ ## Highest priority: -- Continue converting `curve_horn_*`. +- Fix issue with `curve_horn_*` that prevents geometry being joined in + middle. - Consider trampolining `to_mesh`. My call stack seems needlessly deep in spots. Can I make tail-recursive? - diff --git a/src/main.rs b/src/main.rs index ce0a803..a01a7eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -275,51 +275,23 @@ fn cube() -> OpenMesh { }.transform(geometry::Translation3::new(-0.5, -0.5, -0.5).to_homogeneous()) } -/* fn curve_horn_start() -> RuleStep { - // Seed is a square in XY, sidelength 1, centered at (0,0,0): - let seed = { - let m = OpenMesh { - verts: vec![ - vertex(0.0, 0.0, 0.0), - vertex(1.0, 0.0, 0.0), - vertex(1.0, 1.0, 0.0), - vertex(0.0, 1.0, 0.0), - ], - faces: vec![ - 0, 1, 2, - 0, 2, 3, - ], - idxs_entrance: vec![0], - idxs_exit: vec![0], - idxs_body: (0, 0), - }; - let xform = nalgebra::geometry::Translation3::new(-0.5, -0.5, 0.0).to_homogeneous(); - m.transform(xform) - }; - vec![ - // Since neither of the other two rules *start* with geometry: - RuleStep { geom: seed.clone(), - rule: Box::new(Rule::EmptyRule), - xform: nalgebra::geometry::Transform3::identity().to_homogeneous(), - }, - // Recurse in both directions: - RuleStep { geom: seed.clone(), - rule: Box::new(Rule::Recurse(curve_horn_thing_rule)), - xform: nalgebra::geometry::Transform3::identity().to_homogeneous(), - }, - RuleStep { geom: seed.clone(), - rule: Box::new(Rule::Recurse(curve_horn_thing_rule)), - xform: nalgebra::geometry::Rotation3::from_axis_angle( - &nalgebra::Vector3::y_axis(), - std::f32::consts::FRAC_PI_2).to_homogeneous(), - }, - ] + let id = nalgebra::geometry::Transform3::identity().to_homogeneous(); + let flip180 = nalgebra::geometry::Rotation3::from_axis_angle( + &nalgebra::Vector3::y_axis(), + std::f32::consts::PI).to_homogeneous(); + RuleStep { + geom: empty_mesh(), + final_geom: empty_mesh(), + children: vec![ + (Rule::Recurse(curve_horn_thing_rule), id), + (Rule::Recurse(curve_horn_thing_rule), flip180), + ], + } + // TODO: This has duplicate geometry in the middle because four + // vertices of each start point never technically connect. } -//use std::convert::TryFrom; -*/ - fn curve_horn_thing_rule() -> RuleStep { let y = &Vector3::y_axis(); @@ -442,4 +414,5 @@ fn main() { run_test(Rule::Recurse(cube_thing_rule), 3, "cube_thing"); run_test(Rule::Recurse(curve_horn_thing_rule), 100, "curve_horn_thing"); + run_test(Rule::Recurse(curve_horn_start), 100, "curve_horn2"); }