前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Revit二次开发之创建宿主元素(门窗等)(第十四期)

Revit二次开发之创建宿主元素(门窗等)(第十四期)

作者头像
一席青衣卧龙城
发布2022-04-21 12:19:50
6490
发布2022-04-21 12:19:50
举报
文章被收录于专栏:Revit二次开发Revit二次开发

好啦好啦,回归主题:今天我们学一个创建宿主元素:

Document.NewFamilyInstance Method (XYZ, FamilySymbol, Element, Level, StructuralType)

什么是宿主元素?这个问题问得好,所谓的宿主就像是寄生在你大肠里天天吃你翔的细菌,每天津津有味的啃食着你的翔。

没毛病,就长这样。

你死了,它们也就死了,同理可得:窗户和门就是宿主,而墙就是他们赖以生存的母体哦。

仔细想想有点味道,晚饭回荡在口中了。


太恶心了,我们换成做饭的例子吧:每一个程序就是一道佳肴,那现在我们来准备做这道佳肴的原材料吧!

  1. XYZ:我们要把它安在哪里? 那就放在原点吧!new XYZ(0, 0, 0)
  2. FamilySymbol:我们要创建的族类型 这里我们创建一个门M1221
代码语言:javascript
复制

FilteredElementCollector faaa = new FilteredElementCollector(doc);
            faaa.OfClass(typeof(FamilySymbol));//获取所有类型
ElementId id = null;//记录类型ID


 foreach (FamilySymbol faa in faaa)//找到M1221这扇门类型
            {
                if (faa.GetParameters("类型名称")[0].AsString().Contains("M1221"))
                {
                    id = faa.Id;//记录门的ID
                }


            }
            FamilySymbol fs = doc.GetElement(id) as FamilySymbol;//从他的ID来获得门族类型

这些都和上期一模一样,主要的是思想以及看懂API哦。

Element:这里我们创建一堵墙吧:

代码语言:javascript
复制
  XYZ start = new XYZ(-10, 0, 0);//起点
            XYZ end = new XYZ(10, 10, 0);//终点
            Line wallLine = Line.CreateBound(start, end);//画一条直线
 Wall newWall = Wall.Create(doc, wallLine, wid, true);//画墙(wid是标高,看第4条)

Level:这个是训练最多的啦,就不重复啦!

代码语言:javascript
复制
  foreach (Level ll in fil)//找标高
            {
                if (ll.Name.Contains("一层"))//找到一层标高
                {
                    le = ll;//记录标高
                    wid = new ElementId(ll.Id.IntegerValue);//记录标高ID


                }
           }

StructuralType:这个上期讲过了,再讲一遍吧! 这个是结构类型,记得引用结构类型哦!using Autodesk.Revit.DB.Structure; 这里我们选StructuralType.NonStructural,因为我们不是结构。


准备好了,开始做饭吧!按照顺序全扔进锅里乱炖,毕竟小编做饭可是一绝。

代码语言:javascript
复制
   FilteredElementCollector fil = new FilteredElementCollector(doc);
            fil.OfClass(typeof(Level));//获取标高
            FilteredElementCollector faaa = new FilteredElementCollector(doc);
            faaa.OfClass(typeof(FamilySymbol));//获取所有类型
            Level le = null;//记录标高
            ElementId id = null;//记录类型ID
            ElementId wid = null;//记录标高ID
            foreach (FamilySymbol faa in faaa)//找到M1221这扇门类型
            {
                if (faa.GetParameters("类型名称")[0].AsString().Contains("M1221"))
                {
                    id = faa.Id;//记录门的ID
                }
            }
            FamilySymbol fs = doc.GetElement(id) as FamilySymbol;//从他的ID来获得门族类型
            XYZ start = new XYZ(-10, 0, 0);//起点
            XYZ end = new XYZ(10, 10, 0);//终点
            Line wallLine = Line.CreateBound(start, end);//画一条直线
            foreach (Level ll in fil)//找标高
            {
                if (ll.Name.Contains("一层"))//找到一层标高
                {
                    le = ll;//记录标高
                    wid = new ElementId(ll.Id.IntegerValue);//记录标高ID
                }
            }
            Wall newWall = Wall.Create(doc, wallLine, wid, true);//画墙
            FamilyInstance fa = doc.Create.NewFamilyInstance(new XYZ(0, 0, 0), fs, newWall, le, StructuralType.NonStructural);

好啦,看看烧出来的菜吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 精讲Revit二次开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档