Skip to main content

Crate altium_format

Crate altium_format 

Source
Expand description

Altium file format library for Rust.

This library provides read/write support for Altium Designer files including:

  • SchLib (Schematic symbol library)
  • PcbLib (PCB footprint library)
  • SchDoc (Schematic document)
  • PcbDoc (PCB document)

§Architecture

The library is organized into several modules:

  • types - Core data types (coordinates, units, layers, parameters)
  • traits - Serialization traits for derive macros
  • records - Record types for schematic and PCB primitives
  • io - File I/O utilities for CFB format
  • error - Error types

§Derive Macros

Record types can be defined using derive macros for automatic serialization:

use altium_format_derive::AltiumRecord;

#[derive(AltiumRecord)]
#[altium(record_id = 2, format = "params")]
pub struct SchPin {
    #[altium(flatten)]
    pub base: SchGraphicalBase,

    #[altium(param = "ELECTRICAL", default)]
    pub electrical: PinElectricalType,

    #[altium(unknown)]
    pub unknown_params: UnknownFields,
}

§Quick Start

§Reading a Schematic Library

use altium_format::io::SchLib;
use std::fs::File;
use std::io::BufReader;

let file = File::open("components.SchLib")?;
let lib = SchLib::open(BufReader::new(file))?;

for component in &lib.components {
    println!("Component: {}", component.name());
    println!("  Pins: {}", component.pin_count());
}

§Creating a Footprint

use altium_format::footprint::FootprintBuilder;
use altium_format::records::pcb::PcbPadShape;

let mut builder = FootprintBuilder::new("SOIC-8");
builder.add_dual_row_smd(
    4,      // pads per side
    1.27,   // pitch (mm)
    5.3,    // row spacing (mm)
    1.5,    // pad width (mm)
    0.6,    // pad height (mm)
    PcbPadShape::Rectangular,
);
let component = builder.build_deterministic(&mut ());

§Example

use altium_format::types::{Coord, CoordPoint, ParameterCollection};

// Parse parameters from Altium format
let params = ParameterCollection::from_string("|RECORD=1|NAME=Test|X=100mil|");
let name = params.get("NAME").unwrap().as_str();
let x = params.get("X").unwrap().as_coord_or(Coord::ZERO);

Re-exports§

pub use error::AltiumError;
pub use error::Result;
pub use query::Pattern;
pub use query::QueryMatch;
pub use query::Selector;
pub use query::SelectorEngine;
pub use query::SelectorParser;
pub use query::query_records;
pub use query::query_records_with_doc_name;
pub use traits::AltiumRecord;
pub use traits::FromBinary;
pub use traits::FromParamValue;
pub use traits::FromParams;
pub use traits::PcbPrimitive;
pub use traits::SchPrimitive;
pub use traits::ToBinary;
pub use traits::ToParamValue;
pub use traits::ToParams;
pub use tree::BreadthFirstWalker;
pub use tree::ParentRef;
pub use tree::RecordId;
pub use tree::RecordTree;
pub use tree::TreeRecord;
pub use tree::TreeWalker;
pub use types::Color;
pub use types::Coord;
pub use types::CoordPoint;
pub use types::CoordPoint3D;
pub use types::CoordRect;
pub use types::Layer;
pub use types::ParameterCollection;
pub use types::ParameterValue;
pub use types::Unit;
pub use types::UnknownFields;

Modules§

api
Multi-layer API for Altium file access.
dump
Pretty-printing utilities for dumping Altium file structures.
edit
Editing engine for programmatic modification of Altium schematics and PCBs.
error
Error types for the Altium library.
footprint
Footprint creation and manipulation module.
format
Binary format constants and record type identifiers.
io
I/O utilities for reading and writing Altium files.
ops
High-level operations for Altium file types.
query
Query systems for schematic records and documents.
records
Record types for Altium schematic and PCB primitives.
traits
Core traits for Altium record serialization and deserialization.
tree
Tree structure support for Altium record hierarchies.
types
Core types for Altium file parsing.

Derive Macros§

AltiumBase
Derive macro for Altium base types.
AltiumEnum
Derive macro for Altium enums with integer mapping.
AltiumRecord
Derive macro for Altium record types.