写在前面,要做到如图的样子。因为对Revit软件的使用根本不熟,所以遇到了很多问题,在这里先罗列一下,万一有跟我相同疑问的同学也可以互相交流一下。

首先目的是在轴线的交点处创建柱子

第一步:在Revit里面画上测试代码的图(几条相交的轴线)

由于没画过图,很懵逼,所以百度了怎么画轴线。我参考的是这个网址https://jingyan.baidu.com/article/3052f5a1e65e5597f31f86eb.html 。大致内容就是先创建一个建筑项目,然后在左边的立面选择东南西北任一一个双击打开,创建标高(标高是代表一个平面,比如你家要是有两层小楼,那么就应该画两个标高,一楼地面一个,二楼地面一个),给两个标高重命名为1F和2F,随便选择一个吧,比如2F,双击打开,此时你看到的就是二楼平面的俯视图了。也就是上面截图的样子。轴网就是在二楼平面上的各种线条。我创建的时候一条轴线的中间没有。。。后来问了同事才知道那是轴线的一种类型,如果要调整成连续虚线的轴线,则选中轴线,编辑类型,选择你要的轴线类型就好。

第二步:写代码

在贴代码之前想先分析一下整个思路,因为我刚学,看视频人家直接就一步一步写下去,没有解释说明,实在费解

思路:

1.获取轴线的交点

1>.获取轴网(Grid类),然后获得每条轴线。

2>.遍历获取轴线的交点(注意排除重复的点)。

2.在交点处创建柱子

1>.开始一个任务(因为创建柱子会修改到视图了,所以要开始一个Transaction)

2>.得到一个Level(标高的id,就是创建的标高的那条线)和一个FamilySymbol(这里需要自己随便创建一个柱子,然后复制他的id)

3>.最后调用这个方法NewFamilyInstance()创建柱子

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Structure;namespace GridPractise
{[TransactionAttribute(TransactionMode.Manual)][RegenerationAttribute(RegenerationOption.Manual)]public class Class1 : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){UIDocument uidoc = commandData.Application.ActiveUIDocument;Document revitDoc = uidoc.Document;FilteredElementCollector coll = new FilteredElementCollector(revitDoc); //创建收集器ElementClassFilter gridFilter = new ElementClassFilter(typeof(Grid));//创建轴网过滤器List<Element> grid = coll.WherePasses(gridFilter).ToElements().ToList();List<Line> gridLines = new List<Line>();//创建轴线ListList<XYZ> intPos = new List<XYZ>();//创建交点Listforeach (Grid gri in grid){gridLines.Add(gri.Curve as Line); //将轴网转换为线}foreach (Line ln1 in gridLines)//找到第一根线{foreach (Line ln2 in gridLines)//找到第二根线{XYZ normal1 = ln1.Direction;//得到的是直线的方向向量XYZ normal2 = ln2.Direction;//如果两根轴线方向相同,则遍历下一组(目的是排除平行与重合的线)if (normal1.IsAlmostEqualTo(normal2)) continue; IntersectionResultArray results;SetComparisonResult intRst = ln1.Intersect(ln2, out results);//如果两根轴线相交,则输出交点if (intRst == SetComparisonResult.Overlap && results.Size == 1)//排除轴线是曲线,交点不止一个的情况{XYZ tp = results.get_Item(0).XYZPoint;//上面得到的交点//比较得到的交点和intPos数组里面的元素是否相同,不同才Add到intPos数组中,作用是排除重复的点if (intPos.Where(m => m.IsAlmostEqualTo(tp)).Count() == 0){intPos.Add(tp); //收集所有的交点}}}}//打印出交点个数TaskDialog.Show("交点个数", intPos.Count.ToString());using (Transaction trans = new Transaction(revitDoc)){trans.Start("任务开始");Level level = revitDoc.GetElement(new ElementId(694)) as Level;//你的图上的标高的idFamilyInstance f = revitDoc.GetElement(new ElementId(332661)) as FamilyInstance;//创建一个柱子,其Id为332661FamilySymbol familySymbol = f.Symbol;                                                                             //判断族类型if (!familySymbol.IsActive){familySymbol.Activate();}foreach (XYZ p in intPos){//创建柱子FamilyInstance familyInstance = revitDoc.Create.NewFamilyInstance(p, familySymbol, level, StructuralType.NonStructural);}trans.Commit();}return Result.Succeeded;}}
}

【Revit二次开发】在轴网相交处创建柱子相关推荐

  1. Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结

    目录 一.创建普通的一个panel里面三个32px*32px的pushbutton,剩下两个写法一样 二.创建三个层叠按钮 层叠按钮图标需为16px*16px 层叠按钮最多为一列放三个,这个也要创建个 ...

  2. Revit二次开发之轴网标注

    Revit二次开发之轴网标注 using System; using System.Collections.Generic; using Autodesk.Revit.DB; using Autode ...

  3. Revit二次开发_轴网快速标注

    通过Revit二次开发实现对平行轴网的快速标注.交互操作是框选轴网->点选尺寸标注出现的位置->生成两道尺寸标注. 要达到设想的结果一些地方需要特殊考虑: 框选操作容易误选轴网,起码要把与 ...

  4. Revit二次开发-根据名称获取标高

    Revit二次开发中,在创建元素或者对元素进行修改的时候,需要用到标高,此代码可以获取到当前文档中指定名称的标高, 思路是:先使用过滤器获取文档中所有的标高,再遍历元素,依据名称来匹配,从而得到你想要 ...

  5. C# Revit二次开发基础/核心编程---建筑建模-标高和轴网

    一.本节课程 C# Revit二次开发基础/核心编程---建筑建模-标高和轴网 二.本节要讲解的知识点 1.标高的高度.创建标高 2.轴网曲线.创建轴网 具体内容 1.标高 标高是有限水平平面,大多数 ...

  6. Revit二次开发——三角面创建

    Revit二次开发--三角面创建 文章目录 Revit二次开发--三角面创建 前言 一.三角面是什么? 二.三角网 三.使用步骤 1.引入库 2.开启事务 3.创建 总结 前言 三角面是创建实体的基础 ...

  7. 【Revit 二次开发 】创建带箭头的文字注释(字体设置+引线箭头设置)

    此篇文章仅是自己的开发经验分享,不具备官方参考价值,如有不足,欢迎批评指正 开发目的: 创建一个带箭头的文字注释 字体为新宋体,大小2.5mm,宽度系数0.7,箭头为30度实心箭头 like this ...

  8. 【Revit二次开发】标高

    标高 标高 参考代码 标高 标高和轴网相当于地球的经度和纬度,在Revit里面起到"定海神针"的作用,整个建筑都是基于它们建立起来的,大多数元素都是基于标高来定位. 标高是有限的水 ...

  9. revit二次开发之教学视频

    一.背景 刚入门revit二次开发的小伙伴,很多是零基础的工程人员,为了解决这个问题,博主做了revit二次开发的一系列教学视频(包括C#基础与revit二次开发两个模块),来帮助大家更好的入门. 二 ...

最新文章

  1. [翻译] DSL和模型驱动开发的最佳实践(3/4)
  2. 低功耗稳压芯片HT7333、HT7333-A
  3. python函数用于创建对象_Python-创建类并使用函数更改其对象值
  4. Rest_Framework之频率组件部分
  5. 产品经理的高薪会持续嘛?
  6. 启用属性,索引和存储的用途是什么?
  7. 学习web前端要了解的HTML5知识有哪些?
  8. C#动态生成Word文档并填充数据(二)
  9. WPF Page close
  10. 5. linux操作系统bios启动过程需要执行哪几个操作?,Linux系统启动的大致过程
  11. disable NSLog
  12. html使用什么网络协议,网络协议详细介绍
  13. IT项目需求调查问卷(模板)
  14. U盘“请将磁盘插入U盘”的问题
  15. Windows下winrm的网络类型公用的问题解决
  16. #C语言学习笔记#猴子偷桃问题
  17. 实验过程分析1——数据集为什么需要按一定比例划分
  18. pycharm查找替换快捷键
  19. Ganymed SSH-2(ch.ethz.ssh2)
  20. cocos2d-x自代的Json库解析json(转)

热门文章

  1. H5+jQuery H5+JavaScript 体质指数BMI计算
  2. Scratch-简易时钟制作
  3. 搜索大全——实用搜索引擎
  4. STM32CubeIDE开发(十六),I2C协议采集传感器数据(SHTC1、LTR-553ALS、BMP280、LSM6DSL、MMC3680KJ)
  5. Bootstrap字体图标
  6. 电影记忆之16(人工智能)
  7. 【狗狗分类项目】(3)扩展数据集:斯坦福kaggle数据库
  8. 如何在网站上增加Google analytics,手把手操作
  9. java applet 打印_applet 打印常见问题与解决方法
  10. 详解VMware12安装Mac OS X 10.11