public Arc(Vec2 center, Vec2 start, Vec2 end, double diameter, double width, string layer, string net) { Net = net; Layer = new string[] { layer }; Nodes = new RouteNode[2]; Nodes[0] = new RouteNode(start, width, this); Nodes[1] = new RouteNode(end, width, this); Type = "ARC"; double angle; double aStart = (end - center).Angle(); double aEnd = (start - center).Angle(); if (aEnd < aStart) angle = (Math.PI * 2.0 - aStart) + aEnd; else angle = aEnd - aStart; Length = angle * diameter / 2; }
public Via(Dictionary<string, PadStack> PadStacks, Vec2 pos, string padstack, string net) { Net = net; PadStack ps = PadStacks[padstack]; Layer = new string[ps.PadInfo.Count]; Nodes = new RouteNode[ps.PadInfo.Count]; Type = "VIA"; int i = 0; foreach (KeyValuePair<string, PadStack.PadStackLayerDef> def in ps.PadInfo) { Layer[i] = def.Key; Nodes[i] = new RouteNode(pos, Math.Min(def.Value.sx, def.Value.sy), this); i++; } }
public Segment(Vec2 p1, Vec2 p2, double width, string layer, string net) { Net = net; Layer = new string[] { layer }; Nodes = new RouteNode[2]; Nodes[0] = new RouteNode(p1, width, this); Nodes[1] = new RouteNode(p2, width, this); Length = Maths.Dist(Nodes[0].Pos, Nodes[1].Pos); Type = "TRACK"; }
public IntersectResult Intersect(RouteNode node) { IntersectResult res = new IntersectResult(); double dist = Maths.Dist(this.Pos, node.Pos); if (dist < (this.Diameter / 2.0) + (node.Diameter / 2.0)) { res.dist = dist; res.location = (this.Pos + node.Pos) / 2.0; res.node1 = this; res.node2 = node; res.Intersects = true; return res; } res.dist = dist; res.Intersects = false; return res; }