@@ -159,11 +159,12 @@ public final class Geometry: Hashable {
159159 case ( _, 0 ) :
160160 type = . extrude( [ ] , . default)
161161 children = paths. map { path in
162- let ( path, material) = path. vertexColorsToMaterial ( material: material)
162+ let ( temp, material) = path. vertexColorsToMaterial ( material: material)
163+ let ( path, offset) = temp. withNormalizedPosition ( )
163164 return Geometry (
164165 type: . extrude( [ path] , options) ,
165166 name: nil ,
166- transform: . identity ,
167+ transform: . translation ( offset ) ,
167168 material: material,
168169 smoothing: smoothing,
169170 children: [ ] ,
@@ -177,13 +178,14 @@ public final class Geometry: Hashable {
177178 type = . extrude( [ ] , . default)
178179 children = paths. flatMap { path in
179180 options. along. map { along in
181+ let ( along, offset) = along. withNormalizedPosition ( )
180182 let ( pair, material) = [ path, along] . vertexColorsToMaterial ( material: material)
181183 var options = options
182184 options. along = [ pair [ 1 ] ]
183185 return Geometry (
184186 type: . extrude( [ pair [ 0 ] ] , options) ,
185187 name: nil ,
186- transform: . identity ,
188+ transform: . translation ( offset ) ,
187189 material: material,
188190 smoothing: smoothing,
189191 children: [ ] ,
@@ -205,6 +207,7 @@ public final class Geometry: Hashable {
205207 // separate child geometry so they can be renderered individually
206208 type = . lathe( [ ] , segments: 0 )
207209 children = paths. map { path in
210+ // TODO: normalize path y-position for better caching
208211 let ( path, material) = path. vertexColorsToMaterial ( material: material)
209212 return Geometry (
210213 type: . lathe( [ path] , segments: segments) ,
@@ -230,11 +233,12 @@ public final class Geometry: Hashable {
230233 // separate child geometry so they can be renderered individually
231234 type = . fill( [ ] )
232235 children = paths. map { path in
233- let ( path, material) = path. vertexColorsToMaterial ( material: material)
236+ let ( temp, material) = path. vertexColorsToMaterial ( material: material)
237+ let ( path, offset) = temp. withNormalizedPosition ( )
234238 return Geometry (
235239 type: . fill( [ path] ) ,
236240 name: nil ,
237- transform: . identity ,
241+ transform: . translation ( offset ) ,
238242 material: material,
239243 smoothing: smoothing,
240244 children: [ ] ,
@@ -244,6 +248,7 @@ public final class Geometry: Hashable {
244248 material = children. first? . material ?? . default
245249 }
246250 case var . loft( paths) :
251+ // TODO: normalize all paths by their collective offset for better caching
247252 ( paths, material) = paths. vertexColorsToMaterial ( material: material)
248253 type = . loft( paths)
249254 case var . path( path) :
0 commit comments