@@ -80,6 +80,25 @@ pub struct Node {
8080 pub properties : Properties ,
8181}
8282
83+ impl From < & lrs_generated:: Point > for Point {
84+ fn from ( fb_point : & lrs_generated:: Point ) -> Self {
85+ point ! {
86+ x: fb_point. x( ) ,
87+ y: fb_point. y( ) ,
88+ }
89+ }
90+ }
91+
92+ impl From < lrs_generated:: Node < ' _ > > for Node {
93+ fn from ( fb_node : lrs_generated:: Node ) -> Self {
94+ Self {
95+ id : fb_node. id ( ) . to_owned ( ) ,
96+ geometry : fb_node. geometry ( ) . map ( Point :: from) ,
97+ properties : from_fb ( fb_node. properties ( ) ) ,
98+ }
99+ }
100+ }
101+
83102/// A segment is a topological element of the [`Lrs`] that represents a piece of the [`Curve`] of an [`Lrm`]
84103///
85104/// It has a start and end [`Node`].
@@ -94,6 +113,17 @@ pub struct Segment {
94113 pub end_node : NodeHandle ,
95114}
96115
116+ impl From < lrs_generated:: Segment < ' _ > > for Segment {
117+ fn from ( fb_segment : lrs_generated:: Segment ) -> Self {
118+ Self {
119+ id : fb_segment. id ( ) . to_owned ( ) ,
120+ properties : from_fb ( fb_segment. properties ( ) ) ,
121+ start_node : NodeHandle ( fb_segment. start_node_index ( ) as usize ) ,
122+ end_node : NodeHandle ( fb_segment. end_node_index ( ) as usize ) ,
123+ }
124+ }
125+ }
126+
97127/// The result of a projection onto an [`LrmScale`].
98128pub struct LrmProjection {
99129 /// Contains `measure` ([`LrmScaleMeasure`]) and `lrm` ([`LrmHandle`]).
@@ -259,12 +289,7 @@ impl<CurveImpl: Curve> Lrs<CurveImpl> {
259289 . projected_anchors ( )
260290 . map ( |anchors| {
261291 let projected_anchor = anchors. get ( idx) ;
262- let geometry = projected_anchor. geometry ( ) . map ( |geom| {
263- point ! {
264- x: geom. x( ) ,
265- y: geom. y( ) ,
266- }
267- } ) ;
292+ let geometry = projected_anchor. geometry ( ) . map ( Point :: from) ;
268293 ( projected_anchor. distance_along_curve ( ) , geometry)
269294 } )
270295 . unwrap_or_else ( || project ( & anchor, curve) ) ;
@@ -304,25 +329,11 @@ impl<CurveImpl: Curve> Lrs<CurveImpl> {
304329 }
305330
306331 for raw_node in lrs. nodes ( ) . unwrap_or_default ( ) . iter ( ) {
307- result. nodes . push ( Node {
308- id : raw_node. id ( ) . to_owned ( ) ,
309- geometry : raw_node. geometry ( ) . map ( |geom| {
310- point ! {
311- x: geom. x( ) ,
312- y: geom. y( ) ,
313- }
314- } ) ,
315- properties : from_fb ( raw_node. properties ( ) ) ,
316- } ) ;
332+ result. nodes . push ( Node :: from ( raw_node) ) ;
317333 }
318334
319335 for raw_segment in lrs. segments ( ) . unwrap_or_default ( ) . iter ( ) {
320- result. segments . push ( Segment {
321- id : raw_segment. id ( ) . to_owned ( ) ,
322- properties : from_fb ( raw_segment. properties ( ) ) ,
323- start_node : NodeHandle ( raw_segment. start_node_index ( ) as usize ) ,
324- end_node : NodeHandle ( raw_segment. end_node_index ( ) as usize ) ,
325- } )
336+ result. segments . push ( Segment :: from ( raw_segment) )
326337 }
327338 Ok ( result)
328339 }
0 commit comments