public static System.Drawing.Image Icon(Element e) { if (e is Pump) return PumpIcon; else if (e is Sink) return SinkIcon; else if (e is Merger) return MergerIcon; else if (e is Splitter) return SplitterIcon; else if (e is AdjustableSplitter) return AdjSplitterIcon; throw new ArgumentException("Element not implemented, " + e.GetType().Name); }
//, Element element, Point end) public Collision(Point intersection, Element element, Point from, Point to) { bool left = from.X < element.Center.X; bool up = from.Y < element.Center.Y; bool targetLeft = to.X < element.Center.X; bool targetUp = to.Y < element.Center.Y; this.SenderIsOnLeft = left; this.SenderIsUp = up; this.TargetIsUp = targetUp; this.TargetIsOnLeft = targetLeft; this.Element = element; this.Intersection = intersection; Point closerMargin = new Point(); if (left) if (up) { closerMargin = element.D; LeftCloserMargin = element.A; RightCloserMargin = element.C; InverseCloserMargin = element.B; } else { closerMargin = element.A; this.LeftCloserMargin = element.D; this.RightCloserMargin = element.B; this.InverseCloserMargin = element.C; } else if (up) { closerMargin = element.C; this.LeftCloserMargin = element.D; this.RightCloserMargin = element.B; this.InverseCloserMargin = element.A; } else { closerMargin = element.B; this.LeftCloserMargin = element.A; this.RightCloserMargin = element.D; this.InverseCloserMargin = element.C; } this.CloserMargin = closerMargin; //this.CloserMargin = Offset(CloserMargin, element, targetLeft, targetUp); //this.LeftCloserMargin = Offset(LeftCloserMargin, element, targetLeft, targetUp); //this.RightCloserMargin = Offset(RightCloserMargin, element, targetLeft, targetUp); //this.InverseCloserMargin = Offset(InverseCloserMargin, element, targetLeft, targetUp); }
public Collision(Element element, Point from, Point to) { bool left = from.X < element.Center.X; bool up = from.Y < element.Center.Y; bool targetLeft = to.X < element.Center.X; bool targetUp = to.Y < element.Center.Y; this.SenderIsOnLeft = left; this.SenderIsUp = up; this.TargetIsUp = targetUp; this.TargetIsOnLeft = targetLeft; this.Element = element; }
public ConnectionZone(Point margin, Element parent) { this.Margin = margin; this.Parent = parent; }
public ConnectionZone(Point margin, Element parent, bool isInflow) { this.Parent = parent; this.Margin = margin; this.isInFlow = isInflow; }
public ConnectionZone(int x, int y, Element parent, bool isInFlow) : this(new Point(x, y), parent, isInFlow) { }
private Point Offset(Point closerMargin, Element element, bool targetLeft, bool targetUp) { int xD = targetLeft ? -1 : 1; int yD = targetUp ? -1 : 1; if (xD < 0) xD = -1; else xD = 1; if (yD < 0) yD = -1; else yD = 1; xD *= 5; yD *= 5; closerMargin.X += xD; closerMargin.Y += yD; return closerMargin; }
static bool Intersects(Point p1, Point p2, Element r) { return LineIntersectsLine(p1, p2, new Point(r.X, r.Y), new Point(r.X + r.Width, r.Y)) || LineIntersectsLine(p1, p2, new Point(r.X + r.Width, r.Y), new Point(r.X + r.Width, r.Y + r.Height)) || LineIntersectsLine(p1, p2, new Point(r.X + r.Width, r.Y + r.Height), new Point(r.X, r.Y + r.Height)) || LineIntersectsLine(p1, p2, new Point(r.X, r.Y + r.Height), new Point(r.X, r.Y)) || (r.Contains(p1) && r.Contains(p2)); }