1 2 3 pub trait GeometryBuilder { begin_geometry(&mut self)4 fn begin_geometry(&mut self); end_geometry(&mut self) -> Count5 fn end_geometry(&mut self) -> Count; abort_geometry(&mut self)6 fn abort_geometry(&mut self); add_triangle(&mut self, a: VertexId, b: VertexId, c: VertexId)7 fn add_triangle(&mut self, a: VertexId, b: VertexId, c: VertexId); 8 } 9 10 pub trait FillGeometryBuilder: GeometryBuilder { add_vertex(&mut self, vertex: &FillVertex) -> Result<VertexId, GeometryBuilderError>11 fn add_vertex(&mut self, vertex: &FillVertex) -> Result<VertexId, GeometryBuilderError>; 12 } 13 14 pub trait StrokeGeometryBuilder: GeometryBuilder { add_vertex(&mut self, vertex: &StrokeVertex) -> Result<VertexId, GeometryBuilderError>15 fn add_vertex(&mut self, vertex: &StrokeVertex) -> Result<VertexId, GeometryBuilderError>; 16 } 17 18 pub struct FillVertex<'l> { 19 position: Point, 20 src: &'l mut VertexSourceIterator, 21 } 22 23 pub struct StrokeVertex { 24 src: VertexSource, 25 position: Point, 26 normal: Vector, 27 advancement: f32, 28 side: Side, 29 } 30 31 32