Example #1
0
        /// <summary>
        /// 在本次编辑栈内,取消<paramref name="trimEditDrawObjectCell"/>的更改内容;
        /// </summary>
        /// <param name="trimEditDrawObjectCell"></param>
        private void UnApplyTrimCell(TrimEditDrawObjectCell trimEditDrawObjectCell)
        {
            if (trimEditDrawObjectCell == null)
            {
                throw new ArgumentNullException(nameof(trimEditDrawObjectCell));
            }

            foreach (var replacedOriginDrawObject in trimEditDrawObjectCell.ReplacedOriginDrawObjects)
            {
                replacedOriginDrawObject.IsVisible = true;
            }

            _createdDrawObjects.AddRange(trimEditDrawObjectCell.ReplacedCreatedDrawObjects);

            _createdDrawObjects.RemoveItems(trimEditDrawObjectCell.NewCreatedDrawObjects);
            _originReplacedDrawObjects.RemoveItems(trimEditDrawObjectCell.ReplacedOriginDrawObjects);

            RaiseVisualChanged();
        }
Example #2
0
        /// <summary>
        /// 在拖放操作按下时,尝试进行裁剪操作;
        /// </summary>
        /// <param name="canvasContext"></param>
        /// <param name="e"></param>
        private void OnDragSelect(object sender, DragSelectEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }

            //若Control键被按下,中止处理,指示外部可以进行拖放选中;
            if ((CanvasContext.InputDevice.KeyBoard.ModifierKeys & ModifierKeys.Control) == ModifierKeys.Control)
            {
                return;
            }

            ///<see cref="ICanvasContextEx"/> 中被选中的绘制对象和
            ///<see cref="_createdDrawObjects"/>中被选中的绘制对象为裁剪标准;
            var originTrimingDrawObjects  = CanvasContext.GetAllVisibleDrawObjects().Where(p => p.IsSelected);
            var createdTrimingDrawObjects = _createdDrawObjects.Where(p => p.IsSelected);

            var trimingDrawObjects = originTrimingDrawObjects.Union(createdTrimingDrawObjects).ToArray();


            ///下为原件以及<see cref="_createdDrawObjects"/>中将被裁剪的绘制对象;
            ///作为裁剪标准的绘制对象不能被裁剪;
            var drawObjectsToBeTrimedFromOrigin = e.HitedDrawObjects.
                                                  Where(p => p.IsVisible).
                                                  Where(p => !trimingDrawObjects.Contains(p));

            var drawObjectsToBeTrimedFromCreated = _createdDrawObjects.
                                                   Where(p => p.ObjectInRectangle(e.Rectangle2D, CanvasContext.CanvasProxy, true)).
                                                   Where(p => !trimingDrawObjects.Contains(p));


            var newCreatedDrawObjects      = new List <DrawObject>();
            var replacedOriginDrawObjects  = new List <DrawObject>();
            var replacedCreatedDrawObjects = new List <DrawObject>();

            ///对原件中被框选的绘制对象进行裁剪处理;
            foreach (var drawObjectToBeTrimedFromOrigin in drawObjectsToBeTrimedFromOrigin)
            {
                var trimedDrawObjects = GetTrimedOrExtendedDrawObjects(drawObjectToBeTrimedFromOrigin, trimingDrawObjects, e.Rectangle2D);
                //若trimedDrawObjects为空,则裁剪未能完成;
                if (trimedDrawObjects == null)
                {
                    continue;
                }

                newCreatedDrawObjects.AddRange(trimedDrawObjects);
                replacedOriginDrawObjects.Add(drawObjectToBeTrimedFromOrigin);
            }

            ///对<see cref="_createdDrawObjects"/>中框选的绘制对象进行裁剪处理;
            foreach (var drawObjectToBeTrimedFromCreated in drawObjectsToBeTrimedFromCreated)
            {
                var trimedDrawObjects = GetTrimedOrExtendedDrawObjects(drawObjectToBeTrimedFromCreated, trimingDrawObjects, e.Rectangle2D);
                //若trimedDrawObjects为空,则裁剪未能完成;
                if (trimedDrawObjects == null)
                {
                    continue;
                }

                newCreatedDrawObjects.AddRange(trimedDrawObjects);
                replacedCreatedDrawObjects.Add(drawObjectToBeTrimedFromCreated);
            }

            if (newCreatedDrawObjects.Count != 0)
            {
                var trimCell = new TrimEditDrawObjectCell {
                    NewCreatedDrawObjects      = newCreatedDrawObjects.ToArray(),
                    ReplacedCreatedDrawObjects = replacedCreatedDrawObjects.ToArray(),
                    ReplacedOriginDrawObjects  = replacedOriginDrawObjects.ToArray()
                };

                ApplyTrimCell(trimCell);

                _undoTrimEditDrawObjectCells.Push(trimCell);

                RaiseCanUndoRedoChanged();
            }

            //指示已处理;
            e.Cancel = true;
        }