Revit二次开发-墙生成装饰面

批量生成墙的装饰面,自动连接,先看成果,通过这个方法还可以扩展梁、板、基础的装修面, 用来出装修的装饰装修的量,扩展就留给你们吧。
在这里插入图片描述
直接上代码

  public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  {
      UIApplication uiapp = commandData.Application;
      UIDocument uidoc = uiapp.ActiveUIDocument;
      Document doc = uidoc.Document;
      var sel = uidoc.Selection;
      try
      {
          // 批量选择墙
          var walls = sel.PickObjects(ObjectType.Element).Select(doc.GetElement).OfType<Wall>().ToList();
          var wallsolids = walls.Select(x => x.GetElementSolids().FirstOrDefault()).ToList();
          Solid unionsolid = null;
          for (int i = 0; i < wallsolids.Count; i++)
          {
              if (wallsolids.Count - 1 == i)
                  break;
              Solid solid = wallsolids[i];
              if (unionsolid == null)
                  unionsolid = solid;
              var nextsolid = wallsolids[i + 1];
              unionsolid = BooleanOperationsUtils.ExecuteBooleanOperation(unionsolid,nextsolid, BooleanOperationsType.Union);//墙体实体合并
          }
         var solidfaces = unionsolid.GetSolidFaces()
                  .OfType<PlanarFace>()
                  .ToList()
                  .FindAll(x => !(x.FaceNormal.IsAlmostEqualTo(XYZ.BasisZ, 0.001) || x.FaceNormal.IsAlmostEqualTo(-XYZ.BasisZ, 0.001)));//获取合并墙的Solid所有面,然后排除上下面
          using (Transaction trans = new Transaction(doc, "Create Wall face"))
          {
              trans.Start();
              foreach (PlanarFace Planarface in solidfaces)
              {
                  foreach (EdgeArray edgeloops in Planarface.EdgeLoops)
                  {
                      List<Curve> curves = new List<Curve>();
                      foreach (Edge item in edgeloops)
                      {
                          curves.Add(item.AsCurve());
                      }
                      //创建墙
                      var level = doc.GetElements<Level>(x => x is Level).FirstOrDefault();
                      ElementId walltypeId = new ElementId(407058);//墙类型ID
                      Wall wall = Wall.Create(doc, curves, walltypeId, level.Id, false);// 创建墙
                      ElementTransformUtils.MoveElement(doc, wall.Id, Planarface.FaceNormal.Multiply(wall.Width / 2));//偏移墙位置
                  }
              }
              trans.Commit();
          }
  }

分享一个自制Revit插件,本人是个BIM工程师,该插件是根据自己做工程一些经验和对插件功能的频繁度,自己整合开发功能,初衷是提高效率。
目前MagicTools的功能包括通用功能、土建、机电、审图、出图功能。还有好多功能都想做,如果有好的需求也可以提,后续有新增继续增加上去,努力弄个实用的插件,希望能帮到真正有需要的BIMer。
如有需要的可以加企鹅群:630552940

插件下载地址,免费试用
链接:https://pan.baidu.com/s/1GDnHeWwZ5r_HrnT3Mo7twA?pwd=jhlt
提取码:jhlt

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值