chiark / gitweb /
distort-stl: Subdivide only those triangles which need it
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 22 Nov 2018 00:29:29 +0000 (00:29 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 22 Nov 2018 00:29:29 +0000 (00:29 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
distort-stl

index cc03ec5e7aea0776a516e12f900159adbdb2fb6f..7a0ebeec8a7a36ac80c8046d5c526886d22fc10c 100755 (executable)
@@ -121,14 +121,18 @@ sub op__project_cylinder () {
     $project_cylinder_radius = shift_arg;
     $project_cylinder_max_d_theta = $fa * TAU/360;
 
-    while (project_cylinder_need_subdivide()) {
-       $output = [];
-       foreach my $t (@$triangles) {
+    my @small_enough = ();
+    while (my $t = shift @$triangles) {
+       if (!project_cylinder_triangle_need_subdivide $t) {
+           push @small_enough, $t;
+       } else {
+           local $output = $triangles;
            subdivide_triangle $t, \&append_triangle;
        }
-       $triangles = $output;
     }
 
+    $triangles = \@small_enough;
+
     $output = [];
     foreach my $t (@$triangles) {
        project_cylinder_tri $t;