Esempio n. 1
0
        public override void OnDrawing(IModel sender, PointerPoint args)
        {
            var f     = args.Properties.Pressure;
            var s     = size_prs ? Math.Max(size * size_min, size * f) : size;
            var d     = density_prs ? Math.Max(density * density_min, density * f) : density;
            var b     = blend_prs ? Math.Max(blend * blend_min, blend * (1 - f)) : blend;
            var layer = sender.CurrentLayer;

            var pr = new Rect((p.x - s), (p.y - s), (s * 2) + 2, (s * 2) + 2);

            if (!merge && orec != RectHelper.Union(orec, pr))
            {
                merge = true;
            }

            p    = new Point(-layer.X + args.Position.X, -layer.Y + args.Position.Y);// getPosition(e);
            rect = RectHelper.Intersect(RectHelper.Union(rect, pr), DrawRect);
            if (Vec2.testLen(p2, p, s * Graphics.Step))
            {
                //gdi.DrawBerzier(p2, p1, p);
                gdi.DrawBerzier(p2, p1, p, s, hard, opacity, d, b, dilution);
                p2 = p1; p1 = p;
            }


            // View.DrawPanel.rec.setRect(rect);
        }
Esempio n. 2
0
File: Sketch.cs Progetto: Daoting/dt
 /// <summary>
 /// 获得最上面的相交对象
 /// </summary>
 /// <param name="p_rect"></param>
 /// <returns></returns>
 internal SNode GetFirstIntersect(Rect p_rect)
 {
     return((from obj in _container.Children
             let item = obj as SNode
                        where item != null &&
                        RectHelper.Intersect(new Rect(Canvas.GetLeft(item), Canvas.GetTop(item), item.ActualWidth, item.ActualHeight), p_rect) != RectHelper.Empty
                        orderby Canvas.GetZIndex(item) descending
                        select item).FirstOrDefault <SNode>());
 }
Esempio n. 3
0
        public override async void OnDrawCommit(IModel sender, PointerPoint args)
        {
            base.OnDrawCommit(sender, args);
            var area = sender.ElemArea as Border;

            if (area.Child == null)
            {
                return;
            }

            VModel.vm.Loading = true;

            var rb = await(area.Child as FrameworkElement).Render();

            do
            {
                if (rb == null)
                {
                    break;
                }

                sender.CurrentLayer.getRect(out Rect or, out WriteableBitmap ob);
                var layer = sender.CurrentLayer;
                var pos   = (area.Child as FrameworkElement).RenderTransform as TranslateTransform;
                var rect  = new Rect(pos.X, pos.Y, rb.PixelWidth, rb.PixelHeight);
                var nr    = RectHelper.Intersect(or.IsEmpty ? rect : RectHelper.Union(rect, or), DrawRect);
                if (nr.IsEmpty)
                {
                    break;
                }

                var i = sender.Layers.IndexOf(layer);
                var b = sender.CurrentLayer.Bitmap.Clone();


                var nb = new WriteableBitmap((int)Math.Ceiling(nr.Width), (int)Math.Ceiling(nr.Height));
                IGrap.addImg(b, nb, -(int)Math.Floor(nr.X - or.Left), -(int)Math.Floor(nr.Y - or.Top));
                IGrap.addImg(rb, nb, -(int)Math.Floor(nr.X - rect.X), -(int)Math.Floor(nr.Y - rect.Y));


                Exec.Do(new Exec()
                {
                    exec = () => {
                        sender.Layers[i].setRect(nr, nb);
                    },
                    undo = () => {
                        sender.Layers[i].setRect(or, ob);
                        sender.CurrentLayer = sender.Layers[i];
                    }
                });
            } while (false);
            VModel.vm.Loading     = false;
            sender.ElemArea.Child = null;
        }
Esempio n. 4
0
        public static bool IsVisibleOnContainer(this FrameworkElement Element, FrameworkElement Container)
        {
            if (Element == null || Container == null)
            {
                return(false);
            }

            Rect ElementBounds   = Element.TransformToVisual(Container).TransformBounds(new Rect(0.0, 0.0, Element.ActualWidth, Element.ActualHeight));
            Rect ContainerBounds = new Rect(0.0, 0.0, Container.ActualWidth, Container.ActualHeight);

            return(!RectHelper.Intersect(ContainerBounds, ElementBounds).IsEmpty);
        }
Esempio n. 5
0
        async Task Render(IModel sender, FrameworkElement child)
        {
            if (child == null)
            {
                return;
            }
            var rb = await child.Render();

            if (rb == null)
            {
                return;
            }

            var layer = sender.CurrentLayer;
            var pos   = child.RenderTransform as TranslateTransform;
            var rect  = new Rect(pos.X, pos.Y, rb.PixelWidth, rb.PixelHeight);
            var or    = orect;
            var nr    = RectHelper.Intersect(rect, DrawRect);

            if (nr.IsEmpty)
            {
                return;
            }

            var i = sender.Layers.IndexOf(layer);
            var b = sender.CurrentLayer.Bitmap.Clone();

            var nt = (child as TextBlock).Text + "\t" + Size + "\t" + FontName;
            var ot = otxt;

            var nb = new WriteableBitmap((int)Math.Ceiling(nr.Width), (int)Math.Ceiling(nr.Height));
            var ob = obmp;

            // IGrap.addImg(b, nb, -(int)Math.Floor(nr.X - or.Left), -(int)Math.Floor(nr.Y - or.Top));
            IGrap.addImg(rb, nb, -(int)Math.Floor(nr.X - rect.X), -(int)Math.Floor(nr.Y - rect.Y));


            sender.ElemArea.Child = null;
            Exec.Do(new Exec()
            {
                exec = () => {
                    sender.Layers[i].setRect(nr, nb);
                    sender.Layers[i].Name = nt;
                    sender.CurrentLayer   = sender.Layers[i];
                },
                undo = () => {
                    sender.Layers[i].setRect(or, ob);
                    sender.Layers[i].Name = ot;
                    sender.CurrentLayer   = sender.Layers[i];
                }
            });
        }
Esempio n. 6
0
File: Sketch.cs Progetto: Daoting/dt
        /// <summary>
        /// 判定传入的区域是否在sketch的对象的有效区域
        /// </summary>
        /// <param name="p_rect"></param>
        /// <returns></returns>
        internal bool IsValidRegion(Rect p_rect)
        {
            foreach (object obj in _container.Children)
            {
                var item = obj as FrameworkElement;
                if (item != null && !(item is SLine))
                {
                    Rect itemRect = new Rect(Canvas.GetLeft(item), Canvas.GetTop(item), item.ActualWidth, item.ActualHeight);
                    if (RectHelper.Intersect(itemRect, p_rect) != RectHelper.Empty)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
        private void Tick(object sender, object e)
        {
            counter         = (counter + 1) % 8;
            Stickman.Source = images[counter];

            speed   += 1;
            stickR.Y = Math.Min(200, stickR.Y + speed);
            Stickman.SetValue(Canvas.TopProperty, stickR.Y);

            boxR.X = (boxR.X > -100) ? boxR.X - 10 : 600;
            Box.SetValue(Canvas.LeftProperty, boxR.X);

            if (RectHelper.Intersect(boxR, stickR) != Rect.Empty)
            {
                GameOver.Visibility = Visibility.Visible;
                timer.Stop();
            }
        }
Esempio n. 8
0
        public bool CheckMatrix(Matrix?m = null)
        {
            if (!m.HasValue)
            {
                m = (CANVAS.RenderTransform as MatrixTransform).Matrix;
            }
            var ccc = new RectangleGeometry();

            ccc.Rect      = DrawRect;
            ccc.Transform = new MatrixTransform()
            {
                Matrix = m.Value
            };
            var size = DesiredSize;
            var rect = new Rect(
                size.Width * .1,
                size.Height * .1,
                size.Width * .8,
                size.Height * .8
                );

            return(!RectHelper.Intersect(ccc.Bounds, rect).IsEmpty);
        }
Esempio n. 9
0
        public ICanvasImage Apply(ICanvasImage image, ref Rect?bounds)
        {
            if (!IsEnabled)
            {
                return(image);
            }

            var metadata = EffectMetadata.Get(type);

            // Instantiate the effect.
            var effect = (ICanvasImage)Activator.CreateInstance(metadata.ImplementationType);

            // Set the effect input.
            SetProperty(effect, "Source", image);

            // Set configurable parameter values.
            foreach (var parameter in metadata.Parameters)
            {
                var value = GetParameter(parameter);

                SetProperty(effect, parameter.Name, value);

                // Track the image bounds if cropping changes them.
                if (this.Type == EffectType.Crop && parameter.Name == "SourceRectangle")
                {
                    bounds = bounds.HasValue ? RectHelper.Intersect(bounds.Value, (Rect)value) : (Rect)value;
                }
            }

            // Set any constant values.
            foreach (var constant in metadata.Constants)
            {
                SetProperty(effect, constant.Key, constant.Value);
            }

            return(effect);
        }
 public static Rect Clamp(this Rect source, [NotNull] FrameworkElement element)
 {
     return(RectHelper.Intersect(LayoutInformation.GetLayoutSlot(element), source));
 }
Esempio n. 11
0
        public override async void OnDrawCommit(IModel sender, PointerPoint args)
        {
            if (rect.IsEmpty)
            {
                OnDrawRollback(sender, args);
                return;
            }
            var layer = sender.CurrentLayer;

            if (Clipper.IsCliping)
            {
                //sender.X.Source = bmp;
                VModel.vm.Loading = true;
                var bmp = await layer.Child.Render();

                VModel.vm.Loading = false;

                var pos = (Point)layer.Child.Tag;
                IGrap.addImg(bmp, layer.Bitmap, (int)Math.Round(pos.X), (int)Math.Round(pos.Y));

                layer.Child = null;
            }
            if (merge)
            {
                var or = orec;
                var ob = obmp;
                var nr = RectHelper.Intersect(RectHelper.Union(rect, orec), DrawRect);
                var i  = sender.Layers.IndexOf(layer);
                var nb = IGrap.clipImg(layer.Bitmap, nr);
                Exec.Do(new Exec()
                {
                    exec = () => {
                        sender.Layers[i].setRect(nr, nb);
                    },
                    undo = () => {
                        sender.Layers[i].setRect(or, ob);
                        sender.CurrentLayer = sender.Layers[i];
                    }
                });
            }
            else
            {
                var or = orec;
                var nr = rect;
                var nb = IGrap.clipImg(layer.Bitmap, nr);

                layer.setRect(orec, obmp);
                nr.X -= or.X;
                nr.Y -= or.Y;
                var ob = IGrap.clipImg(obmp, nr);
                var i  = sender.Layers.IndexOf(layer);
                Exec.Do(new Exec()
                {
                    exec = () => {
                        layer = sender.Layers[i];
                        IGrap.copyImg(nb, layer.Bitmap, (int)Math.Floor(nr.X), (int)Math.Floor(nr.Y));
                        layer.Bitmap.Invalidate();
                    },
                    undo = () => {
                        layer = sender.Layers[i];
                        IGrap.copyImg(ob, layer.Bitmap, (int)Math.Floor(nr.X), (int)Math.Floor(nr.Y));
                        layer.Bitmap.Invalidate();
                        sender.CurrentLayer = sender.Layers[i];
                    }
                });
            }
        }
        private void Game_timer_movement_Tick(object sender, object e)
        {
            bool   hitRemoved   = true;
            bool   bulletGotHit = true;
            double remainHP;


            if (enemy_Control.Count() == 0) // if these is no enemies  - we level up because he killed all the enemies
            {
                //stop clocks
                enemy_create_bullet_timer.Stop(); // stop creating bullets for enemies because there are no more enemies.
                game_timer_movement.Stop();       // stop the game timer - to not check
                LevelUpMessageAsync(Level.Currentlevel);
                //now depends on the option he choose
            }
            else // move enemys
            {
                for (int i = 0; i < enemy_Control.Count(); i++) // move the the enemies
                {
                    enemy_Control[i].Move();
                }
            }

            if (bullet_Control.Count() != 0)                                                         // bullets from player - check for hit with enemys and remove them:
            //if we have bullets we run on both lists , the first loop runs on each bullet and then each bullet,
            {                                                                                        //runs in second loop that checks the other enemies. we check for collusion and then move
                for (int player_bullet = 0; player_bullet < bullet_Control.Count(); player_bullet++) //move on each bullet
                {
                    hitRemoved = true;
                    Rect enemyRectangle;
                    Rect bulletRectangle = new Rect(bullet_Control[player_bullet].getBulletInfo()[0], bullet_Control[player_bullet].getBulletInfo()[1], bullet_Control[player_bullet].getBulletInfo()[2], bullet_Control[player_bullet].getBulletInfo()[3]);
                    // we create a rectangle for the bullet and then we create a rectangle for each enemy and check if they were hit
                    for (int enemy = 0; enemy < this.enemy_Control.Count(); enemy++)
                    {
                        enemyRectangle = new Rect(enemy_Control[enemy].getPlayerLocation()[0], enemy_Control[enemy].getPlayerLocation()[1], enemy_Control[enemy].GetWidth(), enemy_Control[enemy].GetHeight());
                        Rect r = RectHelper.Intersect(bulletRectangle, enemyRectangle);
                        if (r.Width > 0 || r.Height > 0) // if there is collusion
                        {
                            //bullet control - i , enemy control - j
                            if (bullet_Control[player_bullet].damage > enemy_Control[enemy].hitPoints)    // if the damage of the bullet is larger than the hitpoints - enemy dies here - getting coins
                            {
                                bullet_Control[player_bullet].damage -= enemy_Control[enemy].hitPoints;   //remove damage as much as hp
                                canvas.Children.Remove(enemy_Control[enemy].GetImage());                  // remove enemy from list and canvas

                                coins          += (enemy_Control[enemy].enemyLevel + Level.Currentlevel); // add coins - by enemy and then remove enemy
                                Coins_Text.Text = coins.ToString();

                                enemy_Control.Remove(enemy_Control[enemy]);                                 // the bullet continues to the next enemy that he gets
                                //explode enemy animation
                                MoveBullet(bullet_Control[player_bullet]);                                  // we move the bullet only if possible
                            }
                            else if (bullet_Control[player_bullet].damage < enemy_Control[enemy].hitPoints) // if the damage of the bullet is less than the enemy hp
                            {
                                enemy_Control[enemy].hitPoints -= bullet_Control[player_bullet].damage;     // remove hp as much dmg
                                canvas.Children.Remove(bullet_Control[player_bullet].GetBulletImage());     // remove bullet from canvas and from list
                                bullet_Control.Remove(bullet_Control[player_bullet]);
                                hitRemoved = false;
                                break;  // if the bullet is already removed from the list there is no need to check we all the enemies for to continue move to next bullet and not enemy
                                //explode animation
                            }
                            else if (bullet_Control[player_bullet].damage == enemy_Control[enemy].hitPoints) // enemy dies here - getting coins
                            {
                                ////explode animation remove bullet and enemy from lists and canvas
                                canvas.Children.Remove(bullet_Control[player_bullet].GetBulletImage());
                                bullet_Control.Remove(bullet_Control[player_bullet]);
                                canvas.Children.Remove(enemy_Control[enemy].GetImage());

                                coins          += (enemy_Control[enemy].enemyLevel + Level.Currentlevel); // add coins and then remove enemy
                                Coins_Text.Text = coins.ToString();

                                enemy_Control.Remove(enemy_Control[enemy]);
                                hitRemoved = false;
                                break; // if the bullet is already removed from the list there is no need to check with all the enemies for to continue
                            }
                        }
                    }
                    if (hitRemoved)                                // After moving on all the enemies, move ,if hit and removed, doesnt move. for each bullet
                    {
                        MoveBullet(bullet_Control[player_bullet]); // moves if hits and bigger dmg than hp or didnt hit at all
                    }
                }
            }

            for (int bullet = 0; bullet < enemy_bullet_control.Count(); bullet++) //  - for each bullet i - per bullet - move on each bullet of the enemy
            {
                bulletGotHit = false;
                Rect r;
                Rect enemybulletRect = new Rect(enemy_bullet_control[bullet].getBulletInfo()[0], enemy_bullet_control[bullet].getBulletInfo()[1], enemy_bullet_control[bullet].getBulletInfo()[2], enemy_bullet_control[bullet].getBulletInfo()[3]);
                //check hit with shield - enemybullet -> shield
                for (int shield = 0; shield < ShieldRectangles.Count(); shield++) // j - per shield - create a rect for each bullet and move on the shield that were already made
                {
                    if (ShieldHp[shield] == 0)                                    // if we have a shield that doesnt exist, we just continue to the next shield
                    {
                        continue;
                    }
                    r = RectHelper.Intersect(enemybulletRect, ShieldRectangles[shield]);
                    if (r.Width > 20 || r.Height > 20)                                         //if they were hit
                    {
                        canvas.Children.Remove(enemy_bullet_control[bullet].GetBulletImage()); // remove from the bullet from the canavas first

                        remainHP = ShieldHp[shield] - enemy_bullet_control[bullet].damage;     // take how much hp remained to calculate which image to preview

                        //if the hp updates - we update on the canvas, the lists of images shield and list of images hp
                        UpdateShieldHpImage(remainHP, shield, bullet);

                        enemy_bullet_control.Remove(enemy_bullet_control[bullet]); // at the end remove bullet
                        bulletGotHit = true;                                       // mark they were hit and bullet doesnt need to move

                        //Debug.WriteLine("Shield-" + (j + 1) + " hp-" + ShieldHp[j]);
                    }
                }
                // check hit with player - enemy bullet -> player
                //create rect for player - player moves so rect is changing
                Rect playerRect = new Rect(player.getPlayerLocation()[0], player.getPlayerLocation()[1], player.GetWidth(), player.GetHeight());
                r = RectHelper.Intersect(enemybulletRect, playerRect);                     // check for hit between bullet of enemy and player
                if (r.Width > 20 || r.Height > 20)                                         // if they were hit
                {
                    canvas.Children.Remove(enemy_bullet_control[bullet].GetBulletImage()); // remove from the bullet from the canavas first
                    Player_HitPoints -= enemy_bullet_control[bullet].damage;               // reduce hp
                    Health_Text.Text  = "Health: " + Player_HitPoints.ToString() + '%';    // update text box
                    enemy_bullet_control.Remove(enemy_bullet_control[bullet]);             // remove bullet from the list
                    bulletGotHit = true;                                                   // bullet got hit so he doesnt move
                    if (Player_HitPoints <= 0)                                             // player lose
                    {
                        enemy_create_bullet_timer.Stop();                                  // stop creating bullets for enemies because he lost
                        game_timer_movement.Stop();                                        // stop the game timer - to not check
                        PlayerLostAsync();
                        Frame.Navigate(typeof(MainPage));                                  // back to start
                        //like the level up - same thing here but exit
                    }
                }
                if (!bulletGotHit)
                {
                    MoveBullet(enemy_bullet_control[bullet]);
                }
            }
        }
Esempio n. 13
0
 public bool IsVisible(Rect viewPort)
 {
     IsActive = RectHelper.Intersect(viewPort, Bounds) != Rect.Empty;
     return(IsActive);
 }
Esempio n. 14
0
        /// <summary>
        /// Update the scene based on inputs
        /// </summary>
        /// <param name="dt"> A delta time since the last update was called </param>
        /// <param name="input"> Generic input </param>
        public override void Update(TimeSpan dt, GenericInput input)
        {
            if (mp.PlaybackSession.PlaybackState != MediaPlaybackState.Playing)
            {
                mp.PlaybackSession.Position = TimeSpan.Zero;
                mp.Play();
            }

            foreach (Hero hero in heros)
            {
                //update each generic item
                hero.Update(dt, input);
            }
            foreach (Villain villain in villains)
            {
                villain.Update(dt, input);
                //reset the bosses hit image to default image after 300ms of no hits
                if (villain is Boss)
                {
                    villain.TimeSinceCollision = DateTime.Now - villain.LastCollision;
                    if (villain.TimeSinceCollision.TotalMilliseconds > 300 && villain.HurtImage)
                    {
                        villain.SetBitmapFromImageDictionary("Boss");
                    }
                }
                //update the hero's location to each villain
                foreach (Hero hero in heros)
                {
                    villain.HeroLocation = hero.Location;
                }
            }
            foreach (GenericItem gi in objects)
            {
                //update each generic item
                gi.Update(dt, input);

                //find out if any of the attacks hit the villains or hero
                if (gi is Attack)
                {
                    Attack attack = (Attack)gi;
                    switch (attack.Type)
                    {
                    case (Attack.AttackType.Hero_Arrow):
                    {
                        foreach (Villain villain in villains)
                        {
                            if (RectHelper.Intersect(villain.BoundingRectangle, gi.BoundingRectangle) != Rect.Empty)
                            {
                                villain.TimeSinceCollision = DateTime.Now - villain.LastCollision;
                                if (villain.TimeSinceCollision.TotalMilliseconds > villain.iFrames)
                                {
                                    Message_Collision villain_collision = new Message_Collision("Arrow", gi, villain);
                                    MessageManager.AddMessageItem(villain_collision);
                                    villain.LastCollision = DateTime.Now;
                                    if (villain is Boss)
                                    {
                                        villain.SetBitmapFromImageDictionary("BossHurt");
                                        villain.HurtImage = true;
                                    }
                                }
                            }
                        }
                        break;
                    }

                    case (Attack.AttackType.Boss_Arrow):
                    {
                        foreach (Hero hero in heros)
                        {
                            if (RectHelper.Intersect(hero.BoundingRectangle, gi.BoundingRectangle) != Rect.Empty)
                            {
                                hero.TimeSinceCollision = DateTime.Now - hero.LastCollision;
                                if (hero.TimeSinceCollision.TotalMilliseconds > hero.iFrames)
                                {
                                    Message_Collision hero_collision = new Message_Collision("Arrow", gi, hero);
                                    MessageManager.AddMessageItem(hero_collision);
                                    hero.LastCollision = DateTime.Now;
                                }
                            }
                        }
                        break;
                    }
                    }
                }
            }
        }
Esempio n. 15
0
        public override async void OnToolState(IModel sender, bool state)
        {
            var layer = sender.CurrentLayer;

            if (!layer.IsEdit || !layer.IsShow)
            {
                return;
            }
            if (layer.Bitmap == null)
            {
                return;
            }
            Debug.WriteLine("state:" + state);
            if (state)
            {
                layer.getRect(out orec, out obb);
                if (Clipper.IsCliping)
                {
                    VModel.vm.Loading = true;
                    //拷贝选区
                    var Bitmap = new WriteableBitmap((int)DrawRect.Width, (int)DrawRect.Height);
                    IGrap.copyImg(obb, Bitmap, (int)orec.X, (int)orec.Y);
                    layer.Child = Clipper.createPolygon(Bitmap);


                    var p  = (Point)layer.Child.Tag;
                    var xb = await(layer.Child.Render());
                    Clipper.Points.Clear();
                    layer.Child = null;
                    if (xb != null)
                    {
                        var i  = sender.Layers.IndexOf(layer);
                        var nb = obb;
                        var ob = obb;
                        if (layer.Bitmap != null)
                        {
                            nb = layer.Bitmap.Clone();
                            IGrap.delImg(xb, nb, (int)(p.X - orec.X), (int)(p.Y - orec.Y));
                            nb.Invalidate();
                        }
                        obb  = xb;
                        orec = new Rect(p.X, p.Y, xb.PixelWidth, xb.PixelHeight);
                        Exec.Do(new Exec()
                        {
                            exec = () => {
                                sender.Layers[i].Bitmap = nb;
                                sender.Layers.Insert(i, new LayerModel()
                                {
                                    Bitmap = xb,
                                    X      = p.X,
                                    Y      = p.Y
                                });
                                sender.CurrentLayer = sender.Layers[i];
                            },
                            undo = () => {
                                sender.Layers.RemoveAt(i);
                                sender.CurrentLayer        = sender.Layers[i];
                                sender.CurrentLayer.Bitmap = ob;
                            }
                        });
                    }

                    VModel.vm.Loading = false;
                }
                sender.ElemArea.Child = CreateRect(sender);
                ch = false;
            }
            else
            {
                sender.ElemArea.Child = null;

                if (!ch)
                {
                    return;
                }
                var vc = new CompositeTransform()
                {
                    Rotation = com.Rotation,
                    ScaleX   = com.ScaleX,
                    ScaleY   = com.ScaleY,
                    CenterX  = com.TranslateX + layer.W / 2,
                    CenterY  = com.TranslateY + layer.H / 2
                };

                var or = orec;
                var ob = obb;
                layer.getRect(out Rect nr, out WriteableBitmap nb);
                if (com.ScaleX != 1 || com.ScaleY != 1 || com.Rotation != 0)
                {
                    var elem = (FrameworkElement)((DrawPanel)sender).ITEMS.ContainerFromItem(layer);

                    VModel.vm.Loading = true;
                    var b = await(elem).Render();
                    VModel.vm.Loading = false;

                    var vr = vc.TransformBounds(nr);
                    nr = RectHelper.Intersect(DrawRect, vr);
                    if (nr.IsEmpty)
                    {
                        nb = null;
                        layer.setRect(nr, nb);
                    }
                    else
                    {
                        nb = new WriteableBitmap((int)nr.Width, (int)nr.Height);
                        IGrap.addImg(b, nb, (int)(vr.X - nr.X), (int)(vr.Y - nr.Y));
                        layer.setRect(nr, nb);
                    }
                    com.Rotation = 0;
                    com.ScaleX   = 1;
                    com.ScaleY   = 1;
                }
                var i = sender.Layers.IndexOf(sender.CurrentLayer);
                Exec.Save(new Exec()
                {
                    exec = () => {
                        sender.Layers[i].setRect(nr, nb);
                    },
                    undo = () => {
                        sender.Layers[i].setRect(or, ob);
                    }
                });
            }
        }
Esempio n. 16
0
        public bool IntersectWith(Rectangle other)
        {
            var res = RectHelper.Intersect(new Windows.Foundation.Rect(this.TopX, this.TopY, this.Width, this.Height), new Windows.Foundation.Rect(other.TopX, other.TopY, other.Width, other.Height));

            return(!res.IsEmpty);
        }
Esempio n. 17
0
        public float OverlapSize(Rectangle other)
        {
            var res = RectHelper.Intersect(new Windows.Foundation.Rect(this.TopX, this.TopY, this.Width, this.Height), new Windows.Foundation.Rect(other.TopX, other.TopY, other.Width, other.Height));

            return(res.IsEmpty ? 0 : (float)(res.Width * res.Height));
        }
        private void View_PointerMoved(object sender, PointerRoutedEventArgs e)
        {
            if (IsEnabled && e.Pointer.PointerDeviceType == PointerDeviceType.Mouse && e.GetCurrentPoint(View).Properties.IsLeftButtonPressed)
            {
                if (Interlocked.Exchange(ref Locker, 1) == 0)
                {
                    try
                    {
                        Point RelativeEndPoint = e.GetCurrentPoint(View).Position;
                        SrcollIfNeed(RelativeEndPoint);

                        Point AbsEndPoint        = new Point(RelativeEndPoint.X + InnerScrollView.HorizontalOffset, RelativeEndPoint.Y + InnerScrollView.VerticalOffset);
                        Point RelativeStartPoint = new Point(AbsStartPoint.X - InnerScrollView.HorizontalOffset, AbsStartPoint.Y - InnerScrollView.VerticalOffset);

                        DrawRectangleInCanvas(RelativeStartPoint, RelativeEndPoint);

                        if (Math.Abs(RelativeStartPoint.X - RelativeEndPoint.X) >= 20 && Math.Abs(RelativeStartPoint.Y - RelativeEndPoint.Y) >= 20)
                        {
                            List <FileSystemStorageItemBase> VisibleList = new List <FileSystemStorageItemBase>();

                            if (View is ListView)
                            {
                                ItemsStackPanel VirtualPanel = View.ItemsPanelRoot as ItemsStackPanel;

                                for (int i = VirtualPanel.FirstVisibleIndex; i <= VirtualPanel.LastVisibleIndex; i++)
                                {
                                    VisibleList.Add(View.Items[i] as FileSystemStorageItemBase);
                                }
                            }
                            else
                            {
                                ItemsWrapGrid VirtualPanel = View.ItemsPanelRoot as ItemsWrapGrid;

                                for (int i = VirtualPanel.FirstVisibleIndex; i <= VirtualPanel.LastVisibleIndex; i++)
                                {
                                    VisibleList.Add(View.Items[i] as FileSystemStorageItemBase);
                                }
                            }

                            foreach (FileSystemStorageItemBase Item in VisibleList.Except(AbsItemLocationRecord.Select((Rec) => Rec.Key)))
                            {
                                if (View.ContainerFromItem(Item) is SelectorItem Selector)
                                {
                                    AbsItemLocationRecord.Add(new KeyValuePair <FileSystemStorageItemBase, Rect>(Item, Selector.TransformToVisual(View).TransformBounds(new Rect(InnerScrollView.HorizontalOffset, InnerScrollView.VerticalOffset, Selector.ActualWidth, Selector.ActualHeight))));
                                }
                            }

                            Rect AbsBoxSelectionRect = new Rect(Math.Min(AbsStartPoint.X, AbsEndPoint.X), Math.Min(AbsStartPoint.Y, AbsEndPoint.Y), Math.Abs(AbsStartPoint.X - AbsEndPoint.X), Math.Abs(AbsStartPoint.Y - AbsEndPoint.Y));

                            foreach (KeyValuePair <FileSystemStorageItemBase, Rect> Pair in AbsItemLocationRecord)
                            {
                                Rect Intersect = RectHelper.Intersect(AbsBoxSelectionRect, Pair.Value);

                                if (!Intersect.IsEmpty && Intersect.Width > 0 && Intersect.Height > 0)
                                {
                                    if (!View.SelectedItems.Contains(Pair.Key))
                                    {
                                        View.SelectedItems.Add(Pair.Key);
                                    }
                                }
                                else
                                {
                                    View.SelectedItems.Remove(Pair.Key);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        LogTracer.Log(ex);
                    }
                    finally
                    {
                        _ = Interlocked.Exchange(ref Locker, 0);
                    }
                }
            }
        }