/// <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); } }