internal static Point RestrictRange(Rect rect, Point p) { var x = ConnectorUtilities.RestrictRange(rect.Left, rect.Right, p.X); var y = ConnectorUtilities.RestrictRange(rect.Top, rect.Bottom, p.Y); return(new Point(x, y)); }
internal static Point RestrictRange(Rect rect, Point p, double marginX, double marginY) { var x = ConnectorUtilities.RestrictRange(rect.Left + marginX, rect.Right - marginX, p.X); var y = ConnectorUtilities.RestrictRange(rect.Top - marginY, rect.Bottom + marginY, p.Y); return(new Point(x, y)); }
public PathFigure ComputePathFigure(Point start, Point end, LineType lineType, double middlePosition, out double startAngle, out double endAngle) { var linePoints = ComputeLinePoints(start, end, lineType, middlePosition, out startAngle, out endAngle); var pf = ConnectorUtilities.GetPathFigureFromPoints(linePoints); pf.IsFilled = false; pf.IsClosed = false; return(pf); }
public IEnumerable <Point> ComputeLinePoints(Point start, Point end, LineType lineType, double middlePosition, out double startAngle, out double endAngle) { ConnectorDocking startPointDocking = (ConnectorDocking)((int)lineType >> 8); ConnectorDocking endPointDocking = (ConnectorDocking)((int)lineType & 0xFF); //var pf = ConnectorUtilities.GetPathFigureFromPoints(new Point[] { start, end }); startAngle = ConnectorUtilities.ComputeAngle(startPointDocking, end - start); endAngle = ConnectorUtilities.ComputeAngle(endPointDocking, end - start); return(new[] { start, end }); }
public ConnectorModel(ConnectionType type, IBoundedSketchItemModel from, IBoundedSketchItemModel to, System.Windows.Point connectorStartHint, System.Windows.Point connectorEndHint, ISketchItemContainer container) //:base(new Guid()) { ParentNode = container; _connectionType = type; MiddlePointRelativePosition = 0.5; From = from; To = to; _myConnectorStrategy = ConnectorUtilities.GetConnectionType(this, _connectionType, connectorStartHint, connectorEndHint); Label = string.Format("{0}->{1}", from.Label, to.Label); LineWidth = 1; _geometry.Children.Add(_path); Initialize(); }
Point ComputeStartPoint(IConnectable firstPoint, IConnectable nextPoint, ref double startPointRelativePos, ref ConnectorDocking docking, ref ulong connectorStartPort) { var start = _startPointHint; if (docking == ConnectorDocking.Undefined) { start = firstPoint.GetPreferredConnectorStart(start, out startPointRelativePos, out docking, out connectorStartPort); if (connectorStartPort == 0) { start = ConnectorUtilities.ComputeCenter(nextPoint.Bounds); start = firstPoint.GetPreferredConnectorStart(start, out startPointRelativePos, out docking, out connectorStartPort); } } else { start = firstPoint.GetConnectorPoint(docking, startPointRelativePos, connectorStartPort); } return(start); }
Point ComputeEndPoint(IConnectable firstPoint, IConnectable nextPoint, ref double relativePos, ref ConnectorDocking docking, ref ulong connectorEndPort) { var end = _endPointHint; if (docking == ConnectorDocking.Undefined) { end = nextPoint.GetPreferredConnectorEnd(end, out relativePos, out docking, out connectorEndPort); if (connectorEndPort == 0) { nextPoint.GetPreferredConnectorEnd(ConnectorUtilities.ComputeCenter(firstPoint.Bounds), out relativePos, out docking, out connectorEndPort); } } else { end = nextPoint.GetConnectorPoint(docking, relativePos, connectorEndPort); } return(end); }
void ComputeConnectorLine() { _myPath.Clear(); if (_model.StartPointDocking == ConnectorDocking.Undefined && _model.EndPointDocking == ConnectorDocking.Undefined) { _model.StartPointDocking = ConnectorDocking.Top; _model.StartPointRelativePosition = 0.20; _model.EndPointDocking = ConnectorDocking.Top; _model.EndPointRelativePosition = 0.80; _model.MiddlePointRelativePosition = 0.30; } _start = ConnectorUtilities.ComputePoint(_model.From.Bounds, _model.StartPointDocking, _model.StartPointRelativePosition); _end = ConnectorUtilities.ComputePoint(_model.To.Bounds, _model.EndPointDocking, _model.EndPointRelativePosition); var lt = GetLineTypeFromDocking(_model.EndPointDocking); ComputePath(lt, _start, _end, _model.MiddlePointRelativePosition); }
public void Commit(ConnectorDocking movePointDocking, ConnectorDocking otherPointDocking, Point newMovePointPosition, Point newOtherPointPosition, double newDistance) { if (_moveType == Types.MoveType.MoveStartPoint) { _model.StartPointDocking = movePointDocking; _model.EndPointDocking = otherPointDocking; _model.StartPointRelativePosition = ConnectorUtilities.ComputeRelativePosition(_model.From.Bounds, newMovePointPosition, _model.StartPointDocking); _model.EndPointRelativePosition = ConnectorUtilities.ComputeRelativePosition(_model.To.Bounds, newOtherPointPosition, _model.EndPointDocking); } else if (MoveType == Types.MoveType.MoveMiddlePoint) { _model.MiddlePointRelativePosition = newDistance; } else if (MoveType == Types.MoveType.MoveEndPoint) { _model.StartPointDocking = otherPointDocking; _model.EndPointDocking = movePointDocking; _model.StartPointRelativePosition = ConnectorUtilities.ComputeRelativePosition(_model.From.Bounds, newOtherPointPosition, _model.StartPointDocking); _model.EndPointRelativePosition = ConnectorUtilities.ComputeRelativePosition(_model.To.Bounds, newMovePointPosition, _model.EndPointDocking); } }
public void Commit(ConnectorDocking movePointDocking, ConnectorDocking otherPointDocking, Point newMovePointPosition, Point newOtherPointPosition, double newDistance) { if (_moveType == MoveType.MoveStartPoint) { _startingFrom.OutgoingDocking = movePointDocking; _endingAt.IncomingDocking = otherPointDocking; if (movePointDocking != ConnectorDocking.Undefined) { _startingFrom.OutgoingRelativePosition = ConnectorUtilities.ComputeRelativePosition(_startingFrom.Bounds, newMovePointPosition, movePointDocking); } else { _startingFrom.OutgoingRelativePosition = 0.5; _endingAt.IncomingRelativePosition = 0.5; _endingAt.MiddlePosition = 0.5; } //_model.EndPointRelativePosition = ConnectorUtilities.ComputeRelativePosition(_model.To.Bounds, newOtherPointPosition, _model.EndPointDocking); } else if (MoveType == MoveType.MoveMiddlePoint) { _startingFrom.MiddlePosition = newDistance; } else if (MoveType == MoveType.MoveEndPoint) { _startingFrom.OutgoingDocking = otherPointDocking; _endingAt.IncomingDocking = movePointDocking; if (movePointDocking != ConnectorDocking.Undefined) { //_model.StartPointRelativePosition = ConnectorUtilities.ComputeRelativePosition(_model.From.Bounds, newOtherPointPosition, _model.StartPointDocking); _endingAt.IncomingRelativePosition = ConnectorUtilities.ComputeRelativePosition(_endingAt.Bounds, newMovePointPosition, movePointDocking); } else { _startingFrom.OutgoingRelativePosition = 0.5; _endingAt.IncomingRelativePosition = 0.5; _endingAt.MiddlePosition = 0.5; } } }
public IEnumerable <Point> ComputeLinePoints(Point start, Point end, LineType lineType, double middlePosition, out double startAngle, out double endAngle) { //var lineType = (LineType)((int)startDocking << 8 | (int)endDocking); var linePoints = _routingAssistent.GetLinePoints(lineType, start, end, middlePosition); var inVector = new Vector { X = linePoints.ElementAt(1).X - linePoints.ElementAt(0).X, Y = linePoints.ElementAt(1).Y - linePoints.ElementAt(0).Y }; startAngle = ConnectorUtilities.ComputeAngle(_model.StartPointDocking, inVector); var outVector = new Vector { X = linePoints.Last().X - linePoints.ElementAt(linePoints.Count() - 2).X, Y = linePoints.Last().Y - linePoints.ElementAt(linePoints.Count() - 2).Y }; endAngle = ConnectorUtilities.ComputeAngle(_model.EndPointDocking, outVector); return(linePoints); }
public void ComputeDockingDuringMove(Rect rect, Point p, ref ConnectorDocking currentDocking, ref Point lastPos) { ConnectorUtilities.ComputeDockingDuringMove(rect, p, ref currentDocking, ref lastPos); }
public PathFigure ComputePathFigure(Point start, Point end, LineType lineType, double middlePosition, out double startAngle, out double endAngle) { return(ConnectorUtilities.GetPathFigureFromPoints( ComputeLinePoints(start, end, lineType, middlePosition, out startAngle, out endAngle))); }
//readonly GeometryGroup _geometry = new GeometryGroup(); public ConnectorMoveHelper(ConnectorModel connectorModel, IConnectorStrategy parent, Point p) { _routingStrategy = parent; _model = connectorModel; _moveType = MoveType.MoveTypeNone; _startingFrom = new ToWaypointAdapter(_model, connectorModel.From); _endingAt = new ToWaypointAdapter(_model, connectorModel.To); List <double> middlePointInfo = new List <double>() { _model.MiddlePointRelativePosition }; List <IWaypoint> connectionPoints = new List <IWaypoint> { _startingFrom }; connectionPoints.AddRange(_model.Waypoints); connectionPoints.Add(_endingAt); double[] relativePositions = new double[connectionPoints.Count]; for (int i = 0; i < relativePositions.Length; i++) { relativePositions[i] = 0.5; } relativePositions[0] = _model.StartPointRelativePosition; relativePositions[relativePositions.Length - 1] = _model.EndPointRelativePosition; middlePointInfo.AddRange(_model.Waypoints.Select <IWaypoint, double>((x) => x.MiddlePosition)); foreach (var pf in _routingStrategy.ConnectorPath) { var nrOfSegments = pf.Segments.Count(); if (ConnectorUtilities.HitLineSegment(p, pf, out int index, out _startPoint, out _endPoint)) { _distance = middlePointInfo[_pathIndex]; _startPointRelativePosition = relativePositions[_pathIndex]; _endPointRelativePosition = relativePositions[_pathIndex + 1]; if (index == 0 && nrOfSegments == 1) { var d1 = Point.Subtract(p, _startPoint).Length; var d2 = Point.Subtract(p, _endPoint).Length; _moveType = MoveType.MoveStartPoint; if (d1 > d2) { _moveType = MoveType.MoveEndPoint; //_moveStart = _startPoint; } } else if (index == 0 && nrOfSegments > 1) { _moveType = MoveType.MoveStartPoint; //_moveStart = StartPoint; } else if ((index == 1 && nrOfSegments == 3) || (index == 2 && nrOfSegments == 7) || (index == 3)) { _moveType = MoveType.MoveMiddlePoint; } else if (index == 2 || (index == 1 && nrOfSegments == 2) || (index == 6)) { _moveType = MoveType.MoveEndPoint; _startPoint = _endPoint; } _startingFrom = connectionPoints[_pathIndex]; _endingAt = connectionPoints[_pathIndex + 1]; break; } _pathIndex++; } }
void ComputePath(LineType lineType, Point start, Point end, double distance) { _myPath.Clear(); _myPath.Add( ConnectorUtilities.GetPathFigureFromPoints(ComputeLinePoints(start, end, lineType, distance, out _startAngle, out _endAngle))); }