/// <summary> /// 将线管连接到设备中的指定的那一个连接件上 /// </summary> /// <param name="cabConnctor"> 配电箱中的要进行连接的连接件</param> /// <returns></returns> public FamilyInstance Connect(Transaction docTrans, Connector cabConnctor) { Connector conduitConnector = null; double nearestDist = double.MaxValue; // 首先找到线管中指向配电箱的那个connector foreach (Connector conduitConn in MEPHelper.FilterConnectors(_conduit.ConduitIns.ConnectorManager.Connectors)) { // 判断准则: conduitConn 的方向与两点连线方向夹角小于90度,而且线管连接件的标高要小于设备连接件的标高 // 在满足条件的线管连接件中,取其中到设备连接件的距离最短的那一个 if (conduitConn.CoordinateSystem.BasisZ.Z > 0.000001 || conduitConn.Origin.Z >= cabConnctor.Origin.Z) { continue; } double angle = conduitConn.CoordinateSystem.BasisZ.AngleTo(cabConnctor.Origin.Subtract(conduitConn.Origin)); double dist = conduitConn.Origin.DistanceTo(cabConnctor.Origin); if (angle < Math.PI / 2 && dist < nearestDist) { conduitConnector = conduitConn; } } // 开始连接 if (conduitConnector == null) { throw new NullReferenceException(" 在线管中未找到合适的连接件来进行连接。\r\n" + " 有效的连接件的方向应该水平,低于电气设备中指定连接件的标高,而且指向设备。"); } FamilyInstance elbow = Connect(docTrans, cabConnctor, conduitConnector); return(elbow); }
private void DoOutput(Document doc) { /* * inFile format: * 1st line: 0 + "\r\n" * 2nd line: rvt file name + "\t" + bldg name + "\t\r\n" * 3rd line: level(l1) + "\t" + l2 + "\t" + ... + "\r\n" */ string inFile = "0\r\n"; string title = doc.Title.Remove(doc.Title.Length - 4).Replace("\r\n", ""); if (15 < title.Length) { title = title.Remove(15); } string bldgName = doc.ProjectInformation.BuildingName.Replace("\r\n", ""); if (15 < bldgName.Length) { title = bldgName.Remove(15); } inFile += title + "\t" + bldgName + "\t\r\n"; MyLevel.WriteLevelsToInFile(ref inFile); MEPHelper.WriteMEPToInFile(doc, ref inFile); IOHelper.Output(inFile, "PGCTF.IN"); }
protected virtual void ExtractObjects(MEPComponents mepComp) { MEPId mepId = null; int num = 0; try { mepId = MEPHelper.GetId(mepComp); num = mepId.builtInCategories.Count; } catch { } for (int i = 0; i < num; ++i) { BuiltInCategory bic = mepId.builtInCategories[i]; ElementType et = mepId.elementTypes[i]; FilteredElementCollector coll = new FilteredElementCollector(_doc); FamilyInstanceFilter fif = new FamilyInstanceFilter(_doc, et.Id); _equips.AddRange(coll.OfCategory(bic).WherePasses(fif).Cast <FamilyInstance>().ToList()); } }
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); }
public List <Connector> GetConnetors() { return(MEPHelper.FilterConnectors(MepModel.ConnectorManager.Connectors)); }