///// <summary> ///// key - Пересекаемый набор линий (другой объект)<br/> ///// value - Список пересекаемых линий (линия данного объекта, линии другого объекта) ///// </summary> public void CheckIntersects(LineSet otherLineSet) { var otherIntersects = otherLineSet.IntersectLineSets; IntersectLines thisIntersectLines = new IntersectLines(); IntersectLines otherIntersectLines = new IntersectLines(); foreach (var line in lines) { List <Line> lineInters = new List <Line>(); foreach (var otherLine in otherLineSet.lines) { if (line.IsIntersect(otherLine)) { lineInters.Add(otherLine); //intersects.Add(otherItem); // В набор текущего объекта пересечений добавляем линию из другого набора //var otherIntersects = otherLineSet.intersects; // Набор пересечений другого объекта //List<Line> otherIntersectsValues; //if (otherIntersects.ContainsKey(this)) //{ // otherIntersectsValues = otherIntersects[this]; //} //else //{ // otherIntersectsValues = new List<Line>(); // otherIntersects.Add(this, otherIntersectsValues); //} //otherIntersectsValues.Add(item); // Добавление записи о пересечении для другого объекта } } if (lineInters.Count > 0) { } } }
public void Add(Line line, Line lineOther) { LineSet other = lineOther.Owner; IntersectLines intersected; if (!others.TryGetValue(other, out intersected)) { intersected = new IntersectLines(); others.Add(other, intersected); } List <Line> lines; if (!intersected.TryGetValue(line, out lines)) { lines = new List <Line>(); intersected.Add(line, lines); } lines.Add(lineOther); }
public Line(Dot first, Dot second, LineSet owner, LineContainer container) { First = first ?? throw new ArgumentNullException(nameof(first)); Second = second ?? throw new ArgumentNullException(nameof(second)); Owner = owner ?? throw new ArgumentNullException(nameof(owner)); Container = container ?? throw new ArgumentNullException(nameof(container)); first.Lines.Add(this); second.Lines.Add(this); container.Add(this); RectangleF = first.Point.GetRectangleFromTwoPoint(second.Point); first.PointChanged += DotPointChanged; second.PointChanged += DotPointChanged; float firstY = first.Point.Y; float secondY = second.Point.Y; Direction = firstY <secondY?Direction.Up : firstY> secondY ? Direction.Down : Direction.None; }
public RelationLineSets(LineSet owner) { this.owner = owner; }