public Result Execute(ExternalCommandData revit, ref string message, ElementSet elements) { ErrorWriter.SetWriter(); ErrorWriter errorWriter = ErrorWriter.GetWriter(); //FireProtectionColl fireProColl = new FireProtectionColl(); try { //Get Doc UIDocument uidoc = revit.Application.ActiveUIDocument; Document doc = uidoc.Document; //Set Level FilteredElementCollector LevelCollector = new FilteredElementCollector(doc); ElementFilter LevelFilter = new ElementClassFilter(typeof(Level)); LevelCollector.WherePasses(LevelFilter); MyLevel.SetMyLevel(LevelCollector); //IO DoOutput(doc); //fireProColl.OutputIN2(doc); Process process = Process.Start(PGPath.exeDirectory + "PGCreator.exe", PGPath.exeDirectory); process.WaitForExit(); char[] outFile = IOHelper.Input("PGCTF.OUT"); IOHelper.Output("1", "PGCTF.OUT"); IOHelper.TryHideFile("PGCTF.OUT"); //Process if (outFile[0] == '0') { MEPHelper.ReadBinFile(); AdditionalInfo addiInfo = new AdditionalInfo(outFile); MyLevel.AdjustLevels(addiInfo); PGWriter.SetWriter(addiInfo); AbandonmentWriter.SetWriter(addiInfo); PGWriter pgWriter = PGWriter.GetWriter(); if (addiInfo.requiredComp[(byte)PGComponents.BeamColumnJoint]) { pgWriter.UpdatePGs(PBeamColumnJoints.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.ShearWall]) { pgWriter.UpdatePGs(PShearWall.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.GypWall] || addiInfo.requiredComp[(byte)PGComponents.WallFinish]) { pgWriter.UpdatePGs(PGypWall.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.CurtainWall]) { pgWriter.UpdatePGs(PCurtainWall.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.Storefront]) { pgWriter.UpdatePGs(PStorefront.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.Ceiling] || addiInfo.requiredComp[(byte)PGComponents.CeilingLighting]) { pgWriter.UpdatePGs(PCeiling.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.MasonryWall]) { pgWriter.UpdatePGs(PMasonryWall.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.Duct]) { pgWriter.UpdatePGs(PDuct.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.Pipe]) { pgWriter.UpdatePGs(PPipe.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.Chiller]) { pgWriter.UpdatePGs((new PChiller(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.CoolingTower]) { pgWriter.UpdatePGs((new PCoolingTower(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.Compressor]) { pgWriter.UpdatePGs((new PCompressor(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.HVACFan_InLine]) { pgWriter.UpdatePGs((new PHVACFan_InLine(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.Diffuser]) { pgWriter.UpdatePGs((new PDiffuser(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.VAV]) { pgWriter.UpdatePGs((new PVAV(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.HVACFan]) { pgWriter.UpdatePGs((new PHVACFan(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.AHU]) { pgWriter.UpdatePGs((new PAHU(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.ControlPanel]) { pgWriter.UpdatePGs((new PControlPanel(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.FireSprinkler]) { pgWriter.UpdatePGs((new PFireSprinkler(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.Transformer]) { pgWriter.UpdatePGs((new PTransformer(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.MCC]) { pgWriter.UpdatePGs((new PMCC(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.LVS]) { pgWriter.UpdatePGs((new PLVS(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.DistPanel]) { pgWriter.UpdatePGs((new PDistPanel(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.BatteryRack]) { pgWriter.UpdatePGs((new PBatteryRack(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.BatteryCharger]) { pgWriter.UpdatePGs((new PBatteryCharger(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.DieselGen]) { pgWriter.UpdatePGs((new PDieselGen(doc, addiInfo)).GetPG()); } if (addiInfo.requiredComp[(byte)PGComponents.BracedFrame]) { pgWriter.UpdatePGs(PBracedFrame.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.SteelBCJoint]) { pgWriter.UpdatePGs(PStealBCJoints.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.FlatSlab]) { pgWriter.UpdatePGs(PFlatSlab.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.LinkBeam]) { pgWriter.UpdatePGs(PLinkBeam.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.Stair]) { pgWriter.UpdatePGs(PStair.GetPG(doc, addiInfo)); } if (addiInfo.requiredComp[(byte)PGComponents.Roof]) { pgWriter.UpdatePGs(PRoof.GetPG(doc, addiInfo)); } normalExit = true; } } catch (Exception e) { errorWriter.WriteError(e); normalExit = false; TaskDialog.Show("PGCreator", "未能正确导出性能组,请与软件提供者联系"); } finally { ErrorWriter.Output(); if (normalExit) { AbandonmentWriter.Output(); PGWriter.Output(); TaskDialog.Show("PGCreator", "性能组导出成功!"); } } return(Result.Succeeded); }