瀏覽代碼

Layer work

Kevin Lee 1 年之前
父節點
當前提交
d411875c2e
共有 6 個文件被更改,包括 64 次插入14 次删除
  1. 1 1
      src/ezcad/file.rs
  2. 47 11
      src/ezcad/layer.rs
  3. 2 1
      src/ezcad/mod.rs
  4. 4 0
      src/ezcad/object.rs
  5. 1 1
      src/ezcad/pen.rs
  6. 9 0
      src/ezcad/types.rs

+ 1 - 1
src/ezcad/file.rs

@@ -1,6 +1,6 @@
 use binrw::{BinRead, BinWrite, FilePtr64};
 
-use crate::{pen::PenHeader, types::Rgba, layer::LayerHeader};
+use crate::{layer::LayerHeader, pen::PenHeader, types::Rgba};
 
 #[derive(BinRead, Debug)]
 pub struct Header {

+ 47 - 11
src/ezcad/layer.rs

@@ -1,11 +1,47 @@
-use binrw::{BinRead, BinWrite};
-
-#[derive(BinRead, BinWrite, Debug)]
-pub struct LayerHeader {
-    pub layer_count: u32,
-    #[br(count = layer_count)]
-    pub layers: Vec<Layer>,
-}
-
-#[derive(BinRead, BinWrite, Debug)]
-pub struct Layer {}
+use binrw::{BinRead, BinWrite};
+
+use crate::{
+    object::Object,
+    types::{Field, WString, U32},
+};
+
+#[derive(BinRead, BinWrite, Debug)]
+pub struct LayerHeader {
+    pub layer_count: u32,
+    #[br(count = layer_count)]
+    pub layers: Vec<Layer>,
+}
+
+#[derive(BinRead, BinWrite, Debug)]
+pub struct Layer {
+    #[br(assert(field_count_1 == 17))]
+    field_count_1: u32, // Number of fields until objects
+    _unknown_1: [Field; 3],
+    pub name: WString,
+    pub count: U32,
+    _unknown_2: Field,
+    pub input_signal_wait_enable_mask: U32,
+    pub input_signal_wait_disable_mask: U32,
+    _unknown_3: [Field; 9],
+    pub object_count: u32,
+    #[br(count = object_count)]
+    pub objects: Vec<Object>,
+    #[br(assert(field_count_1 == 151))]
+    field_count_2: u32, // Number of remaining fields
+    _unknown_4: [Field; 54],
+    pub output_signal_start_enable_mask: U32,
+    pub output_signal_start_disable_mask: U32,
+    pub output_signal_end_enable_mask: U32,
+    pub output_signal_end_disable_mask: U32,
+    _unknown_5: [Field; 9],
+    pub fixture_offset: U32,
+    _unknown_6: [Field; 64],
+    pub output_signal_start_delay: U32,
+    pub output_signal_end_delay: U32,
+    pub input_signal_wait_enable: U32,
+    _unknown_7: [Field; 2],
+    pub output_signal_start_pulse: U32,
+    pub output_signal_end_pulse: U32,
+    _unknown_8: [Field; 12],
+    footer: u32,
+}

+ 2 - 1
src/ezcad/mod.rs

@@ -1,6 +1,7 @@
 pub mod array_of;
 pub mod field_of;
 pub mod file;
+pub mod layer;
+pub mod object;
 pub mod pen;
 pub mod types;
-pub mod layer;

+ 4 - 0
src/ezcad/object.rs

@@ -0,0 +1,4 @@
+use binrw::{BinRead, BinWrite};
+
+#[derive(BinRead, BinWrite, Debug)]
+pub struct Object {}

+ 1 - 1
src/ezcad/pen.rs

@@ -25,7 +25,7 @@ pub struct Pens {
 #[derive(BinRead, BinWrite, Debug)]
 pub struct Pen {
     #[br(assert(field_count == 236))]
-    pub field_count: u32,
+    field_count: u32,
     pub color: Color,
     pub name: WString,
     pub disabled: U32,

+ 9 - 0
src/ezcad/types.rs

@@ -75,3 +75,12 @@ pub enum ObjectType {
     Polygon = 6,
     Hatch = 32,
 }
+
+#[derive(BinRead, BinWrite, PartialEq, Debug)]
+#[brw(repr(u16))]
+#[repr(u16)]
+pub enum LineType {
+    Point = 0x0001,
+    Line = 0x0100,
+    Bezier = 0x0300,
+}