private static int getCalculationElemSet(Document doc, string strDomain, ElementSet caculationOnElems, ElementSet elems) { if (doc == null) { return(0); } int nTotalCount = 0; foreach (Element elem in elems) { MEPSystem mepSys = elem as MEPSystem; if (mepSys == null) { continue; } Category category = mepSys.Category; BuiltInCategory enumCategory = (BuiltInCategory)category.Id.IntegerValue; if ((strDomain == ReportResource.pipeDomain && enumCategory == BuiltInCategory.OST_PipingSystem) || (strDomain == ReportResource.ductDomain && enumCategory == BuiltInCategory.OST_DuctSystem)) { ++nTotalCount; MEPSystemType sysType = doc.GetElement(mepSys.GetTypeId()) as MEPSystemType; if (sysType != null && sysType.CalculationLevel == SystemCalculationLevel.All) { caculationOnElems.Insert(mepSys); } } } return(nTotalCount); }
static bool IsDesirableSystemPredicate( MEPSystem s) { return(s is MechanicalSystem || s is PipingSystem && !s.Name.Equals("unassigned") && 0 < s.Elements.Size); }
public bool hasValidSystem(Document doc, ElementSet elems, string strDomain) { if (elems == null || doc == null || strDomain == null) { return(false); } bool bHasValidSystem = false; foreach (Element elem in elems) { if (elem == null) { continue; } MEPSystem mepSys = elem as MEPSystem; if (!PressureLossReportHelper.instance.isValidSystem(doc, mepSys, strDomain)) { continue; } bHasValidSystem = true; break; } return(bHasValidSystem); }
/// <summary> /// Constructor /// </summary> /// <param name="activeDocument">Revit document</param> /// <param name="system">The MEP system to traverse</param> public TraversalTree(MEPSystem system) { m_document = system.Document; m_system = system; m_isMechanicalSystem = (system is MechanicalSystem); _visitedElementCount = new Dictionary <int, int>(); }
public bool getSelectedSystems(ElementSet selSystems) { if (doc == null) { return(false); } if (selElems.Size > 0) { //check if the selected element is system foreach (Element elem in selElems) { if (elem == null) { continue; } MEPSystem mepSys = elem as MEPSystem; if (mepSys == null || !isValidSystem(doc, mepSys, Domain)) { continue; } selSystems.Insert(elem); } if (selSystems.Size > 0) { return(true); } } return(false); }
public QLMepSystemResolve(MEPSystem _mepSystem) { id = _mepSystem.Id.ToString(); name = _mepSystem.Name; mepDomain = GetMepDomain(_mepSystem).ToString(); //https://thebuildingcoder.typepad.com/blog/2016/06/traversing-and-exporting-all-mep-system-graphs.html // to travers mep system from the root FamilyInstance root = _mepSystem.BaseEquipment; if (root != null && (_mepSystem.GetType() == typeof(MechanicalSystem))) { // Traverse the system and dump the // traversal graph into an XML file TraversalTree tree = new TraversalTree(_mepSystem); if (tree.Traverse()) { qlTammTreeNode = new QLTammTreeNodeResolve(JsonSerializer.Deserialize <JsonElement>(tree.DumpToJsonTopDown())); } } }
MepDomain GetMepDomain(MEPSystem s) { return((s is MechanicalSystem) ? MepDomain.Mechanical : ((s is ElectricalSystem) ? MepDomain.Electrical : ((s is PipingSystem) ? MepDomain.Piping : MepDomain.Invalid))); }
/// <summary> /// 用来找到连接器 /// </summary> /// <param name="element">设备</param> /// <returns>连接件集合</returns> public static ConnectorSet GetConnectorSet(Element element) { if (element == null) { return(null); } FamilyInstance fi = element as FamilyInstance; if (fi != null && fi.MEPModel.ConnectorManager != null) { return(fi.MEPModel.ConnectorManager.Connectors); } MEPSystem system = element as MEPSystem; if (system != null) { return(system.ConnectorManager.Connectors); } MEPCurve duct = element as MEPCurve; if (duct != null) { return(duct.ConnectorManager.Connectors); } return(null); }
public bool isValidSystem(Document doc, MEPSystem mepSys, string strDomain) { if (mepSys == null || doc == null) { return(false); } if (mepSys.IsEmpty || !mepSys.IsValid) { return(false); } Category category = mepSys.Category; BuiltInCategory enumCategory = (BuiltInCategory)category.Id.IntegerValue; if (strDomain == ReportResource.pipeDomain && enumCategory != BuiltInCategory.OST_PipingSystem) { return(false); } if (strDomain == ReportResource.ductDomain && enumCategory != BuiltInCategory.OST_DuctSystem) { return(false); } MEPSystemType sysType = doc.GetElement(mepSys.GetTypeId()) as MEPSystemType; if (sysType == null) { return(false); } return(isValidSystemType(sysType)); }
// // Copied from Revit SDK TraverseSystem example // // (C) Copyright 2003-2010 by Autodesk, Inc. // /// <summary> /// Get the mechanical or piping system /// from the connectors of selected element. /// </summary> /// <param name="connectors">Connectors of selected element</param> /// <returns>The found mechanical or piping system</returns> static public MEPSystem ExtractSystemFromConnectors(ConnectorSet connectors) { MEPSystem system = null; if (connectors == null || connectors.Size == 0) { return(null); } // Get well-connected mechanical or // piping systems from each connector List <MEPSystem> systems = new List <MEPSystem>(); foreach (Connector connector in connectors) { MEPSystem tmpSystem = connector.MEPSystem; if (tmpSystem == null) { continue; } MechanicalSystem ms = tmpSystem as MechanicalSystem; if (ms != null) { if (ms.IsWellConnected) { systems.Add(tmpSystem); } } else { PipingSystem ps = tmpSystem as PipingSystem; if (ps != null && ps.IsWellConnected) { systems.Add(tmpSystem); } } } // If more than one system is found, // get the system contains the most elements int countOfSystem = systems.Count; if (countOfSystem != 0) { int countOfElements = 0; foreach (MEPSystem sys in systems) { if (sys.Elements.Size > countOfElements) { system = sys; countOfElements = sys.Elements.Size; } } } return(system); }
//Добавление системы шлейфа к блоку void findAndAddSystem(MEPSystem system) { ARKBLocks.ForEach(e => { if (e.id == system.BaseEquipment.Id.ToString()) { e.addSystem(system); } }); }
void DrawSensors(XYZ point, MEPSystem mep, int ark, ViewDrafting view, Document doc) { int Dim = 0; int Hand = 0; foreach (Element e in mep.Elements) { if (e.Name.Contains("дым")) { ++Dim; } if (e.Name.Contains("ИПР")) { ++Hand; } } if (Dim > 0) { if (Dim == 1) { point = drawOne(doc, view, true, 1, Double.Parse(mep.Name), ark, point); } if (Dim == 2) { point = drawTwo(doc, view, true, Double.Parse(mep.Name), ark, point); } if (Dim > 2) { point = drawMore(doc, view, true, Dim, Double.Parse(mep.Name), ark, point); } } if (Hand > 0) { if (Dim > 0) { geometry.AddLines(doc, view, geometry.ConnectLinesByPoints(new List <XYZ> { point, new XYZ(point.X + 0.5, point.Y, 0) })); point = new XYZ(point.X + 0.5, point.Y, 0); } //нарисовать соединение if (Hand == 1) { point = drawOne(doc, view, false, 1, Double.Parse(mep.Name), ark, point); } if (Hand == 2) { point = drawTwo(doc, view, false, Double.Parse(mep.Name), ark, point); } if (Hand > 2) { point = drawMore(doc, view, false, Hand, Double.Parse(mep.Name), ark, point); } } }
/// <summary> /// Return true to include this system in the /// exported system graphs. /// </summary> static bool IsDesirableSystemPredicate(MEPSystem s) { return(1 < s.Elements.Size && !s.Name.Equals("unassigned") && ((s is MechanicalSystem && ((MechanicalSystem)s).IsWellConnected) || (s is PipingSystem && ((PipingSystem)s).IsWellConnected) || (s is ElectricalSystem && ((ElectricalSystem)s).IsMultipleNetwork))); }
// copied from sdk - TraverseSystem example // // (C) Copyright 2003-2010 by Autodesk, Inc. // /// <summary> /// Get the mechanical or piping system /// from selected element /// </summary> /// <param name="selectedElement">Selected element</param> /// <returns>The extracted mechanical or piping system, /// or null if no expected system is found.</returns> static public MEPSystem ExtractMechanicalOrPipingSystem( Element selectedElement) { MEPSystem system = null; if (selectedElement is MEPSystem) { if (selectedElement is MechanicalSystem || selectedElement is PipingSystem) { system = selectedElement as MEPSystem; return(system); } } else // Selected element is not a system { FamilyInstance fi = selectedElement as FamilyInstance; // If selected element is a family instance, // iterate its connectors and get the expected system if (fi != null) { MEPModel mepModel = fi.MEPModel; ConnectorSet connectors = null; try { connectors = mepModel.ConnectorManager.Connectors; } catch (System.Exception) { system = null; } system = ExtractSystemFromConnectors(connectors); } else { // If selected element is a MEPCurve (e.g. pipe or duct), // iterate its connectors and get the expected system MEPCurve mepCurve = selectedElement as MEPCurve; if (mepCurve != null) { ConnectorSet connectors = null; connectors = mepCurve.ConnectorManager.Connectors; system = ExtractSystemFromConnectors(connectors); } } } return(system); }
private void ChoiceButton_Click(object sender, EventArgs e) { Element choice = allSystems.Where(f => f.Name == systems.SelectedItem.ToString()).ToArray()[0]; MEPSystem chosenSystem = (MEPSystem)choice; Utilities.calculatedSystem = chosenSystem; allResults = Utilities.CalculateForAllPipes(chosenSystem); Hide(); DisplayNamesAndIDs(); buttonsPanel.Show(); header.Hide(); Show(); }
private void addItemsToCheckList(PressureLossReportHelper helper, ICollection <Autodesk.Revit.DB.Element> founds) { //get the selected systems first ElementSet selSystems = new ElementSet(); helper.getSelectedSystems(selSystems); List <string> checkedItems = new List <string>(); foreach (Element elem in selSystems) { MEPSystem mepSys = elem as MEPSystem; if (mepSys == null) { continue; } checkedItems.Add(mepSys.Name); } List <MEPSystemType> selSystemTypes = helper.getSelectedSystemTypes(true); if ((selSystemTypes == null || selSystemTypes.Count < 1) && (checkedItems == null || checkedItems.Count < 1)) { bool bCheckAll = true; if (helper.isSelectInValidSystemType()) { bCheckAll = false; } addItemsToCheckList(helper, founds, null, bCheckAll); } else { foreach (Autodesk.Revit.DB.Element elem in founds) { Autodesk.Revit.DB.MEPSystem mepSysElem = elem as Autodesk.Revit.DB.MEPSystem; Autodesk.Revit.DB.MEPSystemType mepSysType = helper.getSystemType(helper.Doc, mepSysElem); if (isCheckedSystemType(mepSysType) && helper.isValidSystem(helper.Doc, mepSysElem, helper.Domain) && isCalculationOn(helper.Doc, mepSysElem)) { if (selSystemTypes != null && PressureLossReportHelper.isSystemTypeInList(selSystemTypes, mepSysType)) { checkedItems.Add(mepSysElem.Name); } } } addItemsToCheckList(helper, founds, checkedItems); } }
//Create, assign variable to and traverse the tree correspondent to a specific MEPSystem public static List <CalculationResults> CalculateForAllPipes(MEPSystem targetSystem) { //loading necessary data first if (!dataIsExtracted) { LoadAllData(); } TraversalTree tree = new TraversalTree(doc, targetSystem); tree.doc = doc; tree.allResults = new List <CalculationResults>(); tree.Traverse(); return(tree.allResults); }
public MEPSystemInfo(MEPSystem systemElem) { system = systemElem; if (system == null) return; PressureLossReportHelper helper = PressureLossReportHelper.instance; if (helper == null) return; MEPSystemType sysType = helper.Doc.GetElement(system.GetTypeId()) as MEPSystemType; if (sysType != null) helper.SystemClassification = sysType.SystemClassification; }
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { try { comboBox1.Items.Clear(); int selectedind = listBox1.SelectedIndex; ARKModule ark = blocks[selectedind]; MEPSystem mep = null; foreach (MEPSystem m in ark.systems) { if (m.Name.Contains("1")) { mep = m; } } double len = getL(mep, ark.systems.Count); len = getNormalCount(len); double I = 0; I = getI(mep); //label23.Text = len.ToString(); // label24.Text = I.ToString(); foreach (MEPSystem m in ark.systems) { string name = m.Name + "-й шлейф"; double s = getS(getI(mep), getL(m, ark.systems.Count)); comboBox1.Items.Add(name + ": " + s.ToString()); } try { int set_index = settings.loadSettingByARK(listBox1.SelectedItem.ToString()); SettingSections set = settings.getByIndex(set_index); string[] sections = set.section.Split('x'); textBox4.Text = set.mark; textBox6.Text = sections[0]; textBox7.Text = sections[1]; textBox3.Text = sections[2]; textBox8.Text = set.op; } catch { } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
public List <MEPSystemType> getSelectedSystemTypes(bool bOnlySelectedSystemType = false) { if (doc == null) { return(null); } if (selElems.Size > 0) { List <MEPSystemType> sysTypes = new List <MEPSystemType>(); foreach (Element elem in selElems) { if (elem == null) { continue; } MEPSystemType mepSysType = null; if (!bOnlySelectedSystemType) { MEPSystem mepSys = elem as MEPSystem; if (mepSys != null && isValidSystem(doc, mepSys, Domain)) { mepSysType = doc.GetElement(mepSys.GetTypeId()) as MEPSystemType; } } if (mepSysType == null) { mepSysType = elem as MEPSystemType; } if (mepSysType == null || !isValidSystemType(mepSysType)) { continue; } if (!isSystemTypeInList(sysTypes, mepSysType)) { sysTypes.Add(mepSysType); } } return(sysTypes); } return(null); }
private double getI(MEPSystem mep) { int countsensors = 0; double I = 0; foreach (FamilyInstance elem in mep.Elements) { if (elem.Symbol.LookupParameter("Потребляемый ток") != null) { I += elem.Symbol.LookupParameter("Потребляемый ток").AsDouble(); } countsensors++; } I = I / countsensors; return(I); }
public static Connector[] GetConnectorsFromFamilyInstance(Element e) { if (e == null) { return(null); } FamilyInstance fi = e as FamilyInstance; ConnectorSet connectorSet = null; List <Connector> cList = new List <Connector>(); if (fi != null && fi.MEPModel != null) { try { connectorSet = fi.MEPModel.ConnectorManager.Connectors; } catch { return(null); } } MEPSystem system = e as MEPSystem; if (system != null) { connectorSet = system.ConnectorManager.Connectors; } MEPCurve duct = e as MEPCurve; if (duct != null) { connectorSet = duct.ConnectorManager.Connectors; } if (connectorSet == null) { return(null); } foreach (Connector c in connectorSet) { cList.Add(c); } return(cList.ToArray()); }
static public string getCriticalPathPressureLoss(MEPSystem elemSystem) { string strVal = ""; if (elemSystem != null) { if (PressureLossReportHelper.instance.Domain == ReportResource.pipeDomain) { strVal = FormatUtils.Format(PressureLossReportHelper.instance.Doc, UnitType.UT_Piping_Pressure, elemSystem.PressureLossOfCriticalPath); } else { strVal = FormatUtils.Format(PressureLossReportHelper.instance.Doc, UnitType.UT_HVAC_Pressure, elemSystem.PressureLossOfCriticalPath); } } return(strVal); }
public static string MEPSystemAbbreviation(this Connector con, Document doc, bool ignoreMepSystemNull = false) { if (con.MEPSystem != null) { MEPSystem ps = con.MEPSystem; PipingSystemType pst = (PipingSystemType)doc.GetElement(ps.GetTypeId()); return(pst.Abbreviation); } else if (ignoreMepSystemNull) { return(""); } else { throw new Exception($"A connector at element {con.Owner.Id.IntegerValue} has MEPSystem = null!"); } }
public bool isSelectInValidSystemType() { if (doc == null) { return(false); } if (selElems.Size > 0) { MEPSystemType mepSysType = null; foreach (Element elem in selElems) { if (elem == null) { continue; } mepSysType = null; MEPSystem mepSys = elem as MEPSystem; if (mepSys != null && isValidSystem(doc, mepSys, Domain)) { mepSysType = doc.GetElement(mepSys.GetTypeId()) as MEPSystemType; } if (mepSysType == null) { mepSysType = elem as MEPSystemType; } if (mepSysType == null) { continue; } if (!isValidSystemType(mepSysType)) { return(true); } } } return(false); }
private MEPSystem ExtractMechanicalOrPipingSystem(Element selectedElement) { MEPSystem system = null; if (selectedElement is MEPSystem) { if (selectedElement is MechanicalSystem || selectedElement is PipingSystem) { system = selectedElement as MEPSystem; return(system); } } else { FamilyInstance fi = selectedElement as FamilyInstance; if (fi != null) { MEPModel mepModel = fi.MEPModel; ConnectorSet connectors = null; try { connectors = mepModel.ConnectorManager.Connectors; } catch (System.Exception) { system = null; } system = ExtractSystemFromConnectors(connectors, selectedElement); } else { MEPCurve mepCurve = selectedElement as MEPCurve; if (mepCurve != null) { ConnectorSet connectors = null; connectors = mepCurve.ConnectorManager.Connectors; system = ExtractSystemFromConnectors(connectors, selectedElement); } } } return(system); }
public static void WriteMEPSystem(MEPSystem system) { WriteElement(system.BaseEquipment); Trace.Unindent(); Trace.WriteLine("+BaseEquipmentConnector"); Trace.Indent(); WriteConnector(system.BaseEquipmentConnector); Trace.Unindent(); Trace.WriteLine("+Elements"); Trace.Indent(); foreach (Element element in system.Elements) { WriteElement(element); Trace.WriteLine(""); } Trace.Unindent(); Trace.WriteLine("+ConnectorManager"); Trace.Indent(); WriteConnectorManager(system.ConnectorManager); Trace.Unindent(); }
public static string getCriticalPath(MEPSystem elemSystem) { string strPath = ""; if (elemSystem != null) { IList<int> paths = elemSystem.GetCriticalPathSectionNumbers(); if (paths != null) { int nIndex = 0; foreach (int nn in paths) { nIndex++; strPath += nn; if (nIndex < paths.Count) strPath += ReportConstants.emptyValue; } } } return strPath; }
private MEPSystem ExtractSystemFromConnectors(ConnectorSet connectors, Element selectEle) { MEPSystem system = null; if (connectors == null || connectors.Size == 0) { return(null); } List <MEPSystem> systems = new List <MEPSystem>(); foreach (Connector connector in connectors) { MEPSystem tmpSystem = connector.MEPSystem; if (tmpSystem == null) { continue; } MechanicalSystem ms = tmpSystem as MechanicalSystem; if (ms != null) { systems.Add(tmpSystem); } else { PipingSystem ps = tmpSystem as PipingSystem; systems.Add(tmpSystem); } } //if there is more than one system is found, get system contain the selected element; foreach (MEPSystem sys in systems) { if (sys.GetParameters(selectEle.Name) != null) { system = sys; } } return(system); }
//Добавление системы шлейфа к блоку void findAndAddSystem(MEPSystem system) { try { ARKBLocks.ForEach(e => { if (e.id == system.BaseEquipment.Id.ToString()) { if (system.LookupParameter("Комментарии").AsString() == null) { e.addSystem(system); } else { e.addAlertSystem(system); } } } ); } catch { throw new Exception("Ошибка добавления системы шлейфа к блоку."); } }
public MEPSystemInfo(MEPSystem systemElem) { system = systemElem; if (system == null) { return; } PressureLossReportHelper helper = PressureLossReportHelper.instance; if (helper == null) { return; } MEPSystemType sysType = helper.Doc.GetElement(system.GetTypeId()) as MEPSystemType; if (sysType != null) { helper.SystemClassification = sysType.SystemClassification; } }
static public string getCriticalPath(MEPSystem elemSystem) { string strPath = ""; if (elemSystem != null) { IList <int> paths = elemSystem.GetCriticalPathSectionNumbers(); if (paths != null) { int nIndex = 0; foreach (int nn in paths) { nIndex++; strPath += nn; if (nIndex < paths.Count) { strPath += ReportConstants.emptyValue; } } } } return(strPath); }
public static string getCriticalPathPressureLoss(MEPSystem elemSystem) { string strVal = ""; if (elemSystem != null) { if (PressureLossReportHelper.instance.Domain == ReportResource.pipeDomain) strVal = FormatUtils.Format(PressureLossReportHelper.instance.Doc, UnitType.UT_Piping_Pressure, elemSystem.PressureLossOfCriticalPath); else strVal = FormatUtils.Format(PressureLossReportHelper.instance.Doc, UnitType.UT_HVAC_Pressure, elemSystem.PressureLossOfCriticalPath); } return strVal; }
public static void getSectionsFromSystem(MEPSystem system, List<MEPSection> sections) { if (system == null || sections == null) return; int nSection = system.SectionsCount; if (nSection > 0) { for (int ii = 1; ii < nSection + 1; ++ii) //section number start from 1 { MEPSection section = system.GetSectionByNumber(ii); if (section == null) continue; sections.Add(section); } } }
private void Stream( ArrayList data, MEPSystem mepSys ) { data.Add( new Snoop.Data.ClassSeparator( typeof( MEPSystem ) ) ); data.Add( new Snoop.Data.Object( "Base equipment", mepSys.BaseEquipment ) ); data.Add( new Snoop.Data.Object( "Base equipment connector", mepSys.BaseEquipmentConnector ) ); data.Add( new Snoop.Data.Object( "Connector manager", mepSys.ConnectorManager ) ); data.Add( new Snoop.Data.Enumerable( "Elements", mepSys.Elements ) ); ElectricalSystem elecSys = mepSys as ElectricalSystem; if( elecSys != null ) { Stream( data, elecSys ); return; } MechanicalSystem mechSys = mepSys as MechanicalSystem; if( mechSys != null ) { Stream( data, mechSys ); return; } PipingSystem pipingSys = mepSys as PipingSystem; if( pipingSys != null ) { Stream( data, pipingSys ); return; } }