Example #1
0
        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);
            }
Example #3
0
        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);
            }
        }
Example #4
0
        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;
        }