[Revit二次开发] 轴网交点创建柱子
项目完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;using Autodesk.Revit.UI;//IExternalCommand用
using Autodesk.Revit.DB;//Document用
using Autodesk.Revit.Attributes; //TransactionAttribute和RegenerationAttribute
using Autodesk.Revit.DB.Structure;//StructuralType.NonStructural用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; //将uidoc转换为DocumentFilteredElementCollector coll = new FilteredElementCollector(revitDoc);//创建元素过滤收集器ElementClassFilter gridFilter = new ElementClassFilter(typeof(Grid));//过滤类型为轴网的元素List<Element> grid = coll.WherePasses(gridFilter).ToElements().ToList();//创建轴网List<Line> gridLines = new List<Line>();//创建轴线List<XYZ> intPos = new List<XYZ>();//创建交点foreach(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;//获取不重复的点if(intPos.Where(m=>m.IsAlmostEqualTo(tp)).Count() == 0){intPos.Add(tp); //收集所有的交点}}}}//在交点处创建柱子Level level = revitDoc.GetElement(new ElementId(510300)) as Level;//定义轴网,其Id为510300(以自己创建的轴网Id为准)FamilySymbol familysymbol = revitDoc.GetElement(new ElementId(510872)) as FamilySymbol;//定义柱子,其Id为52557using (Transaction trans = new Transaction(revitDoc)){trans.Start("dfs");if (!familysymbol.IsActive)familysymbol.Activate();//设为Activate状态foreach (XYZ p in intPos){//创建柱子FamilyInstance familyInstance = revitDoc.Create.NewFamilyInstance(p, familysymbol, level, StructuralType.NonStructural);}trans.Commit();}return Result.Succeeded;}}
}
效果:
参考资料:
周婧祎 《Autodesk Revit 2016二次开发入门教程》
[Revit二次开发] 轴网交点创建柱子相关推荐
- Revit二次开发——三角面创建
Revit二次开发--三角面创建 文章目录 Revit二次开发--三角面创建 前言 一.三角面是什么? 二.三角网 三.使用步骤 1.引入库 2.开启事务 3.创建 总结 前言 三角面是创建实体的基础 ...
- Revit二次开发中如何创建结构平面,修改结构平面的视图范围
创建结构平面: 使用API:public static ViewPlan Create(Document document, ElementId viewFamilyTypeId, ElementId ...
- Revit二次开发-根据两个点创建剖面视图
/// <summary>/// 根据两个点创建剖面视图/// </summary>/// <param name="doc">文档</p ...
- Revit二次开发 通过boundingBox创建实体
用户选择任意元素,生成这个元素的包围盒实体.就这么简单.被curveLoop不封闭整到人傻掉 namespace SizeAdjustment{[Autodesk.Revit.Attributes.T ...
- C# Revit二次开发基础/核心编程---建筑建模-标高和轴网
一.本节课程 C# Revit二次开发基础/核心编程---建筑建模-标高和轴网 二.本节要讲解的知识点 1.标高的高度.创建标高 2.轴网曲线.创建轴网 具体内容 1.标高 标高是有限水平平面,大多数 ...
- Revit二次开发_轴网快速标注
通过Revit二次开发实现对平行轴网的快速标注.交互操作是框选轴网->点选尺寸标注出现的位置->生成两道尺寸标注. 要达到设想的结果一些地方需要特殊考虑: 框选操作容易误选轴网,起码要把与 ...
- Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结
目录 一.创建普通的一个panel里面三个32px*32px的pushbutton,剩下两个写法一样 二.创建三个层叠按钮 层叠按钮图标需为16px*16px 层叠按钮最多为一列放三个,这个也要创建个 ...
- Revit二次开发之轴网标注
Revit二次开发之轴网标注 using System; using System.Collections.Generic; using Autodesk.Revit.DB; using Autode ...
- 【Revit 二次开发 】创建带箭头的文字注释(字体设置+引线箭头设置)
此篇文章仅是自己的开发经验分享,不具备官方参考价值,如有不足,欢迎批评指正 开发目的: 创建一个带箭头的文字注释 字体为新宋体,大小2.5mm,宽度系数0.7,箭头为30度实心箭头 like this ...
最新文章
- Spring - Java/J2EE Application Framework 应用框架 第 10 章 使用JDBC进行数据访问
- 厉害了!用 JS 实现人脑和计算机交互
- 实现数据排序的几种方法
- 曝鸿蒙os手表,华为Watch GT 2曝光:第一款使用鸿蒙OS的智能手表
- CentOS7部署NFS
- [ERR0134] Requested Service is not available【转载】
- Android之自定义ContentProvider详解
- python创建数据库计算机积极拒绝、无法连接_Python3 请求网页源码 目标计算机积极拒绝,无法连接...
- 如何在几秒钟内退出所有 Mac 应用程序?
- 微信小程序onReachBottom不触发
- abaqus算出来的转角单位是什么_ABAQUS中的单位使用方法
- JavaWeb——JavaScript精讲之DOM、BOM对象与案例实战(动态添加删除表格)
- python安装pandas pytz_python安装pandas+pytz
- java 圆的类_java:设计实现圆形类、正方形类、长方形类
- 基于网络爬虫技术的网络新闻分析
- 【优动漫 PAINT应用篇】绘制插画之草稿
- java中入参_JAVA传参
- 贴一个之前写的阴阳师源码,供各位学习
- 配置好的HTTPS服务,无法访问
- C++判断两字符串是否相等