Beispiel #1
0
        private static bool IsInRegion(Rect2D region, ILocatable locatable, bool fullyEnclosed)
        {
            double x0 = locatable.X;
            double y0 = locatable.Y;

            if (false == fullyEnclosed) // Cross selection.
            {
                var test = new Rect2D(x0, y0, locatable.Width, locatable.Height);
                return region.IntersectsWith(test);
            }

            double x1 = x0 + locatable.Width;
            double y1 = y0 + locatable.Height;
            return (region.Contains(x0, y0) && region.Contains(x1, y1));
        }
        public override bool Check(DateTime now, IField field)
        {
            var bounds = new Rect2D(
                new Point2D(
                    LifeTemplate.Position.X,
                    LifeTemplate.Position.Y
                    ),
                new Size2D(200, 200)
                );

            return(!field
                   .GetObjects <IFieldObjMob>()
                   .Any(m => bounds.Contains(m.Position)));
        }
Beispiel #3
0
        /// <summary>
        /// Updates the group boundary based on the nodes / notes selection.
        /// </summary>
        internal void UpdateBoundaryFromSelection()
        {
            var selectedModelsList = nodes.ToList();

            if (selectedModelsList.Any())
            {
                var groupModels = selectedModelsList.OrderBy(x => x.X).ToList();

                //Shifting x by 10 and y to the height of textblock
                var regionX = groupModels.Min(x => x.X) - ExtendSize;
                //Increase the Y value by 10. This provides the extra space between
                // a model and textbox. Otherwise there will be some overlap
                var regionY = groupModels.Min(y => y.Y) - ExtendSize - (TextBlockHeight == 0.0 ? MinTextHeight : TextBlockHeight);

                //calculates the distance between the nodes
                var xDistance = groupModels.Max(x => x.X) - regionX;
                var yDistance = groupModels.Max(x => x.Y) - regionY;

                var widthandheight = CalculateWidthAndHeight();

                var maxWidth  = widthandheight.Item1;
                var maxHeight = widthandheight.Item2;

                // InitialTop is to store the Y value without the Textblock height
                this.InitialTop = groupModels.Min(y => y.Y);

                var region = new Rect2D
                {
                    X      = regionX,
                    Y      = regionY,
                    Width  = xDistance + maxWidth + ExtendSize,
                    Height = yDistance + maxHeight + ExtendSize
                };

                this.X      = region.X;
                this.Y      = region.Y;
                this.Width  = Math.Max(region.Width, TextMaxWidth + ExtendSize);
                this.Height = region.Height;

                //Calculate the boundary if there is any overlap
                ModelBase overlap = null;
                foreach (var nodesList in Nodes)
                {
                    if (!region.Contains(nodesList.Rect))
                    {
                        overlap = nodesList;
                        if (overlap.Rect.Top < this.X ||
                            overlap.Rect.Bottom > region.Bottom)         //Overlap in height - increase the region height
                        {
                            if (overlap.Rect.Bottom - region.Bottom > 0)
                            {
                                this.Height += overlap.Rect.Bottom - region.Bottom + ExtendSize + ExtendYHeight;
                            }
                            region.Height = this.Height;
                        }
                        if (overlap.Rect.Left < this.Y ||
                            overlap.Rect.Right > region.Right)     //Overlap in width - increase the region width
                        {
                            if (overlap.Rect.Right - region.Right > 0)
                            {
                                this.Width += overlap.Rect.Right - region.Right + ExtendSize;
                            }
                            region.Width = this.Width;
                        }
                    }
                }

                //Initial Height is to store the Actual height of the group.
                //that is the height should be the initial height without the textblock height.
                if (this.InitialHeight <= 0.0)
                {
                    this.InitialHeight = region.Height;
                }
            }
            else
            {
                this.Width  = 0;
                this.height = 0;
            }
        }