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))); }
/// <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; } }