MCPcopy Create free account
hub / github.com/emilk/egui_plot / add_shapes

Method add_shapes

egui_plot/src/items/box_plot.rs:331–392  ·  view source on GitHub ↗
(&self, transform: &PlotTransform, highlighted: bool, shapes: &mut Vec<Shape>)

Source from the content-addressed store, hash-verified

329 }
330
331 pub(in crate::items) fn add_shapes(&self, transform: &PlotTransform, highlighted: bool, shapes: &mut Vec<Shape>) {
332 let (stroke, fill) = if highlighted {
333 highlighted_color(self.stroke, self.fill)
334 } else {
335 (self.stroke, self.fill)
336 };
337
338 let rect = transform.rect_from_values(
339 &self.point_at(self.argument - self.box_width / 2.0, self.spread.quartile1),
340 &self.point_at(self.argument + self.box_width / 2.0, self.spread.quartile3),
341 );
342 let rect = Shape::Rect(RectShape::new(
343 rect,
344 CornerRadius::ZERO,
345 fill,
346 stroke,
347 egui::StrokeKind::Inside,
348 ));
349 shapes.push(rect);
350
351 let line_between = |v1, v2| {
352 Shape::line_segment(
353 [transform.position_from_point(&v1), transform.position_from_point(&v2)],
354 stroke,
355 )
356 };
357 let median = line_between(
358 self.point_at(self.argument - self.box_width / 2.0, self.spread.median),
359 self.point_at(self.argument + self.box_width / 2.0, self.spread.median),
360 );
361 shapes.push(median);
362
363 if self.spread.upper_whisker > self.spread.quartile3 {
364 let high_whisker = line_between(
365 self.point_at(self.argument, self.spread.quartile3),
366 self.point_at(self.argument, self.spread.upper_whisker),
367 );
368 shapes.push(high_whisker);
369 if self.box_width > 0.0 {
370 let high_whisker_end = line_between(
371 self.point_at(self.argument - self.whisker_width / 2.0, self.spread.upper_whisker),
372 self.point_at(self.argument + self.whisker_width / 2.0, self.spread.upper_whisker),
373 );
374 shapes.push(high_whisker_end);
375 }
376 }
377
378 if self.spread.lower_whisker < self.spread.quartile1 {
379 let low_whisker = line_between(
380 self.point_at(self.argument, self.spread.quartile1),
381 self.point_at(self.argument, self.spread.lower_whisker),
382 );
383 shapes.push(low_whisker);
384 if self.box_width > 0.0 {
385 let low_whisker_end = line_between(
386 self.point_at(self.argument - self.whisker_width / 2.0, self.spread.lower_whisker),
387 self.point_at(self.argument + self.whisker_width / 2.0, self.spread.lower_whisker),
388 );

Callers 2

shapesMethod · 0.45
on_hoverMethod · 0.45

Calls 4

highlighted_colorFunction · 0.85
rect_from_valuesMethod · 0.80
point_atMethod · 0.80
position_from_pointMethod · 0.80

Tested by

no test coverage detected