-
Notifications
You must be signed in to change notification settings - Fork 0
/
RoomRenumerate.cs
60 lines (49 loc) · 2.2 KB
/
RoomRenumerate.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB.Architecture;
namespace WorkApp
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
internal class RoomRenumerate : IExternalCommand
{
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;
PhaseArray xcom = doc.Phases;
Phase lastPhase = xcom.get_Item(xcom.Size - 1);
ElementId idPhase = lastPhase.Id;
List<Room> allRooms = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms)
.WhereElementIsNotElementType()
.Cast<Room>().ToList();
using (Transaction tr = new Transaction(doc,"RoomRenum"))
{
tr.Start();
allRooms = allRooms.Where(r => r.get_BoundingBox(null) != null).ToList();
allRooms = allRooms.OrderBy(x =>x.get_BoundingBox(null).Max.Y).ToList();
allRooms = allRooms.OrderBy(x => x.get_BoundingBox(null).Max.X).ToList();
//allRooms = allRooms.OrderBy(x => x.get_BoundingBox(null).Min.Y).ToList();
//allRooms = allRooms.OrderBy(x => x.get_BoundingBox(null).Min.Z).ToList();
foreach (string lev in allRooms.Select(x=>x.LookupParameter("Уровень(текст)").AsString()).Distinct())
{
int index = 1;
foreach (Room r in allRooms.Where(x=>x.LookupParameter("Уровень(текст)").AsString()==lev))
{
r.Number = (int.Parse(lev) * 100 + index).ToString();
index++;
}
}
tr.Commit();
}
return Result.Succeeded;
}
}
}