internal RemoteGlobalParameters(Document doc, Units units) { GlobalParameters = new List <RemoteGlobalParameter>(); Units = units; IList <ElementId> globalparamids = GlobalParametersManager.GetGlobalParametersOrdered(doc); foreach (ElementId gid in globalparamids) { GlobalParameter parameter = doc.GetElement(gid) as GlobalParameter; if (!GlobalParametersManager.IsValidGlobalParameter(doc, parameter.Id)) { continue; } if (parameter.IsDrivenByFormula) { continue; } GlobalParameters.Add(new RemoteGlobalParameter(parameter, Units)); } }
public FinishForm(Document Doc) { this.doc = Doc; if (GlobalParametersManager.FindByName(doc, "FinData") != ElementId.InvalidElementId) { GlobalParameter GlobePar2 = doc.GetElement(GlobalParametersManager.FindByName(doc, "FinData")) as GlobalParameter; StringParameterValue strPar = GlobePar2.GetValue() as StringParameterValue; String GPar = strPar.Value; wTypeBoxes = GPar.Split('|').ToList(); } PhaseArray xcom = doc.Phases; List <Element> walltypes1 = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsElementType().ToList(); walltypes1 = walltypes1.OrderBy(x => x.Name).ToList(); List <Element> walltypes2 = walltypes1.Select(x => x).ToList(); List <Element> walltypes3 = walltypes1.Select(x => x).ToList(); //xcom. //PhaseSelector.SelectedItem = xcom; InitializeComponent(); comboBox1.DataSource = walltypes1; comboBox1.DisplayMember = "Name"; comboBox1.ValueMember = "Id"; try { comboBox1.SelectedIndex = walltypes1.IndexOf(walltypes1.First(x => x.Name == wTypeBoxes[0])); } catch (Exception) { } LocFinSelector.DataSource = walltypes2; LocFinSelector.DisplayMember = "Name"; LocFinSelector.ValueMember = "Id"; try { LocFinSelector.SelectedIndex = walltypes2.IndexOf(walltypes2.First(x => x.Name == wTypeBoxes[1])); } catch (Exception) { } ColumnFinSelector.DataSource = walltypes3; ColumnFinSelector.DisplayMember = "Name"; ColumnFinSelector.ValueMember = "Id"; try { ColumnFinSelector.SelectedIndex = walltypes3.IndexOf(walltypes3.First(x => x.Name == wTypeBoxes[2])); } catch (Exception) { } PhaseSelector.DataSource = xcom as IList <Phase>; PhaseSelector.DisplayMember = "Name"; PhaseSelector.ValueMember = "Id"; foreach (Phase item in xcom) { PhaseSelector.Items.Add(item); } PhaseSelector.SelectedIndex = xcom.Size - 1; }
void readFromGlobal() { wTypeBoxes = ((doc.GetElement(GlobalParametersManager.FindByName(doc, "FinData")) as GlobalParameter).GetValue() as StringParameterValue).Value.Split('|').ToList(); }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; #region Clear the existing system. TaskDialogResult r = TaskDialog.Show("Note", "This will clear the existing " + "electrical system.Continue?", TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No); if (r == TaskDialogResult.No) { return(Result.Failed); } using (Transaction tx = new Transaction(doc)) { tx.Start("Clear existing system."); FilteredElementCollector col = new FilteredElementCollector(doc) .WhereElementIsNotElementType() .OfCategory(BuiltInCategory.OST_ElectricalCircuit); Stack <ElementId> sysId = new Stack <ElementId>(); foreach (Element e in col) { sysId.Push(e.Id); } while (sysId.Count > 0) { doc.Delete(sysId.Pop()); } tx.Commit(); } #endregion #region Check the default settings. const string elecSettingName = "DefaultElectricalSettingExcuted"; GlobalParameter SettingP = doc.GetElement( GlobalParametersManager.FindByName (doc, elecSettingName)) as GlobalParameter; if (SettingP == null) { //Set the voltage and distribution to default using (Transaction tx = new Transaction(doc)) { tx.Start("Autoset electrical setting"); ElectricalSetting ElecSet = ElectricalSetting .GetElectricalSettings(doc); VoltageType VtypeHome = ElecSet .AddVoltageType("Home", 220, 200, 250); ElecSet.AddDistributionSysType ("Lighting", ElectricalPhase.SinglePhase, ElectricalPhaseConfiguration.Undefined, 2, null, VtypeHome); ElecSet.AddDistributionSysType ("Outlet", ElectricalPhase.SinglePhase, ElectricalPhaseConfiguration.Undefined, 2, null, VtypeHome); GlobalParameter.Create (doc, elecSettingName, ParameterType.Number); tx.Commit(); } } #endregion #region Retrieve elements from database List <ElementId> LightIds = new List <ElementId>(); List <ElementId> OutletIds = new List <ElementId>(); List <ElementId> HVACIds = new List <ElementId>(); FilteredElementCollector colLight = new FilteredElementCollector(doc) .OfCategory(BuiltInCategory.OST_LightingFixtures) .WhereElementIsNotElementType(); FilteredElementCollector colOutlet = new FilteredElementCollector(doc) .OfCategory(BuiltInCategory.OST_ElectricalFixtures) .WhereElementIsNotElementType(); FilteredElementCollector colHVAC = new FilteredElementCollector(doc) .OfCategory(BuiltInCategory.OST_MechanicalEquipment) .WhereElementIsNotElementType(); foreach (Element e in colLight) { LightIds.Add(e.Id); } foreach (Element e in colOutlet) { OutletIds.Add(e.Id); } foreach (Element e in colHVAC) { if (HasElectricalConnector(e)) { HVACIds.Add(e.Id); } } #endregion Retrieve elements from databa //Locate the electrical main box. FamilyInstance ElecBox = null; do { try { Selection sel = uidoc.Selection; TaskDialog.Show("Choose", "Please " + "select one electrical box after " + "closing the dialog.\n" + "请在关闭窗口后选择一个配电箱。"); ElementId ElecBoxId = sel.PickObject (ObjectType.Element, new SelFilterElecEquip() , "Select the main box").ElementId; ElecBox = doc.GetElement(ElecBoxId) as FamilyInstance; } catch (Exception ex) { TaskDialog.Show("Error", "Something went wrong.\n" + ex.Message); return(Result.Failed); } } while ((ElecBox.MEPModel as ElectricalEquipment) .DistributionSystem == null); // Create the electrical system using (Transaction tx = new Transaction(doc)) { tx.Start("Create ElectricalSystem"); ElectricalSystem LightingCircuit = ElectricalSystem.Create(doc, LightIds, ElectricalSystemType.PowerCircuit); LightingCircuit.Name = "LightingCircuit"; LightingCircuit.SelectPanel(ElecBox); ElectricalSystem OutlietCircuit = ElectricalSystem.Create(doc, OutletIds, ElectricalSystemType.PowerCircuit); OutlietCircuit.Name = "OutletCircuit"; OutlietCircuit.SelectPanel(ElecBox); ElectricalSystem HVACCircuit = ElectricalSystem.Create(doc, HVACIds, ElectricalSystemType.PowerCircuit); HVACCircuit.Name = "HVACCircuit"; HVACCircuit.SelectPanel(ElecBox); tx.Commit(); } TaskDialog.Show("Result", "Default systems have been created.\n" + "Please do not change system name.\n" + "已创建默认系统,请勿修改系统名,将影响后续计算\n" + "可手动调整系统内末端."); return(Result.Succeeded); }
Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; //GlobalParameter. //GlobalParameter one = ; FinishForm questions = new FinishForm(doc); questions.Show(); questions.Activate(); double FT = 0.3048; PhaseArray xcom = doc.Phases; Phase lastPhase = xcom.get_Item(xcom.Size - 1); ElementId idPhase = lastPhase.Id; FilterNumericRuleEvaluator evaluator = new FilterNumericEquals(); List <SharedParameterElement> shParamElements = new FilteredElementCollector(doc) .OfClass(typeof(SharedParameterElement)) .Cast <SharedParameterElement>() .ToList(); //SharedParameterElement shParam = shParamElements.Where(x => x.Name == "ADSK_Номер здания").First(); //Фильтр: Помещения на последней стадии FilterableValueProvider providerRoom = new ParameterValueProvider(new ElementId((int)BuiltInParameter.ROOM_PHASE_ID)); FilterElementIdRule rRule = new FilterElementIdRule(providerRoom, evaluator, idPhase); ElementParameterFilter room_filter = new ElementParameterFilter(rRule); //FilterableValueProvider provRoomSchool = new ParameterValueProvider(shParam.Id); FilterStringRuleEvaluator StrEvaluator = new FilterStringEquals(); //FilterRule rScRule = new FilterStringRule(provRoomSchool, StrEvaluator, "",false); //ElementParameterFilter roomSc_filter = new ElementParameterFilter(rScRule); IList <Element> rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms) .WhereElementIsNotElementType() .WherePasses(room_filter) //.WherePasses(roomSc_filter) .ToElements(); //Фильтр: Стены созданные на последней стадии FilterableValueProvider provider = new ParameterValueProvider(new ElementId((int)BuiltInParameter.PHASE_CREATED)); FilterElementIdRule fRule = new FilterElementIdRule(provider, evaluator, idPhase); ElementParameterFilter door_filter = new ElementParameterFilter(fRule); IList <Element> allWalls = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls) .WhereElementIsNotElementType() .WherePasses(door_filter) .ToElements(); //Фильтр: экземпляры дверей List <FamilyInstance> doors = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors) .WhereElementIsNotElementType() .Cast <FamilyInstance>() .ToList(); List <FamilySymbol> ento = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Entourage) .WhereElementIsElementType() .Cast <FamilySymbol>() .ToList(); List <String> entoName = new List <string>(); foreach (FamilySymbol i in ento) { entoName.Add(i.Name); } List <String> entoFamily = new List <string>(); //List<otdelka> otd = new List<otdelka>(); foreach (FamilySymbol f in ento) { //otd.Add(new otdelka(f.FamilyName+':'+f.Name,f.getP("АР_Состав отделки"))); entoFamily.Add(f.FamilyName); } //List<String> one = new List<string>(); //foreach (FamilySymbol f in ento) //{ // one.Add(f.getP("АР_Состав отделки")); //} //string two = doc.GetElement(rooms[0].LookupParameter("ОТД_Пол").AsElementId()).Name; List <Element> walls = new List <Element>(); List <GhostWall> cWalls = new List <GhostWall>(); foreach (Element item in allWalls) { if (item.LookupParameter("Помещение").AsString() != null & item.LookupParameter("Помещение").AsString() != "") { bool isLocal = (item as Wall).WallType.LookupParameter("rykomoika").AsInteger() == 1 ? true : false; walls.Add(item); cWalls.Add(new GhostWall( item.getP("Помещение"), item.LevelId, item.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED).AsDouble(), isLocal )); } } List <ElementId> Levels = new List <ElementId>(); rooms = rooms.OrderBy(x => x.get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString()).ToList(); List <RoomFinishing> novaRooms = new List <RoomFinishing>(); foreach (Element e in rooms) { novaRooms.Add(new RoomFinishing(e)); } novaRooms = novaRooms.OrderBy(x => x.Num).ToList(); List <ElementId> wallLevels = new List <ElementId>(); foreach (Element i in rooms) { Levels.Add(i.LevelId); } foreach (Element i in walls) { wallLevels.Add(i.LevelId); } IEnumerable <String> LevelsName = new List <String>(); //Levels=Levels.Distinct().ToList(); //Levels = Levels.OrderBy(x=>doc.GetElement(x).Name).ToList(); foreach (ElementId i in Levels.Distinct().OrderBy(x => doc.GetElement(x).Name)) { LevelsName = LevelsName.Append(doc.GetElement(i).Name); } String str = String.Join(",", LevelsName); IEnumerable <bool> isNewC = new List <bool>(); IEnumerable <bool> isNewW = new List <bool>(); IEnumerable <bool> SecFin = new List <bool>(); List <String> CeilText = new List <String>(); List <String> MainText = new List <String>(); List <String> FloorText = new List <String>(); List <string> WallsLocal = new List <string>(); List <List <Element> > roomByLevel = new List <List <Element> >(); List <List <String> > roomNumByLevel = new List <List <String> >(); List <List <String> > CeilTextByLevel = new List <List <string> >(); List <List <String> > MainTextByLevel = new List <List <string> >(); List <List <String> > FloorTextByLevel = new List <List <string> >(); List <List <List <Element> > > FinishTable = new List <List <List <Element> > >(); List <List <List <String> > > FinishTableNum = new List <List <List <String> > >(); List <List <List <double> > > FinishTableW3S = new List <List <List <double> > >(); List <List <Element> > wallByLevel = new List <List <Element> >(); List <List <String> > wallNumByLevel = new List <List <String> >(); List <List <double> > wallAreaByLevel = new List <List <double> >(); List <List <double> > WallS1 = new List <List <double> >(); List <List <double> > WallS2 = new List <List <double> >(); List <List <string> > WallsLocalText = new List <List <string> >(); List <List <List <Element> > > floorTable = new List <List <List <Element> > >(); List <List <List <string> > > floorTableNum = new List <List <List <string> > >(); List <List <List <double> > > plintTable = new List <List <List <double> > >(); List <List <double> > plintByLevel = new List <List <double> >(); List <List <double> > perimByLevel = new List <List <double> >(); foreach (ElementId lev in Levels.Distinct().OrderBy(x => doc.GetElement(x).Name)) { List <Element> s = new List <Element>(); List <String> n = new List <String>(); List <String> ct = new List <String>(); List <String> mt = new List <String>(); List <String> ft = new List <String>(); List <double> ws = new List <double>(); List <double> ws2 = new List <double>(); List <string> wt = new List <string>(); List <double> pl = new List <double>(); List <double> pr = new List <double>(); for (int i = 0; i < Levels.Count(); i++) { if (Levels[i] == lev) { s.Add(rooms.ElementAt(i)); n.Add(rooms.ElementAt(i).get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString()); ct.Add(rooms.ElementAt(i).LookupParameter("ОТД_Потолок").AsValueString()); mt.Add(rooms.ElementAt(i).LookupParameter("ОТД_Стены").AsValueString()); ft.Add(rooms.ElementAt(i).LookupParameter("ОТД_Пол").AsValueString()); pr.Add(rooms.ElementAt(i).get_Parameter(BuiltInParameter.ROOM_PERIMETER).AsDouble()); ws.Add(0); ws2.Add(0); pl.Add(0); wt.Add(""); CeilText.Add(rooms.ElementAt(i).LookupParameter("ОТД_Потолок").AsValueString()); MainText.Add(rooms.ElementAt(i).LookupParameter("ОТД_Стены").AsValueString()); FloorText.Add(rooms.ElementAt(i).LookupParameter("ОТД_Пол").AsValueString()); } } roomByLevel.Add(s); roomNumByLevel.Add(n); CeilTextByLevel.Add(ct); MainTextByLevel.Add(mt); FloorTextByLevel.Add(ft); WallS1.Add(ws); WallS2.Add(ws2); WallsLocalText.Add(wt); plintByLevel.Add(pl); perimByLevel.Add(pr); List <Element> w = new List <Element>(); List <String> wn = new List <String>(); List <double> wa = new List <double>(); //List<Wall> est = walls as List<Wall>; for (int i = 0; i < wallLevels.Count(); i++) { if (wallLevels[i] == lev) { w.Add(walls[i]); wn.Add(walls[i].LookupParameter("Помещение").AsString()); wa.Add(walls[i].get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED).AsDouble()); } } wallAreaByLevel.Add(wa); wallByLevel.Add(w); wallNumByLevel.Add(wn); } //Плинтус foreach (FamilyInstance d in doors) { foreach (RoomFinishing r in novaRooms) { try { if (d.get_FromRoom(lastPhase).Id == r.Id | d.get_ToRoom(lastPhase).Id == r.Id) { r.Perimeter -= d.LookupParameter("сп_Ширина проёма").AsDouble(); } } catch (Exception) { } } } //Задаём площади отделки помещений и указываем неизменные помещения foreach (ElementId lev in novaRooms.Select(x => x.Level).Distinct()) { foreach (RoomFinishing r in novaRooms.Where(x => x.Level == lev)) { //Стены for (int i = 0; i < novaRooms.Select(x => x.Level).Distinct().Count(); i++) { for (int w = 0; w < wallNumByLevel[i].Count(); w++) { if (wallByLevel[i][w].LevelId != lev) { continue; } Wall checkWall = (Wall)wallByLevel[i][w]; if (r.Num == wallNumByLevel[i][w]) { if (checkWall.WallType.LookupParameter("rykomoika").AsInteger() == 1) { r.LocalWallVal += wallAreaByLevel[i][w]; r.LocalWallText = checkWall.WallType.LookupParameter("СоставОтделкиСтен").AsString(); WallsLocal.Add(checkWall.WallType.LookupParameter("СоставОтделкиСтен").AsString()); continue; } r.MainWallVal += wallAreaByLevel[i][w]; WallsLocal.Add(""); } } } } } for (int lev = 0; lev < Levels.Distinct().Count(); lev++) { for (int r = 0; r < roomNumByLevel[lev].Count(); r++) { //Плинтус for (int i = 0; i < doors.Count(); i++) { try { if (doors[i].get_FromRoom(lastPhase).Id == roomByLevel[lev][r].Id | doors[i].get_ToRoom(lastPhase).Id == roomByLevel[lev][r].Id) { plintByLevel[lev][r] += doors[i].LookupParameter("Ширина").AsDouble(); } } catch (Exception) { } } //Стены for (int w = 0; w < wallNumByLevel[lev].Count(); w++) { Wall checkWall = (Wall)wallByLevel[lev][w]; if (roomNumByLevel[lev][r] == wallNumByLevel[lev][w]) { if (checkWall.WallType.LookupParameter("rykomoika").AsInteger() == 1) { WallS2[lev][r] += wallAreaByLevel[lev][w]; WallsLocalText[lev][r] = checkWall.WallType.LookupParameter("СоставОтделкиСтен").AsString(); WallsLocal.Add(checkWall.WallType.LookupParameter("СоставОтделкиСтен").AsString()); continue; } WallS1[lev][r] += wallAreaByLevel[lev][w]; WallsLocal.Add(""); } } } } WallsLocal = WallsLocal.OrderBy(x => x).ToList(); //Сортируем помещения по типу отделки потолка и стен int finishTypes = 0; List <List <RoomFinishing> > novaFinishTable = new List <List <RoomFinishing> >(); if (WallsLocal.Count == 0) { foreach (string c in novaRooms.Select(x => x.CeilType).Distinct()) { foreach (string w in novaRooms.Select(x => x.WallType).Distinct()) { List <RoomFinishing> cw = novaRooms .Where(x => x.CeilType == c) .Where(y => y.WallType == w) .ToList(); novaFinishTable.Add(cw); foreach (RoomFinishing r in cw) { r.SimilarWallVal = cw.Sum(x => x.MainWallVal); } } } } else { foreach (string wt3 in WallsLocal.Distinct()) { foreach (string c in novaRooms.Select(x => x.CeilType).Distinct()) { foreach (string w in novaRooms.Select(x => x.WallType).Distinct()) { List <RoomFinishing> cw = novaRooms .Where(x => x.CeilType == c) .Where(y => y.WallType == w) .ToList(); novaFinishTable.Add(cw); foreach (RoomFinishing r in cw) { r.SimilarWallVal = cw.Sum(x => x.MainWallVal); } } } } } if (WallsLocal.Count == 0) { foreach (String i in CeilText.Distinct()) { foreach (String j in MainText.Distinct()) { FinishTable.Add(new List <List <Element> >()); FinishTableNum.Add(new List <List <string> >()); FinishTableW3S.Add(new List <List <double> >()); for (int lev = 0; lev < Levels.Distinct().Count(); lev++) { List <Element> SimilarFinish = new List <Element>(); List <String> SimilarFinishNum = new List <String>(); List <double> SimW3S = new List <double>(); for (int r = 0; r < roomByLevel[lev].Count(); r++) { if (CeilTextByLevel[lev][r] == i & MainTextByLevel[lev][r] == j) { SimilarFinish.Add(roomByLevel[lev][r]); SimilarFinishNum.Add(roomNumByLevel[lev][r]); SimW3S.Add(WallS2[lev][r]); } } FinishTable[finishTypes].Add(SimilarFinish); FinishTableNum[finishTypes].Add(SimilarFinishNum); FinishTableW3S[finishTypes].Add(SimW3S); } finishTypes++; } } } else { foreach (string wt3 in WallsLocal.Distinct()) { foreach (String i in CeilText.Distinct()) { foreach (String j in MainText.Distinct()) { FinishTable.Add(new List <List <Element> >()); FinishTableNum.Add(new List <List <string> >()); FinishTableW3S.Add(new List <List <double> >()); for (int lev = 0; lev < Levels.Distinct().Count(); lev++) { List <Element> SimilarFinish = new List <Element>(); List <String> SimilarFinishNum = new List <String>(); List <double> SimW3S = new List <double>(); for (int r = 0; r < roomByLevel[lev].Count(); r++) { if (CeilTextByLevel[lev][r] == i & MainTextByLevel[lev][r] == j & WallsLocalText[lev][r] == wt3) { SimilarFinish.Add(roomByLevel[lev][r]); SimilarFinishNum.Add(roomNumByLevel[lev][r]); SimW3S.Add(WallS2[lev][r]); } } FinishTable[finishTypes].Add(SimilarFinish); FinishTableNum[finishTypes].Add(SimilarFinishNum); FinishTableW3S[finishTypes].Add(SimW3S); } finishTypes++; } } } } List <List <RoomFinishing> > novaFloorTable = new List <List <RoomFinishing> >(); foreach (string i in novaRooms.Select(x => x.FloorType).Distinct()) { foreach (string pl in novaRooms.Select(x => x.PlintusType).Distinct()) { List <RoomFinishing> flpl = novaRooms .Where(x => x.FloorType == i) .Where(y => y.PlintusType == pl) .ToList(); novaFloorTable.Add(flpl); foreach (RoomFinishing r in flpl) { r.SimilarPlintusVal = flpl.Sum(x => x.Perimeter); } } } //Сортируем помещения по типу пола int floorTypes = 0; foreach (string i in FloorText.Distinct()) { floorTable.Add(new List <List <Element> >()); floorTableNum.Add(new List <List <string> >()); plintTable.Add(new List <List <double> >()); for (int lev = 0; lev < Levels.Distinct().Count(); lev++) { List <Element> simFloor = new List <Element>(); List <string> simFloorNum = new List <string>(); List <double> simPlint = new List <double>(); for (int r = 0; r < roomByLevel[lev].Count(); r++) { if (FloorTextByLevel[lev][r] == i) { simFloor.Add(roomByLevel[lev][r]); simFloorNum.Add(roomNumByLevel[lev][r]); simPlint.Add(perimByLevel[lev][r] - plintByLevel[lev][r]); } } floorTable[floorTypes].Add(simFloor); floorTableNum[floorTypes].Add(simFloorNum); plintTable[floorTypes].Add(simPlint); } floorTypes++; } using (Transaction tr = new Transaction(doc, "otdelka")) { tr.Start(); GlobalParameter ohohoh = GlobalParametersManager.FindByName(doc, "НесколькоЭтажей") != ElementId.InvalidElementId ? doc.GetElement(GlobalParametersManager.FindByName(doc, "НесколькоЭтажей")) as GlobalParameter : GlobalParameter.Create(doc, "НесколькоЭтажей", ParameterType.YesNo); int MoreThenOneLevel = ((IntegerParameterValue)ohohoh.GetValue()).Value; //Передаем номера помещений с одинаковым типом отделки стен и потолка for (int lev = 0; lev < roomByLevel.Count(); lev++) { for (int r = 0; r < roomByLevel[lev].Count(); r++) { roomByLevel[lev][r].LookupParameter("SanT").Set(WallsLocalText[lev][r]); roomByLevel[lev][r].LookupParameter("ДлинаПроемов").Set(plintByLevel[lev][r]); } } for (int i = 0; i < FinishTable.Count(); i++) { String fillText = ""; //String fillText2 = ""; double sumW3S = 0; for (int lev = 0; lev < FinishTable[i].Count(); lev++) { sumW3S += FinishTableW3S[i][lev].Sum() * (FT * FT); if (FinishTable[i][lev].Count() == 0) { continue; } else { if (MoreThenOneLevel == 1) { fillText += (lev + 1).ToString() + " этаж:\n"; } fillText += Meta.shortLists(FinishTableNum[i][lev]); fillText += "\n"; } } for (int lev = 0; lev < FinishTable[i].Count(); lev++) { for (int r = 0; r < FinishTable[i][lev].Count(); r++) { try { FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Стены").Set(doc.GetElement(FinishTable[i][lev][r].LookupParameter("ОТД_Стены").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); //FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Потолок").Set(doc.GetElement(FinishTable[i][lev][r].LookupParameter("ОТД_Потолок").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); } catch (Exception) { FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Стены").Set("НЕТ ОТДЕЛКИ"); //FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Потолок").Set("НЕТ ОТДЕЛКИ"); } try { //FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Стены").Set(doc.GetElement(FinishTable[i][lev][r].LookupParameter("ОТД_Стены").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Потолок").Set(doc.GetElement(FinishTable[i][lev][r].LookupParameter("ОТД_Потолок").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); } catch (Exception) { //FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Стены").Set("НЕТ ОТДЕЛКИ"); FinishTable[i][lev][r].LookupParameter("ОТД_Состав.Потолок").Set("НЕТ ОТДЕЛКИ"); } FinishTable[i][lev][r].LookupParameter("testW").Set(fillText); //FinishTable[i][lev][r].LookupParameter("unitTest").Set(fillText2); FinishTable[i][lev][r].LookupParameter("SanS").Set(sumW3S > 0 ? sumW3S.ToString("F1") : ""); FinishTable[i][lev][r].LookupParameter("snS").Set(FinishTableW3S[i][lev][r]); } } } for (int lev = 0; lev < Levels.Distinct().Count(); lev++) { for (int r = 0; r < roomByLevel[lev].Count(); r++) { roomByLevel[lev][r].LookupParameter("WallS1n").Set(WallS1[lev][r]); } } int withNames = questions.withnames; //Если нужны имена помещений //Передаем номера помещений с одинаковым типом стен потолка foreach (List <RoomFinishing> item in novaFinishTable) { if (item == null) { continue; } String fillText = ""; foreach (ElementId lev in item.Select(x => x.Level).Distinct()) { if (MoreThenOneLevel == 1) { fillText += doc.GetElement(lev).LookupParameter("Название уровня").AsString() + ":\n"; } if (withNames == 1) { foreach (RoomFinishing gg in item.Where(x => x.Level == lev)) { fillText += gg.Name + "-" + gg.Num + ", "; } fillText = fillText.Remove(fillText.Length - 2, 2) + "\n"; continue; } fillText += Meta.shortLists(item.Where(x => x.Level == lev).Select(y => y.Num).ToList()) + "\n"; } foreach (ElementId lev in item.Select(x => x.Level).Distinct()) { foreach (RoomFinishing r in item.Where(x => x.Level == lev)) { try { r.refElement.LookupParameter("ОТД_Состав.Потолок").Set(doc.GetElement(r.refElement.LookupParameter("ОТД_Потолок").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); } catch (Exception) { r.refElement.LookupParameter("ОТД_Состав.Потолок").Set("НЕТ ОТДЕЛКИ"); } try { r.refElement.LookupParameter("ОТД_Состав.Стены").Set(doc.GetElement(r.refElement.LookupParameter("ОТД_Стены").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); } catch (Exception) { r.refElement.LookupParameter("ОТД_Состав.Стены").Set("НЕТ ОТДЕЛКИ"); } r.refElement.LookupParameter("testW").Set(fillText); //r.refElement.LookupParameter("ОТД_Кол.Стены").Set(0); r.refElement.LookupParameter("ОТД_Кол.Стены").Set(r.SimilarWallVal); //r.refElement.LookupParameter("PlintusTotal").Set(r.Perimeter); //item.Select(x => x.refElement.LookupParameter("testF").Set(fillText)); //item.Select(x => x.refElement.LookupParameter("PlintusTotal").Set(x.SimilarPlintusVal)); } } } //Передаем номера помещений с одинаковым типом отделки пола foreach (List <RoomFinishing> item in novaFloorTable) { if (item == null) { continue; } String fillText = ""; foreach (ElementId lev in item.Select(x => x.Level).Distinct()) { if (MoreThenOneLevel == 1) { fillText += doc.GetElement(lev).LookupParameter("Название уровня").AsString() + ":\n"; } if (withNames == 1) { foreach (RoomFinishing gg in item.Where(x => x.Level == lev)) { fillText += gg.Name + "-" + gg.Num + ", "; } fillText = fillText.Remove(fillText.Length - 2, 2) + "\n"; continue; } fillText += Meta.shortLists(item.Where(x => x.Level == lev).Select(y => y.Num).ToList()) + "\n"; } foreach (ElementId lev in item.Select(x => x.Level).Distinct()) { foreach (RoomFinishing r in item.Where(x => x.Level == lev)) { r.refElement.LookupParameter("ОТД_Состав.Пол").Set(""); try { r.refElement.LookupParameter("ОТД_Состав.Пол").Set(doc.GetElement(r.refElement.LookupParameter("ОТД_Пол").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); } catch (Exception) { r.refElement.LookupParameter("ОТД_Состав.Пол").Set("НЕТ ОТДЕЛКИ"); } try { r.refElement.LookupParameter("ОТД_Состав.Плинтус").Set(doc.GetElement(r.refElement.LookupParameter("ОТД_Плинтус").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); } catch (Exception) { r.refElement.LookupParameter("ОТД_Состав.Плинтус").Set("НЕТ ОТДЕЛКИ"); } r.refElement.LookupParameter("testF").Set(fillText); r.refElement.LookupParameter("ОТД_Кол.Плинтус").Set(""); if (r.PlintusType != "__Отделка : ---") { r.refElement.LookupParameter("ОТД_Кол.Плинтус").Set((r.SimilarPlintusVal * FT).ToString("F1")); } r.refElement.LookupParameter("PlintusTotal").Set(r.Perimeter); //item.Select(x => x.refElement.LookupParameter("testF").Set(fillText)); //item.Select(x => x.refElement.LookupParameter("PlintusTotal").Set(x.SimilarPlintusVal)); } } } // for (int i = 0; i < floorTable.Count(); i++) // { // double sumPlint = 0; // String fillText = ""; // for (int lev = 0; lev < floorTable[i].Count(); lev++) // { // sumPlint += plintTable[i][lev].Sum() * FT; // if (floorTable[i][lev].Count() == 0) // { // continue; // } // else // { // if (MoreThenOneLevel==1) // { // fillText += (lev + 1).ToString() + " этаж:\n"; // } // fillText += Meta.shortLists(floorTableNum[i][lev]); // fillText += "\n"; // } // } // for (int lev = 0; lev < floorTable[i].Count(); lev++) // { //for (int r = 0; r < floorTable[i][lev].Count(); r++) //{ // try // { // floorTable[i][lev][r].LookupParameter("ОТД_Состав.Пол").Set(doc.GetElement(floorTable[i][lev][r].LookupParameter("ОТД_Пол").AsElementId()).LookupParameter("АР_Состав отделки").AsString()); // } // catch (Exception) // { // floorTable[i][lev][r].LookupParameter("ОТД_Состав.Пол").Set("НЕТ ОТДЕЛКИ"); // } // floorTable[i][lev][r].LookupParameter("testF").Set(fillText); // floorTable[i][lev][r].LookupParameter("PlintusTotal").Set(sumPlint); // if (floorTable[i][lev][r].LookupParameter("плинтус").AsInteger() == 1) // { // floorTable[i][lev][r].setP("PlintusTotalT", (sumPlint * FT).ToString("F1")); // } // } // } // } tr.Commit(); } //String output = String.Join(", ", roomNumByLevel[0]); TaskDialog msg = new TaskDialog("Info"); msg.MainInstruction = "Ok"; //output;// FinishTable.Count().ToString(); msg.Show(); return(Result.Succeeded); }
internal string EditParameter(Document doc, string name, string value) { try { IList <ElementId> globalparamids = GlobalParametersManager.GetGlobalParametersOrdered(doc); foreach (ElementId gid in globalparamids) { GlobalParameter parameter = doc.GetElement(gid) as GlobalParameter; if (!GlobalParametersManager.IsValidGlobalParameter(doc, parameter.Id)) { continue; } if (parameter.IsDrivenByFormula) { continue; } if (parameter.Name == name) { if (parameter.GetValue().GetType() == typeof(StringParameterValue)) { StringParameterValue dvalue = parameter.GetValue() as StringParameterValue; dvalue.Value = value; parameter.SetValue(dvalue); } else if (parameter.GetValue().GetType() == typeof(IntegerParameterValue)) { if (value == "Yes") { value = "1"; } else { value = "0"; } IntegerParameterValue dvalue = parameter.GetValue() as IntegerParameterValue; dvalue.Value = int.Parse(value); parameter.SetValue(dvalue); } else if (parameter.GetValue().GetType() == typeof(DoubleParameterValue)) { DoubleParameterValue dvalue = parameter.GetValue() as DoubleParameterValue; UnitType utype = parameter.GetDefinition().UnitType; DisplayUnitType dunit = Units.GetFormatOptions(utype).DisplayUnits; double dp = double.Parse(value); dvalue.Value = UnitUtils.ConvertToInternalUnits(dp, dunit); parameter.SetValue(dvalue); } else if (parameter.GetValue().GetType() == typeof(ElementIdParameterValue)) { ElementIdParameterValue dvalue = parameter.GetValue() as ElementIdParameterValue; ElementId mat = FindMaterialByName(doc, value); if (mat != null) { dvalue.Value = mat; parameter.SetValue(dvalue); } } } } return(value); } catch (Exception e) { return(e.Message); } }
Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; PhaseArray xcom = doc.Phases; Phase lastPhase = xcom.get_Item(xcom.Size - 1); ElementId idPhase = lastPhase.Id; FilterNumericRuleEvaluator evaluator = new FilterNumericEquals(); GlobalParameter GlobePar2 = GlobalParametersManager.FindByName(doc, "FinData") != ElementId.InvalidElementId ? doc.GetElement(GlobalParametersManager.FindByName(doc, "FinData")) as GlobalParameter :null; FinishForm MainForm = new FinishForm(doc); MainForm.ShowDialog(); using (Transaction tr = new Transaction(doc, "setGP")) { tr.Start(); GlobalParameter GlobePar = GlobalParametersManager.FindByName(doc, "FinData") != ElementId.InvalidElementId ? doc.GetElement(GlobalParametersManager.FindByName(doc, "FinData")) as GlobalParameter : GlobalParameter.Create(doc, "FinData", ParameterType.Text); GlobePar.SetValue(new StringParameterValue(string.Join("|", MainForm.wTypeBoxes))); //int MoreThenOneLevel = ((IntegerParameterValue)GlobePar.GetValue()).Value; tr.Commit(); } lastPhase = MainForm.retPhase; idPhase = lastPhase.Id; List <SharedParameterElement> shParamElements = new FilteredElementCollector(doc) .OfClass(typeof(SharedParameterElement)) .Cast <SharedParameterElement>() .ToList(); //Фильтр: Помещения на последней стадии FilterableValueProvider providerRoom = new ParameterValueProvider(new ElementId((int)BuiltInParameter.ROOM_PHASE_ID)); FilterElementIdRule rRule = new FilterElementIdRule(providerRoom, evaluator, idPhase); ElementParameterFilter room_filter = new ElementParameterFilter(rRule); //FilterableValueProvider provRoomSchool = new ParameterValueProvider(shParam.Id); FilterStringRuleEvaluator StrEvaluator = new FilterStringEquals(); IList <Element> rooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms) .WhereElementIsNotElementType() .WherePasses(room_filter) //.WherePasses(roomSc_filter) .ToElements(); //Фильтр: Стены созданные на последней стадии FilterableValueProvider provider = new ParameterValueProvider(new ElementId((int)BuiltInParameter.PHASE_CREATED)); FilterElementIdRule fRule = new FilterElementIdRule(provider, evaluator, idPhase); ElementParameterFilter door_filter = new ElementParameterFilter(fRule); IList <Element> allWalls = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls) .WhereElementIsNotElementType() .WherePasses(door_filter) .ToElements(); //Фильтр: экземпляры дверей List <FamilyInstance> doors = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors) .WhereElementIsNotElementType() .Cast <FamilyInstance>() .ToList(); foreach (Element e in rooms) { RoomFinishing.Rooms.Add(new RoomFinishing(e)); } RoomFinishing.Rooms = RoomFinishing.Rooms.OrderBy(x => x.Num).ToList(); List <GhostWall> cWalls = new List <GhostWall>(); foreach (Element wall in allWalls) { if (wall.LookupParameter("Помещение").AsString() != null & wall.LookupParameter("Помещение").AsString() != "") { cWalls.Add(new GhostWall(wall, MainForm.LocType)); } } foreach (GhostWall w in cWalls) { foreach (RoomFinishing r in RoomFinishing.Rooms) { if (r.Num == w.Room) { if (w.typeName == MainForm.LocType.Name) { r.unitLocalWallVal += w.Area; r.LocalWallText = w.sostav; } else if (w.typeName == MainForm.ColType.Name) { r.unitKolonWallVal += w.Area; r.KolonWallText = w.sostav; } else { r.unitMainWallVal += w.Area; } if (w.countNewW) { r.unitNewWallVal += w.Area; } } } } //Плинтус foreach (FamilyInstance d in doors) { foreach (RoomFinishing r in RoomFinishing.Rooms) { try { if (d.get_FromRoom(lastPhase).Id == r.Id | d.get_ToRoom(lastPhase).Id == r.Id) { r.Perimeter -= d.LookupParameter("сп_Ширина проёма").AsDouble(); } } catch (Exception) { } } } RoomFinishing.makeFinish(MainForm); RoomFinishing.makeFloor(MainForm.splitLevel); using (Transaction tr = new Transaction(doc, "otdelka")) { tr.Start(); GlobalParameter GlobePar = GlobalParametersManager.FindByName(doc, "НесколькоЭтажей") != ElementId.InvalidElementId ? doc.GetElement(GlobalParametersManager.FindByName(doc, "НесколькоЭтажей")) as GlobalParameter : GlobalParameter.Create(doc, "НесколькоЭтажей", ParameterType.YesNo); int MoreThenOneLevel = ((IntegerParameterValue)GlobePar.GetValue()).Value; int withNames = MainForm.withnames; MoreThenOneLevel = MainForm.levels; RoomFinishing.FinishTableCommit(doc, MainForm); RoomFinishing.FloorTableCommit(MoreThenOneLevel, withNames, doc); tr.Commit(); } TaskDialog msg = new TaskDialog("Info"); msg.MainInstruction = $"Выполнен расчет отделки для стадии \"{MainForm.retPhase.Name}\""; msg.Show(); return(Result.Succeeded); }
public bool RefreshSpan(PhysicalBridge bridge) { bool success = true; Document doc = bridge.CommandData.Application.ActiveUIDocument.Document; using (Transaction transaction = new Transaction(doc, "Initializing individual")) { transaction.Start(); var failureOptions = transaction.GetFailureHandlingOptions(); failureOptions.SetFailuresPreprocessor(new DuplicateMarkSwallower()); transaction.SetFailureHandlingOptions(failureOptions); string[] parameters = Enum.GetNames(typeof(Symbols)); for (int p = 0; p < parameters.Count(); p++) { GlobalParameter globalParameter = doc.GetElement(GlobalParametersManager.FindByName(doc, parameters[p])) as GlobalParameter; if (globalParameter != null) { globalParameter.SetValue(new DoubleParameterValue(Converters.FromMeters(Parameters[p]))); } } double volume = 0.0; try { volume = Converters.FromCubicMeters(bridge.Superstructure.GetMaterialVolume(bridge.Superstructure.GetMaterialIds(false).First())); } catch { success = false; }; if (success) { FilteredElementCollector collector = new FilteredElementCollector(doc); List <Element> levels = collector.OfClass(typeof(Level)).ToElements().ToList(); if (levels.Count() > 0) { double O2 = Converters.ToMeters(bridge.Superstructure.ParametersMap.get_Item("O2").AsDouble()); double O3 = Converters.ToMeters(bridge.Superstructure.ParametersMap.get_Item("O3").AsDouble()); double O4 = Converters.ToMeters(bridge.Superstructure.ParametersMap.get_Item("O4").AsDouble()); double S1 = bridge.Superstructure.ParametersMap.get_Item("S1").AsDouble(); double S2 = bridge.Superstructure.ParametersMap.get_Item("S2").AsDouble(); double S3 = bridge.Superstructure.ParametersMap.get_Item("S3").AsDouble(); double S4 = bridge.Superstructure.ParametersMap.get_Item("S4").AsDouble(); double bearingHeight = 0.169; for (int i = levels.Count() - 1; i >= 0; i--) { if ((levels[i].Name.Contains("Wierzch ławy podłożyskowej") == false) && (levels[i].Name.Contains("Wierzch trzonów") == false)) { levels.RemoveAt(i); } } if (levels.Count() > 0) { double zRef = O3 < 0 ? -1.0 * O3 * S3 / 100 : -1.0 * O3 * S2 / 100; double zLeft; if (Parameters[(int)Symbols.OL] > O2) { zLeft = zRef + (O3 - Parameters[(int)Symbols.OL]) * S2 / 100; } else { zLeft = zRef - (O2 - O3) * S2 / 100 + (O2 - Parameters[(int)Symbols.OL]) * S1 / 100; } double zRight; if (Parameters[(int)Symbols.OP] < O4) { zRight = zRef + (O3 - Parameters[(int)Symbols.OP]) * S3 / 100; } else { zRight = zRef - (O4 - O3) * S3 / 100 + (O4 - Parameters[(int)Symbols.OP]) * S4 / 100; } double nominalBearingSpace = Converters.ToMeters(((doc.GetElement(GlobalParametersManager.FindByName(doc, "Nominalna wysokość przestrzeni łożyskowania")) as GlobalParameter).GetValue() as DoubleParameterValue).Value); double roadLayersThickness = Converters.ToMeters(((doc.GetElement(GlobalParametersManager.FindByName(doc, "Nominalna grubość nawierzchni")) as GlobalParameter).GetValue() as DoubleParameterValue).Value); double z = Math.Round((Math.Min(zLeft - Parameters[(int)Symbols.HL], zRight - Parameters[(int)Symbols.HP]) - nominalBearingSpace - roadLayersThickness) / 0.05) * 0.05; foreach (Element level in levels) { (level as Level).Elevation = Converters.FromMeters(z); } GlobalParameter leftBearingAshlar = doc.GetElement(GlobalParametersManager.FindByName(doc, "Wysokość ciosu. Dźwigar lewy")) as GlobalParameter; GlobalParameter rightBearingAshlar = doc.GetElement(GlobalParametersManager.FindByName(doc, "Wysokość ciosu. Dźwigar prawy")) as GlobalParameter; leftBearingAshlar.SetValue(new DoubleParameterValue(Converters.FromMeters(zLeft - Parameters[(int)Symbols.HL] - roadLayersThickness - z - bearingHeight))); rightBearingAshlar.SetValue(new DoubleParameterValue(Converters.FromMeters(zRight - Parameters[(int)Symbols.HP] - roadLayersThickness - z - bearingHeight))); } } } transaction.Commit(); } return(success); }
public Cube(Element e) { refElement = new ElementExt(e); out_Snos = e.get_Parameter(BuiltInParameter.PHASE_DEMOLISHED).AsValueString(); typeName = e.Name; //GOST switch (e.Category.Name) { case "Пластины": out_Gost = "ГОСТ 19903-2015"; break; case "Анкеры": string standardName = e.get_Parameter(BuiltInParameter.STEEL_ELEM_ANCHOR_STANDARD).AsString(); ElementId gPar = GlobalParametersManager.FindByName(e.Document, standardName); out_Gost = gPar == ElementId.InvalidElementId ? "" : ((StringParameterValue) ((GlobalParameter)e.Document.GetElement(gPar)) .GetValue()).Value.Split(':')[1]; break; default: out_Gost = e.Document.GetElement(e.GetTypeId()).getP(GOST); break; } //GROUP switch (e.Category.Name) { case "Несущая арматура": //ebar r = e as Rebar; Element osn = (e as Rebar) != null?e.Document.GetElement((e as Rebar).GetHostId()) : e.Document.GetElement((e as RebarInSystem).GetHostId()); out_Group = osn.getP(GROUP); break; default: out_Group = e.getP(GROUP); break; } switch (e.Category.Name) { case "Арматурная сетка несущей конструкции": mType = myTypes.totalArea; Area = e.LookupParameter("Общая длина выреза").AsDouble() * e.LookupParameter("Общая ширина выреза").AsDouble(); ElementId provolokType = e.Document.GetElement(e.GetTypeId()).LookupParameter("Тип проволоки основного направления").AsElementId(); string innerName = e.Document.GetElement(provolokType).Name; string step1 = (e.Document.GetElement(e.GetTypeId()).LookupParameter("Шаг стержней основного направления").AsDouble() * 1000 * FT).ToString("F0"); string step2 = (e.Document.GetElement(e.GetTypeId()).LookupParameter("Шаг стержней вспомогательного направления").AsDouble() * 1000 * FT).ToString("F0"); out_Name = "Сетка " + innerName + "-" + step1 + "/" + innerName + "-" + step2; Massa = e.Document.GetElement(e.GetTypeId()).LookupParameter("Масса сетки на единицу площади").AsDouble() / (FT * FT); break; case "Пластины": mType = myTypes.plastini; double plLength = e.get_Parameter(BuiltInParameter.STEEL_ELEM_PLATE_LENGTH).AsDouble() * 1000 * FT; double plWidth = e.get_Parameter(BuiltInParameter.STEEL_ELEM_PLATE_WIDTH).AsDouble() * 1000 * FT; double plThickness = e.get_Parameter(BuiltInParameter.STEEL_ELEM_PLATE_THICKNESS).AsDouble() * 1000 * FT; Massa = plLength * plWidth * plThickness * 7850 / 1000000000; Length = 1; out_Name = "Пластина " + plLength.ToString("F0") + "x" + plWidth.ToString("F0") + "x" + plThickness.ToString("F0"); break; case "Ограждение": mType = myTypes.commonLength; out_Name = e.Document.GetElement(e.GetTypeId()).getP(NAME); Length = e.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble() * FT; break; case "Анкеры": mType = myTypes.allNum; string standardName = e.get_Parameter(BuiltInParameter.STEEL_ELEM_ANCHOR_STANDARD).AsString(); ElementId gPar = GlobalParametersManager.FindByName(e.Document, standardName); string ankerName = gPar == ElementId.InvalidElementId?standardName: ((StringParameterValue) ((GlobalParameter)e.Document.GetElement(gPar)) .GetValue()).Value.Split(':')[0]; out_Name = ankerName + " Ø" + (e.get_Parameter(BuiltInParameter.STEEL_ELEM_ANCHOR_DIAMETER).AsString()) + "x" + (e.get_Parameter(BuiltInParameter.STEEL_ELEM_ANCHOR_LENGTH).AsString()).Split(',')[0]; Quantity = e.get_Parameter(BuiltInParameter.STEEL_ELEM_PATTERN_NUMBER_X).AsInteger() * e.get_Parameter(BuiltInParameter.STEEL_ELEM_PATTERN_NUMBER_Y).AsInteger(); break; case "Несущая арматура": string[] stringSeparator = new string[] { " : " }; string[] subName = e.Name.Split(stringSeparator, StringSplitOptions.None); out_Name = "ø" + subName[0]; if (e.LookupParameter("шт/м/м2/м3 экз").AsInteger() == 1) { mType = myTypes.armNum; Length = ((Rebar)e).get_Parameter(BuiltInParameter.REBAR_ELEM_LENGTH).AsDouble() * 1000 * FT; refElement.textDOWN = (Math.Round(Length / 10) * 10).ToString() + "мм"; Quantity = ((Rebar)e).Quantity; Massa = e.Document.GetElement(e.GetTypeId()).LookupParameter(MASS).AsDouble() * Length / 1000; } else { mType = myTypes.armLen; Massa = e.Document.GetElement(e.GetTypeId()).LookupParameter(MASS).AsDouble(); try { Length = ((Rebar)e).TotalLength * FT; } catch (Exception) { Length = ((RebarInSystem)e).TotalLength * FT; } } if (refElement.textDOWN != null) { refElement.textDOWN += ", "; } try { refElement.textDOWN += "шаг " + ((e as Rebar).MaxSpacing * FT * 1000).ToString("F0"); } catch (Exception) { } break; case "Желоба": mType = myTypes.commonLength; Length = e.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble() * FT; out_Name = e.Document.GetElement(e.GetTypeId()).getP(NAME); break; case "Крыши": mType = myTypes.matArea; Area = e.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED).AsDouble() * FT * FT; out_Name = e.Document.GetElement(e.GetTypeId()).getP(NAME); break; default: out_Name = e.Document.GetElement(e.GetTypeId()).getP(NAME); textUP = out_Name; if (e.Document.GetElement(e.GetTypeId()).getP(STEEL_MARK) != null) { out_Name += " " + e.Document.GetElement(e.GetTypeId()).getP(STEEL_MARK); } Length = 0; switch (e.Category.Name) { case "Каркас несущий": mType = e.Document.GetElement(e.GetTypeId()).LookupParameter(MASS).AsDouble() != 0?myTypes.armLen:myTypes.commonLength; Length = e.get_Parameter(BuiltInParameter.STRUCTURAL_FRAME_CUT_LENGTH).AsDouble() * FT; Units = myUnits.mas; try { refElement.textDOWN += "шаг " + (((e as FamilyInstance).Host as BeamSystem).LookupParameter("Интервал между осевыми линиями").AsDouble() * FT * 1000).ToString("F0"); } catch (Exception) { } break; case "Несущие колонны": mType = myTypes.armLen; Length = e.get_Parameter(BuiltInParameter.INSTANCE_LENGTH_PARAM).AsDouble() * FT; break; case "Фундамент несущей конструкции": mType = myTypes.allNum; //Length = e.get_Parameter(BuiltInParameter.INSTANCE_LENGTH_PARAM).AsDouble() * FT; break; default: mType = e.Document.GetElement(e.GetTypeId()).LookupParameter("ЕслиЛинейный").AsInteger() == 1? myTypes.commonLength:myTypes.allNum; if (e.LookupParameter("АММО_Длина_КМ") != null) { Length = e.LookupParameter("АММО_Длина_КМ").AsDouble() * FT; } break; } Massa = e.Document.GetElement(e.GetTypeId()).LookupParameter(MASS).AsDouble(); break; } }