Пример #1
0
        /// <summary>
        /// 生成给定元素的几何实体的常规模型,支持链接文件中的元素id
        /// </summary>
        /// <param name="document"></param>
        /// <param name="integerIds">元素id</param>
        /// <param name="needHighLight">是否需要高亮</param>
        public static List <ElementId> CreateDirectShapes(Document document, List <int> integerIds, bool needHighLight = true)
        {
            var docs = LinkedElementUtils.GetAllLinkedDocument(document);

            docs.Add(document);

            var ids = integerIds.Select(e => new ElementId(e)).ToList();

            var solids = new List <Solid>();

            foreach (var id in ids)
            {
                Element ele = null;
                foreach (var doc in docs)
                {
                    ele = doc.GetElement(id);
                    if (ele != null)
                    {
                        break;
                    }
                }

                if (ele == null)
                {
                    continue;
                }
                if (ele is Room)
                {
                    solids.Add(RoomUtils.GetRoomActualSolid(ele as Room, document));
                }
                else
                {
                    solids.Add(GeometryUtils.GetSolid(ele));
                }
            }

            ids.Clear();
            using (Transaction tr = new Transaction(document, "DirectShapes"))
            {
                tr.Start();
                foreach (var item in solids)
                {
                    var directShapeId = CreateDirectShape(document, item);
                    ids.Add(directShapeId);
                }
                tr.Commit();
            }

            if (needHighLight)
            {
                ViewUtils.HighLightElements(new UIDocument(document), ids);
            }
            return(ids);
        }
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var uidoc = commandData.Application.ActiveUIDocument;

            try
            {
                // TODO: 测试代码这里实现
                var  roomref = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.LinkedElement, new LinkedElementSelectionFilter <Room>(), "请选择一个链接文件中的房间");
                Room room    = LinkedElementUtils.GetLinkedDocumnet(uidoc.Document, roomref).GetElement(roomref.LinkedElementId) as Room;

                var rst = RoomUtils.TryGetRoomHeight(room, out double roomHeight, uidoc.Document);

                string msg = string.Empty;
                switch (rst)
                {
                case -1:
                    msg = "参数法";
                    break;

                case 0:
                    msg = "标高法";
                    break;

                case 1:
                    msg = "射线法";
                    break;

                default:
                    break;
                }
                msg += $"获取的房间高度为{roomHeight.FeetToMM()}";

                TaskDialog.Show("房间高度测试", msg);

                return(Result.Succeeded);
            }
            catch (Exception ex)
            {
                TaskDialog.Show("提示", ex.ToString());
                return(Result.Cancelled);
            }
        }