Esempio n. 1
0
        /// <summary>
        /// Remove all locations from the collection which overlap locations on the specified section
        /// </summary>
        /// <param name="locations">The collection to remove overlapping locations from</param>
        /// <returns>The removed locations which overlap</returns>
        private static List<Location_CanvasViewModel> RemoveOverlappingLocations(List<Location_CanvasViewModel> locations, int section_number)
        {
            List<Location_CanvasViewModel> listOverlappingLocations = new List<Location_CanvasViewModel>(locations.Count);
            for (int i = locations.Count - 1; i >= 0; i--)
            {
                Location_CanvasViewModel loc = locations.ElementAt(i);
                if (loc.TypeCode == LocationType.CIRCLE)
                {
                    GridCircle locCircle = new GridCircle(loc.VolumePosition, loc.OffSectionRadius);
                    foreach (long linked in loc.Links)
                    {
                        LocationObj LinkedObj = Store.Locations.GetObjectByID(linked, false);
                        if (LinkedObj == null)
                            continue;

                        if (LinkedObj.Section == section_number)
                        {
                            if (locCircle.Intersects(LinkedObj.VolumePosition, LinkedObj.Radius))
                            {
                                listOverlappingLocations.Add(loc);
                                locations.RemoveAt(i);
                                break;
                            }
                        }
                    }
                }
            }

            return listOverlappingLocations;
        }
Esempio n. 2
0
        private static List<Location_CanvasViewModel> FindVisibleLocations(ICollection<Location_CanvasViewModel> locations,  GridRectangle VisibleBounds)
        {
            GridCircle VisibleCircle = new GridCircle(VisibleBounds.Center, GridVector2.Distance(VisibleBounds.Center, new GridVector2(VisibleBounds.Left, VisibleBounds.Top)));
            List<Location_CanvasViewModel> listLocationsToDraw = new List<Location_CanvasViewModel>(locations.Count);

            foreach (Location_CanvasViewModel loc in locations)
            {
                if (loc == null)
                    continue;

                if (!loc.VolumePositionHasBeenCalculated)
                    continue;

                //Find out if we should draw the location
                if (loc.TypeCode == LocationType.CIRCLE)
                {
                    if (VisibleCircle.Intersects(loc.VolumePosition, loc.Radius) == false)
                        continue;
                }
                else if (loc.TypeCode == LocationType.POINT)
                {
                    if (VisibleBounds.Contains(loc.VolumePosition) == false)
                        continue;
                }
                else
                {
                    Debug.Fail("Unknown location type");
                }

                Structure ParentStructure = loc.Parent;
                if (ParentStructure == null)
                    continue;

                if (ParentStructure.Type == null)
                    continue;

                listLocationsToDraw.Add(loc);
            }

            return listLocationsToDraw;
        }