diff --git a/src/lib.rs b/src/lib.rs index 2ec04d3..bf21f5c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,9 +21,16 @@ pub(crate) mod proto; pub use crate::client::{ClientBuilder, KiCadClient}; pub use crate::error::KiCadError; pub use crate::model::board::{ - ArcStartMidEndNm, BoardEnabledLayers, BoardLayerInfo, BoardNet, BoardOriginKind, PadNetEntry, - PadShapeAsPolygonEntry, PadstackPresenceEntry, PolyLineNm, PolyLineNodeGeometryNm, - PolygonWithHolesNm, Vector2Nm, + ArcStartMidEndNm, BoardEditorAppearanceSettings, BoardEnabledLayers, BoardFlipMode, + BoardLayerClass, BoardLayerGraphicsDefault, BoardLayerInfo, BoardNet, BoardOriginKind, + BoardStackup, BoardStackupDielectricProperties, BoardStackupLayer, BoardStackupLayerType, + ColorRgba, GraphicsDefaults, InactiveLayerDisplayMode, NetClassBoardSettings, + NetClassForNetEntry, NetClassInfo, NetClassType, NetColorDisplayMode, PadNetEntry, + PadShapeAsPolygonEntry, PadstackPresenceEntry, PadstackPresenceState, PcbArc, + PcbBoardGraphicShape, PcbBoardText, PcbBoardTextBox, PcbDimension, PcbField, PcbFootprint, + PcbGroup, PcbItem, PcbPad, PcbPadType, PcbTrack, PcbUnknownItem, PcbVia, PcbViaType, PcbZone, + PcbZoneType, PolyLineNm, PolyLineNodeGeometryNm, PolygonWithHolesNm, RatsnestDisplayMode, + Vector2Nm, }; pub use crate::model::common::{ DocumentSpecifier, DocumentType, ItemBoundingBox, ItemHitTestResult, PcbObjectTypeCode, diff --git a/src/model/board.rs b/src/model/board.rs index 9b876c3..ca3f97d 100644 --- a/src/model/board.rs +++ b/src/model/board.rs @@ -101,7 +101,323 @@ pub struct PadstackPresenceEntry { pub item_id: String, pub layer_id: i32, pub layer_name: String, - pub presence: String, + pub presence: PadstackPresenceState, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum PadstackPresenceState { + Present, + NotPresent, + Unknown(i32), +} + +impl std::fmt::Display for PadstackPresenceState { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Present => write!(f, "PSP_PRESENT"), + Self::NotPresent => write!(f, "PSP_NOT_PRESENT"), + Self::Unknown(value) => write!(f, "UNKNOWN({value})"), + } + } +} + +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct ColorRgba { + pub r: f64, + pub g: f64, + pub b: f64, + pub a: f64, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum BoardStackupLayerType { + Copper, + Dielectric, + Silkscreen, + SolderMask, + SolderPaste, + Undefined, + Unknown(i32), +} + +#[derive(Clone, Debug, PartialEq)] +pub struct BoardStackupDielectricProperties { + pub epsilon_r: f64, + pub loss_tangent: f64, + pub material_name: String, + pub thickness_nm: Option, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct BoardStackupLayer { + pub layer: BoardLayerInfo, + pub user_name: String, + pub material_name: String, + pub enabled: bool, + pub thickness_nm: Option, + pub layer_type: BoardStackupLayerType, + pub color: Option, + pub dielectric_layers: Vec, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct BoardStackup { + pub finish_type_name: String, + pub impedance_controlled: bool, + pub edge_has_castellated_pads: bool, + pub edge_has_edge_plating: bool, + pub layers: Vec, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum BoardLayerClass { + Silkscreen, + Copper, + Edges, + Courtyard, + Fabrication, + Other, + Unknown(i32), +} + +#[derive(Clone, Debug, PartialEq)] +pub struct BoardLayerGraphicsDefault { + pub layer_class: BoardLayerClass, + pub line_thickness_nm: Option, + pub text_font_name: Option, + pub text_size_nm: Option, + pub text_stroke_width_nm: Option, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct GraphicsDefaults { + pub layers: Vec, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum InactiveLayerDisplayMode { + Normal, + Dimmed, + Hidden, + Unknown(i32), +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum NetColorDisplayMode { + All, + Ratsnest, + Off, + Unknown(i32), +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum BoardFlipMode { + Normal, + FlippedX, + Unknown(i32), +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum RatsnestDisplayMode { + AllLayers, + VisibleLayers, + Unknown(i32), +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct BoardEditorAppearanceSettings { + pub inactive_layer_display: InactiveLayerDisplayMode, + pub net_color_display: NetColorDisplayMode, + pub board_flip: BoardFlipMode, + pub ratsnest_display: RatsnestDisplayMode, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum NetClassType { + Explicit, + Implicit, + Unknown(i32), +} + +#[derive(Clone, Debug, PartialEq)] +pub struct NetClassBoardSettings { + pub clearance_nm: Option, + pub track_width_nm: Option, + pub diff_pair_track_width_nm: Option, + pub diff_pair_gap_nm: Option, + pub diff_pair_via_gap_nm: Option, + pub color: Option, + pub tuning_profile: Option, + pub has_via_stack: bool, + pub has_microvia_stack: bool, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct NetClassInfo { + pub name: String, + pub priority: Option, + pub class_type: NetClassType, + pub constituents: Vec, + pub board: Option, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct NetClassForNetEntry { + pub net_name: String, + pub net_class: NetClassInfo, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum PcbViaType { + Through, + BlindBuried, + Micro, + Blind, + Buried, + Unknown(i32), +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum PcbPadType { + Pth, + Smd, + EdgeConnector, + Npth, + Unknown(i32), +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum PcbZoneType { + Copper, + Graphical, + RuleArea, + Teardrop, + Unknown(i32), +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbTrack { + pub id: Option, + pub start_nm: Option, + pub end_nm: Option, + pub width_nm: Option, + pub layer: BoardLayerInfo, + pub net: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbArc { + pub id: Option, + pub start_nm: Option, + pub mid_nm: Option, + pub end_nm: Option, + pub width_nm: Option, + pub layer: BoardLayerInfo, + pub net: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbVia { + pub id: Option, + pub position_nm: Option, + pub via_type: PcbViaType, + pub net: Option, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct PcbFootprint { + pub id: Option, + pub reference: Option, + pub position_nm: Option, + pub orientation_deg: Option, + pub layer: BoardLayerInfo, + pub pad_count: usize, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbPad { + pub id: Option, + pub number: String, + pub pad_type: PcbPadType, + pub position_nm: Option, + pub net: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbBoardGraphicShape { + pub id: Option, + pub layer: BoardLayerInfo, + pub net: Option, + pub geometry_kind: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbBoardText { + pub id: Option, + pub layer: BoardLayerInfo, + pub text: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbBoardTextBox { + pub id: Option, + pub layer: BoardLayerInfo, + pub text: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbField { + pub name: String, + pub visible: bool, + pub text: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbZone { + pub id: Option, + pub name: String, + pub zone_type: PcbZoneType, + pub layer_count: usize, + pub filled: bool, + pub polygon_count: usize, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbDimension { + pub id: Option, + pub layer: BoardLayerInfo, + pub text: Option, + pub style_kind: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbGroup { + pub id: Option, + pub name: String, + pub item_count: usize, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PcbUnknownItem { + pub type_url: String, + pub raw_len: usize, +} + +#[derive(Clone, Debug, PartialEq)] +pub enum PcbItem { + Track(PcbTrack), + Arc(PcbArc), + Via(PcbVia), + Footprint(PcbFootprint), + Pad(PcbPad), + BoardGraphicShape(PcbBoardGraphicShape), + BoardText(PcbBoardText), + BoardTextBox(PcbBoardTextBox), + Field(PcbField), + Zone(PcbZone), + Dimension(PcbDimension), + Group(PcbGroup), + Unknown(PcbUnknownItem), } #[cfg(test)]