Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        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());
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 public List <Connector> GetConnetors()
 {
     return(MEPHelper.FilterConnectors(MepModel.ConnectorManager.Connectors));
 }