private void Init(Autodesk.Revit.DB.Level level, Autodesk.Revit.DB.XYZ location, string name, string number) { // Get document and open transaction Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(document); // Get existing room element if possible var RoomElem = ElementBinder.GetElementFromTrace <Autodesk.Revit.DB.Architecture.Room>(document); if (RoomElem == null) { // Create new Room element RoomElem = document.Create.NewRoom(level, new Autodesk.Revit.DB.UV(location.X, location.Y)); } else { if (RoomElem.LevelId.Equals(level.Id)) { // Update Location only Autodesk.Revit.DB.LocationPoint point = (Autodesk.Revit.DB.LocationPoint)RoomElem.Location; point.Point = location; } else { RoomElem = document.Create.NewRoom(level, new Autodesk.Revit.DB.UV(location.X, location.Y)); } } // Apply name and number if set if (!string.IsNullOrEmpty(name)) { RoomElem.Name = name; } if (!string.IsNullOrEmpty(number)) { RoomElem.Number = number; } InternalSetElement(RoomElem); // Commit transaction TransactionManager.Instance.TransactionTaskDone(); ElementBinder.SetElementForTrace(this.InternalElement); }
internal int GetRoomIdContainingCentroid() { XYZ centroid = GetAptCentroid(); double distToClosestPnt = 100; Room outRoom = null; foreach (int id in m_iRoomId) { Room rm = m_doc.GetElement(new ElementId(id)) as Room; Autodesk.Revit.DB.LocationPoint currRoomCnt = rm.Location as Autodesk.Revit.DB.LocationPoint; if (centroid.DistanceTo(currRoomCnt.Point) < distToClosestPnt) { distToClosestPnt = centroid.DistanceTo(currRoomCnt.Point); outRoom = rm; } } return(outRoom.Id.IntegerValue); }