@@ -132,14 +132,13 @@ impl Triangulation {
132132 }
133133
134134 /// Add an obstacle delimited by the list of points on its edges.
135- pub fn add_obstacle ( & mut self , edges : Vec < Vec2 > ) {
136- self . inner . interiors_push ( LineString :: from (
137- edges. iter ( ) . map ( |v| ( v. x , v. y ) ) . collect :: < Vec < _ > > ( ) ,
138- ) ) ;
135+ pub fn add_obstacle ( & mut self , edges : impl IntoIterator < Item = Vec2 > ) {
136+ self . inner
137+ . interiors_push ( LineString :: from_iter ( edges. into_iter ( ) . map ( |v| ( v. x , v. y ) ) ) ) ;
139138 }
140139
141140 /// Add obstacles delimited by the list of points on their edges.
142- pub fn add_obstacles ( & mut self , obstacles : impl IntoIterator < Item = Vec < Vec2 > > ) {
141+ pub fn add_obstacles ( & mut self , obstacles : impl IntoIterator < Item = impl IntoIterator < Item = Vec2 > > ) {
143142 let ( exterior, interiors) =
144143 std:: mem:: replace ( & mut self . inner , GeoPolygon :: new ( LineString ( vec ! [ ] ) , vec ! [ ] ) )
145144 . into_inner ( ) ;
@@ -148,12 +147,7 @@ impl Triangulation {
148147 interiors
149148 . into_iter ( )
150149 . chain ( obstacles. into_iter ( ) . map ( |edges| {
151- LineString (
152- edges
153- . iter ( )
154- . map ( |v| Coord :: from ( ( v. x , v. y ) ) )
155- . collect :: < Vec < _ > > ( ) ,
156- )
150+ LineString :: from_iter ( edges. into_iter ( ) . map ( |v| Coord :: from ( ( v. x , v. y ) ) ) )
157151 } ) )
158152 . collect :: < Vec < _ > > ( ) ,
159153 ) ;
@@ -728,17 +722,13 @@ mod inflate {
728722
729723 fn round_line ( line : & Line < f32 > , distance : f32 , arc_segments : u32 ) -> LineString < f32 > {
730724 let Some ( normal) = segment_normal ( & line. start , & line. end ) else {
731- return LineString :: new (
732- ( 0 ..( arc_segments * 2 ) )
733- . map ( |i| {
734- let angle = i as f32 * TAU / ( arc_segments * 2 ) as f32 ;
735- Coord {
736- x : line. start . x + angle. cos ( ) * distance,
737- y : line. start . y + angle. sin ( ) * distance,
738- }
739- } )
740- . collect ( ) ,
741- ) ;
725+ return LineString :: from_iter ( ( 0 ..( arc_segments * 2 ) ) . map ( |i| {
726+ let angle = i as f32 * TAU / ( arc_segments * 2 ) as f32 ;
727+ Coord {
728+ x : line. start . x + angle. cos ( ) * distance,
729+ y : line. start . y + angle. sin ( ) * distance,
730+ }
731+ } ) ) ;
742732 } ;
743733 let mut vertices = Vec :: with_capacity ( ( arc_segments as usize + 2 ) * 2 ) ;
744734
0 commit comments