Revit二次开发 ---->创建楼板面层

1.获取房间

2.获取房间边界

3.创建楼板

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB.Plumbing;

namespace Test
{
    [Transaction(TransactionMode.Manual)]
    public class TestCommand : IExternalCommand

    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument Uidoc = commandData.Application.ActiveUIDocument;
            Document Doc = Uidoc.Document;




            List<Element> roomlist = GetList(Doc, BuiltInCategory.OST_Floors);

            List<Element> floorlist = GetList(Doc,BuiltInCategory.OST_Floors);

            if (roomlist.Count()>0)
            {

                Transaction transaction = new Transaction(Doc,"newfloor");
                transaction.Start("newfloor");
                TaskDialog.Show("TITLE",roomlist.Count().ToString());
                Doc.Create.NewFloor(Roomboundry(roomlist),false);
                transaction.Commit();

                
            }
            else
            {
                TaskDialog.Show("title","模型中没有创建房间");
            }
            



            return Result.Succeeded;

        }


        public List<Element> GetList(Document document,BuiltInCategory builtInCategory)
        {
            FilteredElementCollector floorcollector = new FilteredElementCollector(document);

            floorcollector.OfCategory(builtInCategory);

            List<Element> roomlist = floorcollector.ToList();

            return roomlist;
        }
        public CurveArray Roomboundry(List<Element> roomlist)
        { List<CurveLoop> tempcurcearrays = new List<CurveLoop>();
            foreach (Element room in roomlist)
            {   
                IList<IList<BoundarySegment>> boundarySegments = (room as Room).GetBoundarySegments(new SpatialElementBoundaryOptions());
                foreach (IList<BoundarySegment> boundaries in boundarySegments)
                {
                    CurveLoop curveloop = new CurveLoop();
                    foreach (BoundarySegment boundary in boundaries)
                    {
                        curveloop.Append(boundary.GetCurve());
                    }
                    tempcurcearrays.Add(curveloop);
                }

            }
            List<double> volumn = new List<double>();
            foreach (CurveLoop curveloop in tempcurcearrays)
            { IList<CurveLoop> curves = new List<CurveLoop>();
                curves.Add(curveloop);
                volumn.Add(GeometryCreationUtilities.CreateExtrusionGeometry(curves,XYZ.BasisZ,1).Volume);
            }


            CurveArray array = new CurveArray();
            foreach (Curve curve in tempcurcearrays.ElementAt(volumn.IndexOf(volumn.Max())))
            {
                array.Append(curve);
            }
            return array;
        }
    }
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值