Hoist NaN check prior to flattening

Signed-off-by: Nico Burns <nico@nicoburns.com>
diff --git a/sparse_strips/vello_common/src/flatten.rs b/sparse_strips/vello_common/src/flatten.rs
index 2c15811..cca9c4c 100644
--- a/sparse_strips/vello_common/src/flatten.rs
+++ b/sparse_strips/vello_common/src/flatten.rs
@@ -74,38 +74,40 @@
     line_buf.clear();
     let mut start = kurbo::Point::default();
     let mut p0 = kurbo::Point::default();
-    let iter = path.iter().map(|el| affine * el);
 
     let mut closed = false;
     let mut is_nan = false;
 
-    kurbo::flatten(iter, TOL, |el| {
-        is_nan |= el.is_nan();
-
-        match el {
-            kurbo::PathEl::MoveTo(p) => {
-                if !closed && p0 != start {
-                    close_path(start, p0, line_buf);
-                }
-
-                closed = false;
-                start = p;
-                p0 = p;
-            }
-            kurbo::PathEl::LineTo(p) => {
-                let pt0 = Point::new(p0.x as f32, p0.y as f32);
-                let pt1 = Point::new(p.x as f32, p.y as f32);
-                line_buf.push(Line::new(pt0, pt1));
-                p0 = p;
-            }
-            el @ (kurbo::PathEl::QuadTo(_, _) | kurbo::PathEl::CurveTo(_, _, _)) => {
-                unreachable!("Path has been flattened, so shouldn't contain {el:?}.")
-            }
-            kurbo::PathEl::ClosePath => {
-                closed = true;
-
+    let iter = path
+        .iter()
+        .take_while(|el| {
+            is_nan |= el.is_nan();
+            !is_nan
+        })
+        .map(|el| affine * el);
+    kurbo::flatten(iter, TOL, |el|  match el {
+        kurbo::PathEl::MoveTo(p) => {
+            if !closed && p0 != start {
                 close_path(start, p0, line_buf);
             }
+
+            closed = false;
+            start = p;
+            p0 = p;
+        }
+        kurbo::PathEl::LineTo(p) => {
+            let pt0 = Point::new(p0.x as f32, p0.y as f32);
+            let pt1 = Point::new(p.x as f32, p.y as f32);
+            line_buf.push(Line::new(pt0, pt1));
+            p0 = p;
+        }
+        el @ (kurbo::PathEl::QuadTo(_, _) | kurbo::PathEl::CurveTo(_, _, _)) => {
+            unreachable!("Path has been flattened, so shouldn't contain {el:?}.")
+        }
+        kurbo::PathEl::ClosePath => {
+            closed = true;
+
+            close_path(start, p0, line_buf);
         }
     });