示例#1
0
        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);
        }
示例#2
0
        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);
        }