Revit二开--楼层三维功能 全面解析

本文详述了如何在Revit中通过二次开发实现楼层三维视图的创建过程,包括选择楼层、调整视图范围及元素筛选等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Revit二开--楼层三维功能 全面解析


本篇博客详细解析了revit里面楼层三维的实现过程,初学revit二开的朋友可以参考。
github地址: https://github.com/binbinstrong/tangsengjiewa

    [Transaction(TransactionMode.Manual)]
    [Regeneration(RegenerationOption.Manual)]
    [Journaling(JournalingMode.UsingCommandData)]
    class Cmd_Floor3D : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument uidoc = uiapp.ActiveUIDocument;
            Document doc = uidoc.Document;
            Selection sel = uidoc.Selection;
            var acview = doc.ActiveView;

            var viewfamilytypes = doc.TCollector<ViewFamilyType>();
            var viewplanfamilytype = viewfamilytypes.Where(m => m.ViewFamily == ViewFamily.FloorPlan).First();
            var view3Dfamilytype = viewfamilytypes.Where(m => m.ViewFamily == ViewFamily.ThreeDimensional).First();

            var levels = doc.TCollector<Level>();

            FloorSelector fsui = FloorSelector.Instance;
            fsui.FloorBox.ItemsSource = levels;
            fsui.FloorBox.DisplayMemberPath = "Name";
            fsui.FloorBox.SelectedIndex = 0;
            fsui.ShowDialog();

            var targetfloor = fsui.FloorBox.SelectionBoxItem as Level;
            var upperfloor = levels.Where(m => m.Elevation > targetfloor.Elevation)?.OrderBy(m => m.Elevation)?.FirstOrDefault();
             
            var categories = doc.Settings.Categories;
            var modelcategories = categories.Cast<Category>().Where(m => m.CategoryType == CategoryType.Model).ToList();

            var filterslist = new List<ElementFilter>();
            foreach (var modelcategory in modelcategories)
            {
                var categoryfilter = new ElementCategoryFilter(modelcategory.Id);
                filterslist.Add(categoryfilter);
            }
            var logicOrFilter = new LogicalOrFilter(filterslist);
            var collector = new FilteredElementCollector(doc);
            var modelelements = collector.WherePasses(logicOrFilter).WhereElementIsNotElementType().Where(m => m.Category.CategoryType == CategoryType.Model);

            var modelelementsids = modelelements.Select(m => m.Id).ToList();

            var temboundingbox = default(BoundingBoxXYZ);

            Transaction temtran = new Transaction(doc, "temtransaction");
            temtran.Start();
            var temgroup = doc.Create.NewGroup(modelelementsids);
            var temview = ViewPlan.Create(doc, viewplanfamilytype.Id, targetfloor.Id);
            temboundingbox = temgroup.get_BoundingBox(temview);
            temtran.RollBack();

            var zMin = targetfloor.Elevation;
            var zMax = upperfloor?.Elevation ?? temboundingbox.Max.Z;

            var oldmin = temboundingbox.Min;
            var oldmax = temboundingbox.Max;

            BoundingBoxXYZ newbox = new BoundingBoxXYZ();
            newbox.Min = new XYZ(oldmin.X, oldmin.Y, zMin);
            newbox.Max = new XYZ(oldmax.X, oldmax.Y, zMax);
            var new3dview = default(View3D);
            doc.Invoke(m =>
            {
                new3dview = View3D.CreateIsometric(doc, view3Dfamilytype.Id);
                new3dview.SetSectionBox(newbox);
            },"楼层三维");

            uidoc.ActiveView = new3dview;

            return Result.Succeeded;
        }
    }

更多revit二开知识 请关注 唐僧课堂
唐僧课堂BIM开发


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值