void CheckLineConfiguration(IWaypoint from, IWaypoint to) { var startPoint = ConnectorUtilities.ComputePoint(from.Bounds, from.OutgoingDocking, from.OutgoingRelativePosition); var endPoint = ConnectorUtilities.ComputePoint(to.Bounds, to.IncomingDocking, to.IncomingRelativePosition); var pos = ConnectorUtilities.ComputeRelativePositionOfPoints(startPoint, endPoint); LineType lineType = (LineType)((int)from.OutgoingDocking << 8 | (int)to.IncomingDocking); if (AllowedRelativePositions.Table.TryGetValue(lineType, out SortedSet <RelativePosition> possibleConfigurations)) { if (!possibleConfigurations.Contains(pos)) { if (_model.CanMoveStart) { from.OutgoingDocking = ConnectorDocking.Undefined; } if (_model.CanMoveEnd) { to.IncomingDocking = ConnectorDocking.Undefined; } } } else { if (_model.CanMoveStart) { from.OutgoingDocking = ConnectorDocking.Undefined; } if (_model.CanMoveEnd) { to.IncomingDocking = ConnectorDocking.Undefined; } } }
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); }
protected override void OnRender(DrawingContext drawingContext) { if (HitStart) { drawingContext.DrawRectangle(_myFillBrush, _myPen, _model.HotSpotStart); } if (HitEnd) { drawingContext.DrawRectangle(_myFillBrush, _myPen, _model.HotSpotEnd); } foreach (var w in _model.Waypoints) { var center = ConnectorUtilities.ComputeCenter(w.Bounds); drawingContext.DrawEllipse(_myFillBrush, _myPen, center, _waypointRadius, _waypointRadius); } }
public override void UpdateGeometry() { var myGeometry = Geometry as GeometryGroup; myGeometry.Children.Clear(); Point[] pathPoints = new [] { new Point(0, 0), new Point(Bounds.Width, 0), new Point(Bounds.Width, Bounds.Height), new Point(0, Bounds.Height), new Point(Bounds.Height / 2, Bounds.Height / 2) }; var pf = ConnectorUtilities.GetPathFigureFromPoints(pathPoints); pf.IsClosed = true; pf.IsFilled = true; myGeometry.Children.Add(new PathGeometry(new[] { pf })); myGeometry.Transform = Rotation; }
public RewireConnectorOperation(ISketchItemDisplay pad, ConnectorModel model, Point p) { _connector = model; _pad = pad; IBoundedSketchItemModel ending = model.To; if (ending == null) { ending = model.From; } var start = ConnectorUtilities.ComputeCenter(ending.Bounds); _selector = new ConnectablePairSelector(start, p); _pad.Canvas.Children.Add(_selector); _selector.Visibility = Visibility.Visible; foreach (var ch in _pad.Canvas.Children.OfType <ISketchItemUI>()) { ch.Disable(); } _pad.Canvas.MouseMove += HandleMouseMove; _pad.Canvas.MouseDown += HandleMouseDown; _pad.Canvas.KeyDown += HandleKeyDown; }