/// <summary> /// Creates levels in the highest Envelope, including a higher mechanical Level below the top of the Envelope. /// </summary> /// <param name="stdHeight">Desired height for repeating Levels.</param> /// <param name="pntHeight">Desired height for mechanical Levels</param> private void HighLevels(double stdHeight, double pntHeight) { if (Envelopes.Where(e => e.Elevation >= 0.0).ToList().Count() < 2) { return; } // Add penthouse level and roof level to highest Envelope. var envelope = Envelopes.Last(); var bldgHeight = envelope.Elevation + envelope.Height; MakeLevel(envelope, bldgHeight); // Create temporary envelope to populate the region beneath the penthouse level. envelope = new Envelope(envelope.Profile.Perimeter, envelope.Elevation, envelope.Height - pntHeight, Vector3.ZAxis, 0.0, envelope.Transform, null, envelope.Representation, false, Guid.NewGuid(), ""); MakeLevels(envelope, stdHeight, false, true); Levels = Levels.OrderBy(l => l.Elevation).ToList(); LevelPerimeters = LevelPerimeters.OrderBy(l => l.Elevation).ToList(); }