mod.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use ezcad::{array_of::ArrayOf, layer::Layer, pen::Pen};
  2. use serde::{Deserialize, Serialize};
  3. use self::pen::{ClonePen, ImportExportPen, PatchPen, PatternPen};
  4. pub mod object;
  5. pub mod pen;
  6. #[derive(Debug, Serialize, Deserialize)]
  7. pub enum Operation {
  8. PatchPen(PatchPen),
  9. ClonePen(ClonePen),
  10. PatternPen(PatternPen),
  11. ExportPen(ImportExportPen),
  12. ImportPen(ImportExportPen),
  13. // ExportObject(ExportObject),
  14. // ImportObject(ImportObject),
  15. // DeleteObjects(DeleteObjects),
  16. // MoveObject(MoveObject),
  17. // Array(Array),
  18. }
  19. pub trait Operations {
  20. fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>);
  21. }
  22. impl Operations for Vec<Operation> {
  23. fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>) {
  24. for op in self {
  25. match op {
  26. Operation::PatchPen(x) => x.patch(pens),
  27. Operation::ClonePen(x) => x.clone(pens),
  28. Operation::PatternPen(x) => x.pattern(pens),
  29. Operation::ImportPen(x) => x.import(pens),
  30. Operation::ExportPen(x) => x.export(pens),
  31. // Operation::ExportObject(x) => x.export(layers),
  32. // Operation::ImportObject(x) => x.import(layers),
  33. // Operation::DeleteObjects(x) => x.delete(layers),
  34. // Operation::MoveObject(x) => x.r#move(layers),
  35. // Operation::Array(x) => x.generate(pens, layers),
  36. }
  37. }
  38. }
  39. }
  40. #[derive(Debug, Serialize, Deserialize)]
  41. #[serde(rename_all = "PascalCase")]
  42. pub struct Config {
  43. pub ops: Vec<Operation>,
  44. }