mirror of https://codeberg.org/topola/topola.git
feat(drawing/drawing): Store boundaries in Drawing
This commit is contained in:
parent
33eb593fe9
commit
1505513552
|
|
@ -7,6 +7,8 @@ use super::write::{ListWriter, WriteSes};
|
|||
use crate::error::{ParseError, ParseErrorContext};
|
||||
use crate::math::PointWithRotation;
|
||||
use crate::ListToken;
|
||||
|
||||
use geo_types::{LineString, Polygon as GeoPolygon};
|
||||
use specctra_derive::{ReadDsn, WriteSes};
|
||||
use std::borrow::Cow;
|
||||
|
||||
|
|
@ -160,6 +162,18 @@ impl Boundary {
|
|||
Self::Rect(x) => Cow::Owned(x.coords()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_polygon(&self) -> GeoPolygon {
|
||||
GeoPolygon::new(
|
||||
LineString(
|
||||
self.coords()
|
||||
.iter()
|
||||
.map(|i| geo_types::coord! { x: i.x, y: i.y })
|
||||
.collect(),
|
||||
),
|
||||
Vec::new(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(ReadDsn, WriteSes, Debug, Clone, PartialEq)]
|
||||
|
|
@ -462,6 +476,20 @@ pub struct Polygon {
|
|||
pub coords: Vec<Point>,
|
||||
}
|
||||
|
||||
impl Polygon {
|
||||
pub fn to_polygon(&self) -> GeoPolygon {
|
||||
GeoPolygon::new(
|
||||
LineString(
|
||||
self.coords
|
||||
.iter()
|
||||
.map(|i| geo_types::coord! { x: i.x, y: i.y })
|
||||
.collect(),
|
||||
),
|
||||
Vec::new(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(ReadDsn, WriteSes, Debug, Clone, PartialEq)]
|
||||
pub struct Path {
|
||||
#[anon]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
use contracts_try::{debug_ensures, debug_invariant};
|
||||
use derive_getters::Getters;
|
||||
use geo::Point;
|
||||
use geo::{Point, Polygon};
|
||||
|
||||
use core::fmt;
|
||||
use rstar::{RTree, AABB};
|
||||
|
|
@ -141,6 +141,9 @@ pub struct Drawing<CW, Cel, R> {
|
|||
BendIndex,
|
||||
>,
|
||||
rules: R,
|
||||
|
||||
boundary: Polygon,
|
||||
place_boundary: Polygon,
|
||||
}
|
||||
|
||||
impl<CW, Cel, R> Drawing<CW, Cel, R> {
|
||||
|
|
@ -201,10 +204,18 @@ impl<CW: Clone, Cel: Copy, R> Drawing<CW, Cel, R> {
|
|||
|
||||
#[debug_invariant(self.test_if_looses_dont_infringe_each_other())]
|
||||
impl<CW: Clone, Cel: Copy, R: AccessRules> Drawing<CW, Cel, R> {
|
||||
pub fn new(rules: R, layer_count: usize) -> Self {
|
||||
pub fn new(
|
||||
rules: R,
|
||||
layer_count: usize,
|
||||
boundary: Polygon,
|
||||
place_boundary: Option<Polygon>,
|
||||
) -> Self {
|
||||
let place_boundary = place_boundary.unwrap_or_else(|| boundary.clone());
|
||||
Self {
|
||||
recording_geometry_with_rtree: RecordingGeometryWithRtree::new(layer_count),
|
||||
rules,
|
||||
boundary,
|
||||
place_boundary,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -184,6 +184,12 @@ impl SpecctraDesign {
|
|||
let mut board = Board::new(Layout::new(Drawing::new(
|
||||
mesadata,
|
||||
self.pcb.structure.layers.len(),
|
||||
self.pcb.structure.boundary.to_polygon(),
|
||||
self.pcb
|
||||
.structure
|
||||
.place_boundary
|
||||
.as_ref()
|
||||
.map(|i| i.to_polygon()),
|
||||
)));
|
||||
|
||||
// mapping of pin -> net prepared for adding pins
|
||||
|
|
|
|||
Loading…
Reference in New Issue