Ejemplo n.º 1
0
        /// <summary>
        /// Adds a Room to the Services list.
        /// </summary>
        /// <param name="room">Room to add.</param>
        /// <param name="fit">Indicates whether the new Room should mutually fit to other Story features. Default is true.</param>
        /// <returns>
        /// True if one or more Rooms were added to the Story.
        /// </returns>
        public bool AddService(Room room, bool fit = true)
        {
            if (Perimeter == null || room.Perimeter == null || !Perimeter.Covers(perimeter))
            {
                return(false);
            }
            var newRoom =
                new Room()
            {
                Color     = room.Color,
                Elevation = Elevation,
                Height    = Height,
                Name      = room.Name,
                Perimeter = room.Perimeter
            };
            var fitRooms = new List <Room> {
                newRoom
            };

            if (fit)
            {
                var toRooms = new List <Room>(Exclusions);
                fitRooms = FitRooms(fitRooms, toRooms);
                toRooms.AddRange(fitRooms);
                Corridors = FitRooms(Corridors, toRooms);
                toRooms.AddRange(Corridors);
                Rooms = FitRooms(Rooms, toRooms);
            }
            if (fitRooms.Count == 0)
            {
                return(false);
            }
            Services.AddRange(fitRooms);
            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds a Room to the Exclusions list.
        /// </summary>
        /// <param name="room">Room to add.</param>
        /// <param name="fit">Indicates whether the new room should mutually fit to other Story features. Default is true.</param>
        /// <returns>
        /// True if one or more rooms were added to the Story.
        /// </returns>
        public bool AddExclusion(Room room, bool fit = true)
        {
            if (Perimeter == null || room.Perimeter == null || !Perimeter.Covers(perimeter))
            {
                return(false);
            }
            var newRoom =
                new Room()
            {
                Elevation = Elevation,
                Name      = room.Name,
                Perimeter = room.Perimeter
            };
            var toRooms = new List <Room> {
                newRoom
            };

            if (fit)
            {
                Services = FitRooms(Services, toRooms);
                toRooms.AddRange(Services);
                Corridors = FitRooms(Corridors, toRooms);
                toRooms.AddRange(Corridors);
                Rooms = FitRooms(Rooms, toRooms);
            }
            Exclusions.Add(newRoom);
            return(true);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds a Room to the Exclusions list.
        /// </summary>
        /// <param name="room">Room to add.</param>
        /// <param name="fit">Indicates whether the new room should mutually fit to other Story features. Default is true.</param>
        /// <returns>
        /// True if one or more rooms were added to the Story.
        /// </returns>
        public bool AddExclusion(Room room, bool fit = true)
        {
            if (Perimeter == null || room.Perimeter == null)
            {
                throw new ArgumentNullException(Messages.PERIMETER_NULL_EXCEPTION);
            }
            if (!Perimeter.Covers(perimeter))
            {
                throw new ArgumentNullException(Messages.PERIMETER_PLACEMENT_EXCEPTION);
            }
            var newRoom =
                new Room()
            {
                Elevation = Elevation,
                Name      = room.Name,
                Perimeter = room.Perimeter
            };
            var toRooms = new List <Room> {
                newRoom
            };

            if (fit)
            {
                Services = FitRooms(Services, toRooms);
                toRooms.AddRange(Services);
                Corridors = FitRooms(Corridors, toRooms);
                toRooms.AddRange(Corridors);
                Rooms = FitRooms(Rooms, toRooms);
            }
            Exclusions.Add(newRoom);
            return(true);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Adds a Room to the Corridors list.
        /// </summary>
        /// <param name="room">Room to add.</param>
        /// <param name="fit">Indicates whether the new corridor should mutually fit to other Story features.</param>
        /// <param name="merge">Indicates whether the new corridor should merge with other corridors.</param>
        /// <returns>
        /// True if one or more rooms were added to the Story.
        /// </returns>
        public bool AddCorridor(Room room, bool fit = true, bool merge = true)
        {
            if (Perimeter == null || room.Perimeter == null || !Perimeter.Covers(perimeter))
            {
                return(false);
            }
            var newRoom =
                new Room()
            {
                Color     = room.Color,
                Elevation = Elevation,
                Height    = room.Height,
                Name      = room.Name,
                Perimeter = room.Perimeter
            };
            var fitRooms = new List <Room> {
                newRoom
            };

            if (fit)
            {
                var toRooms = new List <Room>(Exclusions);
                toRooms.AddRange(Services);
                fitRooms = FitRooms(fitRooms, toRooms, false);
                Rooms    = FitRooms(Rooms, fitRooms);
            }
            if (fitRooms.Count == 0)
            {
                return(false);
            }
            Corridors.AddRange(fitRooms);
            var merged = Shaper.Merge(CorridorsAsPolygons);

            if (merge && merged.Count < Corridors.Count)
            {
                Corridors.Clear();
                foreach (var corridor in merged)
                {
                    Corridors.Add(
                        new Room()
                    {
                        Color     = room.Color,
                        Elevation = Elevation,
                        Height    = room.Height,
                        Name      = room.Name,
                        Perimeter = corridor
                    });
                }
            }
            return(true);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Creates and adds an Opening to the Story by deriving the Perimeter from the supplied Room.
        /// </summary>
        /// <param name="room">Room representing the Opening.</param>
        /// <returns></returns>
        public bool AddOpening(Room opening)
        {
            if (opening.Perimeter == null || !Perimeter.Covers(opening.Perimeter))
            {
                return(false);
            }
            var toRooms = new List <Room>()
            {
                opening
            };

            Exclusions = FitRooms(Exclusions, toRooms);
            toRooms.AddRange(Exclusions);
            Services = FitRooms(Services, toRooms);
            toRooms.AddRange(Services);
            Corridors = FitRooms(Corridors, toRooms);
            toRooms.AddRange(Corridors);
            Rooms = FitRooms(Rooms, toRooms);
            Openings.Add(opening);
            return(true);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Adds a Room to the Services list.
        /// </summary>
        /// <param name="room">Room to add.</param>
        /// <param name="fit">Indicates whether the new room should mutually fit to other Story features. Default is true.</param>
        /// <returns>
        /// True if one or more rooms were added to the Story.
        /// </returns>
        public bool AddService(Room room, bool fit = true)
        {
            if (Perimeter == null || room.Perimeter == null)
            {
                throw new ArgumentNullException(Messages.PERIMETER_NULL_EXCEPTION);
            }
            if (!Perimeter.Covers(perimeter))
            {
                throw new ArgumentNullException(Messages.PERIMETER_PLACEMENT_EXCEPTION);
            }
            var newRoom =
                new Room()
            {
                Color     = room.Color,
                Elevation = Elevation,
                Height    = Height,
                Name      = room.Name,
                Perimeter = room.Perimeter
            };
            var fitRooms = new List <Room> {
                newRoom
            };

            if (fit)
            {
                var toRooms = new List <Room>(Exclusions);
                fitRooms = FitRooms(fitRooms, toRooms);
                toRooms.AddRange(fitRooms);
                Corridors = FitRooms(Corridors, toRooms);
                toRooms.AddRange(Corridors);
                Rooms = FitRooms(Rooms, toRooms);
            }
            if (fitRooms.Count == 0)
            {
                return(false);
            }
            Services.AddRange(fitRooms);
            return(true);
        }