public DecoratorModel(ConnectorDocking side, ulong id) { _side = side; _id = id; }
public static double ComputeAngle(ConnectorDocking _1, Vector ending) { return(Vector.AngleBetween(HorizontalVector, ending)); }
public override Point GetConnectorPoint(ConnectorDocking docking, double relativePosition, ulong connectorPort) { double y = Bounds.Height * relativePosition + Bounds.Top; return(new Point(Bounds.Left + Bounds.Width / 2, y)); }
protected override Point GetConnectorPositionInfo(Point hint, out double relativePos, out ConnectorDocking docking, out ulong port) { port = 0; var lifeLineX = Bounds.X + Bounds.Width / 2; Point p = new Point(lifeLineX, hint.Y); docking = ConnectorDocking.Right; relativePos = (p.Y - Bounds.Y) / Bounds.Height; if (hint.X < lifeLineX) { docking = ConnectorDocking.Left; } return(p); }
public MoveConnectorOperation(ConnectorUI ui, Point p) { _ui = ui; _model = ui._model; _startPoint = p; _p0 = p; _moveHelper = _model.StartMove(p); _newMoveDistance = _moveHelper.Distance; _movePointStart = _moveHelper.StartPoint; var from = _moveHelper.StartingFrom; var to = _moveHelper.EndingAt; _fromGeometry = new RectangleGeometry(from.Bounds); _toGeometry = new RectangleGeometry(to.Bounds); if (Keyboard.IsKeyDown(Key.LeftShift)) { if (TryAdjustConnectorLine()) { //_moveHelper.Commit() } StopOperation(false); } else { var initialGeometry = _moveHelper.GetGeometry(_gg, _moveHelper.LineType, _movePointStart, _moveHelper.EndPoint, _moveHelper.Distance); _visualizer = new ConnectorMoveVisualizer(initialGeometry); //tbd //_visualizer.MouseMove += HandleMouseMove; _isSelfTransition = _model.From == _model.To; if (_moveHelper.MoveType == MoveType.MoveStartPoint && _model.CanMoveStart) { _mouseMove = MoveStartPoint; //_allowableDockings = from.AllowableDockings(false); _movingPointDocking = from.GetConnectorDocking(_moveHelper.StartPoint, false); _otherPointDocking = to.GetConnectorDocking(_moveHelper.EndPoint, true); _otherPointPosition = _moveHelper.EndPoint; } else if (_moveHelper.MoveType == MoveType.MoveEndPoint && _model.CanMoveEnd) { //_allowableDockings = to.AllowableDockings(true); _mouseMove = MoveEndPoint; _movingPointDocking = to.GetConnectorDocking(_moveHelper.EndPoint, true); _otherPointDocking = from.GetConnectorDocking(_moveHelper.StartPoint, false); _otherPointPosition = _moveHelper.StartPoint; _movePointStart = _moveHelper.EndPoint; } else if (_moveHelper.MoveType == MoveType.MoveMiddlePoint) { _mouseMove = MoveMiddlePoint; } else { StopOperation(false); return; } _initialOtherPointDocking = _otherPointDocking; _ui.TriggerSnapshot(); _ui.MouseMove += HandleMouseMove; _ui.MouseUp += HandleMouseUp; _ui.CaptureMouse(); _ui._parent.Canvas.Children.Add(_visualizer); } }
Point ProbeOtherPosition(Point start, Point end, ConnectorDocking movingDocking, Rect bounds, ref double relativePosition, ref ConnectorDocking docking) { _moveEndingSuccessful = false; var probings = InitProbings(movingDocking, _initialOtherPointDocking); bool changeOtherPointDocking = false; var tmpDocking = docking; Point tmpPos = end; foreach (var d in probings) // pobe the different dockings! { tmpDocking = d; LineType lt = _moveHelper.LineType; if (_isSelfTransition) { tmpDocking = movingDocking; lt = (LineType)((int)ConnectorDocking.Self << 8 | (int)movingDocking); } else { lt = (LineType)((int)tmpDocking << 8 | (int)movingDocking); } tmpPos = ConnectorUtilities.ComputePoint(bounds, tmpDocking, relativePosition); GeometryGroup tmpGeomtery = new GeometryGroup(); var geometry = _moveHelper.GetGeometry(tmpGeomtery, lt, tmpPos, start, _moveHelper.Distance); if ((_fromGeometry.FillContainsWithDetail(geometry) == IntersectionDetail.Empty && _toGeometry.FillContainsWithDetail(geometry) == IntersectionDetail.Empty)) { changeOtherPointDocking = tmpDocking != docking; _gg.Children.Clear(); foreach (var g in tmpGeomtery.Children) { _gg.Children.Add(g); } _moveEndingSuccessful = true; break; } //System.Diagnostics.Trace.WriteLine("probe another setting"); } if (changeOtherPointDocking) { docking = tmpDocking; end = tmpPos; } return(end); }
IEnumerable <ConnectorDocking> InitProbings(ConnectorDocking movePointDocking, ConnectorDocking otherPointDocking) { List <ConnectorDocking> probings = new List <ConnectorDocking>(); if (!_probingOrderDict.TryGetValue(movePointDocking, out List <ConnectorDocking> defaultOrder)) { throw new NotSupportedException(string.Format("no probing order defined for {0}", movePointDocking)); } probings.AddRange(defaultOrder); probings.Remove(otherPointDocking); probings.Insert(0, otherPointDocking); return(probings); }