Exemple #1
0
        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;
        }
Exemple #2
0
        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++;
            }
        }
Exemple #3
0
 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";
 }
Exemple #4
0
        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;
        }