rules: use net as one of the conditions instead of netclass

This commit is contained in:
Mikolaj Wielgus 2024-02-05 23:57:24 +00:00
parent 17209c2a65
commit a395da4740
3 changed files with 18 additions and 27 deletions

View File

@ -229,10 +229,13 @@ where
} }
} }
impl<'a, W, R: RulesTrait> GetConditions for GenericPrimitive<'a, W, R> { impl<'a, W, R: RulesTrait> GetConditions for GenericPrimitive<'a, W, R>
where
GenericPrimitive<'a, W, R>: GetNet,
{
fn conditions(&self) -> Conditions { fn conditions(&self) -> Conditions {
Conditions { Conditions {
netclass: Some("NETCLASS_A".to_string()), net: self.net(),
region: Some("A".to_string()), region: Some("A".to_string()),
layer: Some("F.Cu".to_string()), layer: Some("F.Cu".to_string()),
} }

View File

@ -9,7 +9,7 @@ pub trait GetConditions {
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct Conditions { pub struct Conditions {
pub netclass: Option<String>, pub net: i64,
pub region: Option<String>, pub region: Option<String>,
pub layer: Option<String>, pub layer: Option<String>,
} }

View File

@ -59,21 +59,15 @@ use crate::math::Circle;
use crate::router::Router; use crate::router::Router;
struct SimpleRules { struct SimpleRules {
netclass_clearances: HashMap<(String, String), f64>, net_clearances: HashMap<(i64, i64), f64>,
} }
impl RulesTrait for SimpleRules { impl RulesTrait for SimpleRules {
fn clearance(&self, conditions1: &Conditions, conditions2: &Conditions) -> f64 { fn clearance(&self, conditions1: &Conditions, conditions2: &Conditions) -> f64 {
if let (Some(ref netclass1), Some(ref netclass2)) = *self
(conditions1.netclass.clone(), conditions2.netclass.clone()) .net_clearances
{ .get(&(conditions1.net, conditions2.net))
*self .unwrap_or(&10.0)
.netclass_clearances
.get(&(netclass1.to_string(), netclass2.to_string()))
.unwrap_or(&10.0)
} else {
5.0
}
} }
/*fn clearance_limit( /*fn clearance_limit(
@ -248,19 +242,13 @@ fn main() -> Result<(), anyhow::Error> {
let mut event_pump = sdl_context.event_pump().unwrap(); let mut event_pump = sdl_context.event_pump().unwrap();
let _i = 0; let _i = 0;
let mut router = Router::new(SimpleRules { let mut router = Router::new(SimpleRules {
netclass_clearances: HashMap::from([ net_clearances: HashMap::from([
( ((1, 2), 5.0),
(String::from("NETCLASS_A"), String::from("NETCLASS_A")), ((2, 1), 5.0),
5.0, ((2, 3), 10.0),
), ((3, 2), 10.0),
( ((3, 4), 15.0),
(String::from("NETCLASS_A"), String::from("NETCLASS_B")), ((4, 3), 15.0),
10.0,
),
(
(String::from("NETCLASS_B"), String::from("NETCLASS_A")),
10.0,
),
]), ]),
}); });