import clr from math import * clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * clr.AddReference('RevitAPI') from Autodesk.Revit.DB import * import Autodesk clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument uiapp = DocumentManager.Instance.CurrentUIApplication app = uiapp.Application uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument clr.AddReference("RevitNodes") import Revit clr.ImportExtensions(Revit.Elements) from System.Collections.Generic import * links = FilteredElementCollector(doc).OfClass(Autodesk.Revit.DB.RevitLinkInstance).ToElements() linkdocs = [] for i in links: linkdocs.append(i.GetLinkDocument()) linkrooms = [] for linkdoc in linkdocs: try: linkrooms.append(FilteredElementCollector(linkdoc).OfCategory(BuiltInCategory.OST_Rooms).WhereElementIsNotElementType().ToElements()) except: 0 levels = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements() old_spaces = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_MEPSpaces).WhereElementIsNotElementType().ToElements() rooms=[] for g_rooms in linkrooms: for room in g_rooms: if room.Area>0: TransactionManager.Instance.EnsureInTransaction(doc) list=[] message=[] for room in rooms: pt = room.Location.Point i=0 for space in old_spaces: y = space.IsPointInSpace(XYZ(pt.X,pt.Y,pt.Z+1)) if y: i=1 message.append(y) if i==0: uv = UV(pt.X,pt.Y) elev = round(room.Level.Elevation) level2 = None for level in levels: elev2 = round(level.Elevation) if elev==elev2: level2=level if level2 is not None: name = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString() number = room.get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString() height = room.get_Parameter(BuiltInParameter.ROOM_UPPER_OFFSET).AsDouble() space = doc.Create.NewSpace(level2,uv) space.get_Parameter(BuiltInParameter.ROOM_NAME).Set(name) space.get_Parameter(BuiltInParameter.ROOM_NUMBER).Set(number) space.get_Parameter(BuiltInParameter.ROOM_UPPER_OFFSET).Set(height) list.append(space) TransactionManager.Instance.TransactionTaskDone() OUT = list