circle.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use std::fmt::Debug;
  2. use binrw::{BinRead, BinWrite};
  3. use diff::Diff;
  4. use crate::{
  5. field_of::FieldOf,
  6. types::{ObjectType, Coordinate, F64, U32},
  7. };
  8. use super::{ObjectCore, Translate, ObjectModified};
  9. #[cfg_attr(feature = "default-debug", derive(Debug))]
  10. #[derive(BinRead, BinWrite, Clone, Diff, PartialEq)]
  11. #[diff(attr(
  12. #[derive(Debug, PartialEq)]
  13. ))]
  14. pub struct Circle {
  15. pub core: ObjectCore,
  16. #[brw(magic(6u32))] // Number of following fields in struct
  17. pub origin: FieldOf<Coordinate>,
  18. pub radius: F64,
  19. pub start_angle: F64, // Radians
  20. pub clockwise: U32,
  21. pub modified: ObjectModified,
  22. }
  23. // Custom Debug implementation to only print known fields
  24. #[cfg(not(feature = "default-debug"))]
  25. impl Debug for Circle {
  26. fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  27. f.debug_struct("Circle")
  28. .field("core", &self.core)
  29. .field("origin", &self.origin)
  30. .field("radius", &self.radius)
  31. .field("start_angle", &self.start_angle)
  32. .field("clockwise", &self.clockwise)
  33. .finish()
  34. }
  35. }
  36. impl Default for Circle {
  37. fn default() -> Self {
  38. Self {
  39. core: ObjectCore::default(ObjectType::Circle),
  40. origin: Coordinate { x: 0.0, y: 0.0 }.into(),
  41. radius: 0.0.into(),
  42. start_angle: 0.0.into(),
  43. clockwise: 0.into(),
  44. modified: ObjectModified::default(),
  45. }
  46. }
  47. }
  48. impl Translate for Circle {
  49. fn move_absolute(&mut self, origin: Option<Coordinate>, z: Option<f64>) {
  50. origin.map(|origin| *self.origin = origin);
  51. self.core.move_absolute(origin, z);
  52. }
  53. fn move_relative(&mut self, delta: Option<Coordinate>, z: Option<f64>) {
  54. delta.map(|delta| *self.origin += delta);
  55. self.core.move_relative(delta, z);
  56. }
  57. }