using System; using System.Collections.Generic; using System.Linq; using System.Text; using Autodesk.Revit.DB.CodeChecking; using Autodesk.Revit.DB; using Autodesk.Revit.DB.CodeChecking.Storage.LoadCombination; using Autodesk.Revit.DB.CodeChecking.LoadCombination; using Autodesk.Revit.DB.Structure; namespace ASCE_7_10 { public class Server : Autodesk.Revit.DB.CodeChecking.LoadCombination.Server { public static readonly Guid ID = new Guid("34ce88f1-b265-4ab3-a8c2-ff6a49aef797"); #region ICodeCheckingServer Members public override List GeneratePreview(Autodesk.Revit.DB.CodeChecking.LoadCombination.ServiceData data) { LoadCombinationManager manager = LoadCombinationManager.GetManager(data.Document); LoadCombination loadCombination = manager.LoadCombinationParams.GetEntity(data.Document); if (loadCombination != null) { List combinations = new List(); LoadCaseArray selectedCases = manager.LoadCombinationParams.GetLoadCasesArray(ID); Dictionary groups = LoadCombinationUtils.GroupLoadCasesDueToCategory(selectedCases); List dead = LoadCombinationUtils.PerformAnd(groups[BuiltInCategory.OST_LoadCasesDead]); List earthquake = LoadCombinationUtils.PerformOrExlusive(groups[BuiltInCategory.OST_LoadCasesSeismic]); List live = LoadCombinationUtils.PerformOrInclusive(groups[BuiltInCategory.OST_LoadCasesLive]); List roof = LoadCombinationUtils.PerformOrInclusive(groups[BuiltInCategory.OST_LoadCasesRoofLive]); List snow = LoadCombinationUtils.PerformOrExlusive(groups[BuiltInCategory.OST_LoadCasesSnow]); List wind = LoadCombinationUtils.PerformOrExlusive(groups[BuiltInCategory.OST_LoadCasesWind]); List previews; if (loadCombination.Method == GenerationMethod.LRFD) { //1.4D previews = LoadCombinationUtils.CreateLoadCombinations("1.4D", dead, 1.4); combinations.AddRange(previews); //1.2D+1.6l+0.5(Lr or S) //+ 1.2D+1.6L+0.5Lr previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.6L+0.5Lr", dead, 1.2, live, 1.6, roof, 0.5); combinations.AddRange(previews); //+ 1.2D+1.6L+0.5S previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.6L+0.5S", dead, 1.2, live, 1.6, snow, 0.5); combinations.AddRange(previews); //1.2D+1.6(Lr or S) + (L or 0.5W) //+1.2D+1.6Lr + L previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.6Lr + L",dead, 1.2, roof, 1.6, live, 1.0); combinations.AddRange(previews); //+1.2D+1.6Lr + 0.5W previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.6Lr + 0.5W",dead, 1.2, roof, 1.6, wind, 0.5); combinations.AddRange(previews); //+1.2D+1.6S + L previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.6S + L",dead, 1.2, snow, 1.6, live, 1.0); combinations.AddRange(previews); //+1.2D+1.6S + 0.5W previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.6S + 0.5W", dead, 1.2, snow, 1.6, wind, 0.5); combinations.AddRange(previews); //1.2D+1.0W+L+0.5(Lr or S) //+1.2D+1.0W+L+0.5Lr previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.0W+L+0.5Lr",dead, 1.2, wind, 1.0, live, 1.0,roof,0.5); combinations.AddRange(previews); //+1.2D+1.0W+L+0.5S previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.0W+L+0.5S",dead, 1.2, wind, 1.0, live, 1.0, snow, 0.5); combinations.AddRange(previews); //1.2D+1.0E+L+0.2S previews = LoadCombinationUtils.CreateLoadCombinations("1.2D+1.0E+L+0.2S", dead, 1.2, earthquake, 1.0, live, 1.0, snow, 0.2); combinations.AddRange(previews); //0.9D+1.0W previews = LoadCombinationUtils.CreateLoadCombinations("0.9D+1.0W",dead, 0.9, wind, 1.0); combinations.AddRange(previews); //0.9D+1.0E previews = LoadCombinationUtils.CreateLoadCombinations("0.9D+1.0E", dead, 0.9, earthquake, 1.0); combinations.AddRange(previews); } else { //D previews = LoadCombinationUtils.CreateLoadCombinations("D", dead, 1.0); combinations.AddRange(previews); //D+L previews = LoadCombinationUtils.CreateLoadCombinations("D+L", dead, 1.0,live,1.0); combinations.AddRange(previews); //D+(Lr or S) //+D+Lr previews = LoadCombinationUtils.CreateLoadCombinations("D+Lr", dead, 1.0, roof,1.0); combinations.AddRange(previews); //+D+S previews = LoadCombinationUtils.CreateLoadCombinations("D+S", dead, 1.0, snow, 1.0); combinations.AddRange(previews); //D+0.75L+0.75(Lr or S) //+D+0.75L+0.75Lr previews = LoadCombinationUtils.CreateLoadCombinations("D+0.75L+0.75Lr", dead, 1.0, live, 0.75,roof,0.75); combinations.AddRange(previews); //+D+0.75L+0.75S previews = LoadCombinationUtils.CreateLoadCombinations("D+0.75L+0.75S", dead, 1.0, live, 0.75, snow, 0.75); combinations.AddRange(previews); //D+(0.6W or 0.7E) //D+0.6W previews = LoadCombinationUtils.CreateLoadCombinations("D+0.6W", dead, 1.0, wind, 0.6); combinations.AddRange(previews); //D+0.7E previews = LoadCombinationUtils.CreateLoadCombinations("D+0.7E", dead, 1.0, earthquake, 0.7); combinations.AddRange(previews); //D+0.75(0.6W)+0.75L+0.75(Lr or S) //+D+0.75(0.6W)+0.75L+0.75Lr previews = LoadCombinationUtils.CreateLoadCombinations("D+0.75(0.6W)+0.75L+0.75Lr", dead, 1.0, wind, 0.75*0.6,live,0.75,roof,0.75); combinations.AddRange(previews); //+D+0.75(0.6W)+0.75L+0.75S previews = LoadCombinationUtils.CreateLoadCombinations("D+0.75(0.6W)+0.75L+0.75S", dead, 1.0, wind, 0.75 * 0.6, live, 0.75, snow, 0.75); combinations.AddRange(previews); //D+0.75(0.7E)+0.75L+0.75S previews = LoadCombinationUtils.CreateLoadCombinations("D+0.75(0.7E)+0.75L+0.75S", dead, 1.0, earthquake, 0.75 * 0.7, live, 0.75, snow, 0.75); combinations.AddRange(previews); //0.6D+0.6W previews = LoadCombinationUtils.CreateLoadCombinations("0.6D+0.6W", dead, 0.6, wind, 0.6); combinations.AddRange(previews); //0.6D+0.7E previews = LoadCombinationUtils.CreateLoadCombinations("0.6D+0.7E", dead, 0.6, earthquake, 0.7); combinations.AddRange(previews); } return combinations; } return null; } public override bool RemoveLoadCombinations() { return true; } #endregion #region IExternalServer Members public override string GetDescription() { return "This is the code which generate load combinations according ASCE-7-10"; } public override string GetName() { return "ASCE-7-10"; } public override Guid GetServerId() { return ID; } public override string GetVendorId() { return "John Smith"; } #endregion } }