/// <summary> /// Method to write ITEM-CODE and ITEM-DESCRIPTION entries to enable import of the PCF file into the Plant 3D "PLANTPCFTOISO" command. /// </summary> /// <param name="element">The current element being written.</param> /// <returns>StringBuilder containing the entries.</returns> public static StringBuilder Plant3DIsoWriter(Element element, Document doc) { //If an element has EXISTING in it's PCF_ELEM_SPEC the writing of ITEM-CODE will be skipped, making Plant 3D ISO treat it as existing. pdef elemSpec = new plst().PCF_ELEM_SPEC; Parameter pm = element.get_Parameter(elemSpec.Guid); if (string.Equals(pm.AsString(), "EXISTING")) { return(new StringBuilder()); } //Write ITEM-CODE et al StringBuilder sb = new StringBuilder(); pdef matId = new plst().PCF_MAT_ID; pdef matDescr = new plst().PCF_MAT_DESCR; int itemCode = element.get_Parameter(matId.Guid).AsInteger(); string itemDescr = element.get_Parameter(matDescr.Guid).AsString(); string key = MepUtils.GetElementPipingSystemType(element, doc).Abbreviation; sb.AppendLine(" ITEM-CODE " + key + "-" + itemCode); sb.AppendLine(" ITEM-DESCRIPTION " + itemDescr); return(sb); }
public static void SetWallThicknessPipes(HashSet <Element> elements) { //Wallthicknes for pipes are hardcoded until further notice //Values are from 10216-2 - Seamless steel tubes for pressure purposes //TODO: Implement a way to read values from excel Dictionary <int, string> pipeWallThk = new Dictionary <int, string> { [10] = "1.8 mm", [15] = "2 mm", [20] = "2.3 mm", [25] = "2.6 mm", [32] = "2.6 mm", [40] = "2.6 mm", [50] = "2.9 mm", [65] = "2.9 mm", [80] = "3.2 mm", [100] = "3.6 mm", [125] = "4 mm", [150] = "4.5 mm", [200] = "6.3 mm", [250] = "6.3 mm", [300] = "7.1 mm", [350] = "8 mm", [400] = "8.8 mm", [450] = "10 mm", [500] = "11 mm", [600] = "12.5 mm" }; pdef wallThkDef = new plst().PCF_ELEM_CII_WALLTHK; pdef elemType = new plst().PCF_ELEM_TYPE; foreach (Element element in elements) { //See if the parameter already has value and skip element if it has if (!string.IsNullOrEmpty(element.get_Parameter(wallThkDef.Guid).AsString())) { continue; } if (element.get_Parameter(elemType.Guid).AsString().Equals("SUPPORT")) { continue; } //Retrieve the correct wallthickness from dictionary and set it on the element Parameter wallThkParameter = element.get_Parameter(wallThkDef.Guid); //Get connector set for the pipes ConnectorSet connectorSet = Shared.MepUtils.GetConnectorManager(element).Connectors; Connector c1 = null; switch (element) { case Pipe pipe: //Filter out non-end types of connectors c1 = (from Connector connector in connectorSet where connector.ConnectorType.ToString().Equals("End") select connector).FirstOrDefault(); break; case FamilyInstance fi: c1 = (from Connector connector in connectorSet where connector.GetMEPConnectorInfo().IsPrimary select connector).FirstOrDefault(); Connector c2 = (from Connector connector in connectorSet where connector.GetMEPConnectorInfo().IsSecondary select connector).FirstOrDefault(); if (c2 != null) { if (c1.Radius > c2.Radius) { c1 = c2; } } break; default: break; } if (element is Pipe) { } if (element is FamilyInstance) { } string data = string.Empty; string source = Conversion.PipeSizeToMm(c1.Radius); int dia = Convert.ToInt32(source); pipeWallThk.TryGetValue(dia, out data); wallThkParameter.Set(data); } }
//private UIDocument _uiDoc; public Result CreateAllItemsSchedule(UIDocument uiDoc) { try { Document doc = uiDoc.Document; FilteredElementCollector sharedParameters = new FilteredElementCollector(doc); sharedParameters.OfClass(typeof(SharedParameterElement)); #region Debug ////Debug //StringBuilder sbDev = new StringBuilder(); //var list = new ParameterDefinition().ElementParametersAll; //int i = 0; //foreach (SharedParameterElement sp in sharedParameters) //{ // sbDev.Append(sp.GuidValue + "\n"); // sbDev.Append(list[i].Guid.ToString() + "\n"); // i++; // if (i == list.Count) break; //} ////sbDev.Append( + "\n"); //// Clear the output file //File.WriteAllBytes(InputVars.OutputDirectoryFilePath + "\\Dev.pcf", new byte[0]); //// Write to output file //using (StreamWriter w = File.AppendText(InputVars.OutputDirectoryFilePath + "\\Dev.pcf")) //{ // w.Write(sbDev); // w.Close(); //} #endregion Transaction t = new Transaction(doc, "Create items schedules"); t.Start(); #region Schedule ALL elements ViewSchedule schedAll = ViewSchedule.CreateSchedule(doc, ElementId.InvalidElementId, ElementId.InvalidElementId); schedAll.Name = "PCF - ALL Elements"; schedAll.Definition.IsItemized = false; IList <SchedulableField> schFields = schedAll.Definition.GetSchedulableFields(); foreach (SchedulableField schField in schFields) { if (schField.GetName(doc) != "Family and Type") { continue; } ScheduleField field = schedAll.Definition.AddField(schField); ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedAll.Definition.AddSortGroupField(sortGroupField); } string curUsage = "U"; string curDomain = "ELEM"; var query = from p in new plst().LPAll where p.Usage == curUsage && p.Domain == curDomain select p; foreach (pdef pDef in query.ToList()) { SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters where param.GuidValue.CompareTo(pDef.Guid) == 0 select param).First(); SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First(); ScheduleField field = schedAll.Definition.AddField(queryField); if (pDef.Name != "PCF_ELEM_TYPE") { continue; } ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.HasParameter); schedAll.Definition.AddFilter(filter); } #endregion #region Schedule FILTERED elements ViewSchedule schedFilter = ViewSchedule.CreateSchedule(doc, ElementId.InvalidElementId, ElementId.InvalidElementId); schedFilter.Name = "PCF - Filtered Elements"; schedFilter.Definition.IsItemized = false; schFields = schedFilter.Definition.GetSchedulableFields(); foreach (SchedulableField schField in schFields) { if (schField.GetName(doc) != "Family and Type") { continue; } ScheduleField field = schedFilter.Definition.AddField(schField); ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedFilter.Definition.AddSortGroupField(sortGroupField); } foreach (pdef pDef in query.ToList()) { SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters where param.GuidValue.CompareTo(pDef.Guid) == 0 select param).First(); SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First(); ScheduleField field = schedFilter.Definition.AddField(queryField); if (pDef.Name != "PCF_ELEM_TYPE") { continue; } ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.HasParameter); schedFilter.Definition.AddFilter(filter); filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.NotEqual, ""); schedFilter.Definition.AddFilter(filter); } #endregion #region Schedule Pipelines ViewSchedule schedPipeline = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_PipingSystem), ElementId.InvalidElementId); schedPipeline.Name = "PCF - Pipelines"; schedPipeline.Definition.IsItemized = false; schFields = schedPipeline.Definition.GetSchedulableFields(); foreach (SchedulableField schField in schFields) { if (schField.GetName(doc) != "Family and Type") { continue; } ScheduleField field = schedPipeline.Definition.AddField(schField); ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedPipeline.Definition.AddSortGroupField(sortGroupField); } //curDomain = "PIPL"; List <pdef> parList = new List <pdef>(); plst Plst = new plst(); parList.Add(Plst.PCF_PIPL_LINEID); parList.Add(Plst.PCF_PIPL_NOMCLASS); parList.Add(Plst.PCF_PIPL_TEMP); parList.Add(Plst.PCF_PIPL_AREA); parList.Add(Plst.PCF_PIPL_PROJID); parList.Add(Plst.PCF_PIPL_DATE); parList.Add(Plst.PCF_PIPL_DWGNAME); parList.Add(Plst.PCF_PIPL_REV); parList.Add(Plst.PCF_PIPL_TEGN); parList.Add(Plst.PCF_PIPL_KONTR); parList.Add(Plst.PCF_PIPL_GODK); foreach (pdef pDef in parList) { SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters where param.GuidValue.CompareTo(pDef.Guid) == 0 select param).First(); SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First(); schedPipeline.Definition.AddField(queryField); } #endregion t.Commit(); sharedParameters.Dispose(); return(Result.Succeeded); } catch (Exception e) { BuildingCoderUtilities.InfoMsg(e.Message); return(Result.Failed); } }