前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >这是一期Revit二次开发小案例(自动布置支吊架)

这是一期Revit二次开发小案例(自动布置支吊架)

作者头像
一席青衣卧龙城
发布于 2022-04-21 04:29:03
发布于 2022-04-21 04:29:03
1.3K00
代码可运行
举报
文章被收录于专栏:Revit二次开发Revit二次开发
运行总次数:0
代码可运行

报告各位,前段时间看世界杯所以我不想更新

给各位放个小案例,以表歉意,再不开心我也没办法咯!

好了,这是一条正经的分割线!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data;
using Autodesk.Revit;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.ApplicationServices;
using System.Data.SqlClient;
using Autodesk.Revit.Creation;
using Autodesk.Revit.DB.Structure;//之前没有记得复制啊
namespace zpx123
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
    public class Class1 : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
        {
            //创建应用程序对象
            Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application;
            //创建文档对象
            Autodesk.Revit.DB.Document doc = commandData.Application.ActiveUIDocument.Document;
            //创建应用程序对象
            Autodesk.Revit.UI.UIApplication uiapp = commandData.Application;
            //创建文档对象
            Autodesk.Revit.UI.UIDocument uiDoc = uiapp.ActiveUIDocument;
            //开始事务
            Transaction ts = new Transaction(doc, "支吊架布置");
            ts.Start();

以上这是模板,不知道各位还记得不

下面就是正经的代码咯!

之前几期讲过很多创建实例的文章,我们这次来应用一下,平时是不是做支吊架要手工来点很麻烦呢?现在我们做一个小程序让他自动把支吊架布上吧!

  1. 选择布置支吊架的距离

2.选择要布置支吊架的管子


我们先添加一个窗体,粗略设计一下窗体,大概就上面这样吧!

给窗体加上代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace zpx123
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void textBox1_TextChanged(object sender, EventArgs e)
        {
            string str = textBox1.Text;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }
        public string Number
        {
            get { return textBox1.Text; }//获得文本框里返回的值
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
}

正经的代码咯:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
           double number = 0;
            int number1 = 0;
            zpx123.Form1 form = new zpx123.Form1();
            form.ShowDialog();
            if (form.DialogResult == DialogResult.OK)
            {
                string str = form.Number;
              //为了防止用户乱输入发生错误,我习惯踹一脚
             try
                {
                    number1 = Convert.ToInt32(str);
                    number = number1/304.8;
                }
                catch
                {
                    MessageBox.Show("请输入正确的数字");
                }
            }
//通过以上这些就可以获得用户输入的数值了
            ElementId id = null;
            FilteredElementCollector faa = new FilteredElementCollector(doc);
            faa.OfClass(typeof(FamilyInstance));//收集族类型
            foreach (FamilyInstance fa in faa)
            {
                if (fa.GetParameters("族与类型")[0].AsValueString().Contains("支吊架"))
                {
                    id = fa.Symbol.Id;
                }
            }
            FamilySymbol fas = doc.GetElement(id) as FamilySymbol;
            Selection ree = uiDoc.Selection;
            Reference re = ree.PickObject(ObjectType.Element);
            Element elem = doc.GetElement(re);
            Pipe pipe = elem as Pipe;
            LocationCurve curve = pipe.Location as LocationCurve;
            XYZ start = curve.Curve.GetEndPoint(0);//获取管道的起点
            XYZ end = curve.Curve.GetEndPoint(1);//获得管道的终点
            double a = start.X ;
            double b = start.Y ;
            double zz = start.Z ;
            double c = end.X ;
            double d = end.Y ;
            //以上是获得管道起点和终点的xyz的值
            double xy = start.DistanceTo(end) ;//求距离
            int gs = (int)((xy / number));//求要放几个支吊架
           double y = (number * (d - b)) / Math.Sqrt((c - a) * (c - a) + (d - b) * (d - b)) ;
           double x = (number * (c - a)) / Math.Sqrt((c - a) * (c - a) + (d - b) * (d - b)) ;
           //以上为数学公式
            List<FamilyInstanceCreationData> listt = new List<FamilyInstanceCreationData>();
            //用来存储一系列的管道坐标的集合
            for (double j = 0; j < gs; j ++)
            {
               double A = a + x;
                double B = b + y;
                listt.Add(new FamilyInstanceCreationData(new XYZ(A, B, zz), fas, StructuralType.NonStructural));//把坐标放到集合里
                a = A;
                b = B;
            }
            doc.Create.NewFamilyInstances2(listt);//创建支吊架
            ts.Commit();
            return Result.Succeeded;
        }
    }
}

(代码有点长,我试了一下,截屏没办法把代码都截进去,只能分成几个图片了)


效果展示:

点击完成,选择管道。

由于支吊架是一个方向的,所以要想完美的实现还需要将支吊架进行旋转,这个就留给各位聪明的宝宝啦!后面某一期会更新如何进行旋转哦!敬请期待(我也不确定啥时候更新)。。。。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Revit二次开发之——lookup的使用方法(第七期)
看到有人给小编的消息说不懂如何去获得构件的参数,这期小编就讲一下如何使用lookup这个工具来获得构件的参数的。
一席青衣卧龙城
2022/04/21
1.4K0
Revit二次开发之——lookup的使用方法(第七期)
Revit 二次开发入门教程--用HelloRevit进行程序调试(第四期)
用我们上期提供的模板,开始我们的代码之路吧!本期就写很简单的代码,主要是教会大家如何去调试代码。
一席青衣卧龙城
2022/04/21
1K0
Revit 二次开发入门教程--用HelloRevit进行程序调试(第四期)
Revit二次开发小案例之喷头与管道自动连接
最近小编在使用某榄山翻喷淋的模型的时候,发现有很多的喷淋喷头和管道都没办法自动连接,而且喷淋的量比较大,因此写了一个自动喷头与管道连接的插件让其自动连接,分享一下方法和代码。
一席青衣卧龙城
2022/04/21
9770
Revit二次开发小案例之喷头与管道自动连接
Revit二次开发案例之拆分梁(按照梁跨进行拆分梁打断梁)
作为2020的首篇文章,要给大家分享一篇小案例,关于梁如何拆分及自动遇柱拆分的方法。
一席青衣卧龙城
2022/04/21
2.1K0
Revit二次开发案例之拆分梁(按照梁跨进行拆分梁打断梁)
Revit二次开发——多管道线性标注(第十八期)
2020年还真的是见证历史的一年,疫情爆发,美元熔断,原油暴跌,所以是玛雅预言的2012推迟了?
一席青衣卧龙城
2022/04/21
7680
Revit二次开发——多管道线性标注(第十八期)
Revit二次开发模板(第三期)
本期我们就正式上手开撸Revit二次开发的代码了,小伙伴们有没有很激动啊~~~反正小编是没有啦!因为这是一个无尽的深渊,至于原因,小伙伴们自己慢慢体会吧!一起痛并快乐着。
一席青衣卧龙城
2022/04/21
7050
Revit二次开发案例之常规模型任意斜面创建钢筋
最近几天在研究如何创建钢筋,本来想的是在板上创建钢筋,奈何没有难度。后来在网上看见一个基坑喷锚网筋的模型,确实这个要是使用手动建模是非常费劲的,由于平时接触基坑的项目也不多,正好借此研究一下如何在倾斜的构件里创建钢筋,以备不时之需。当然以下这套方法同样适用于板钢筋的创建。
一席青衣卧龙城
2022/04/21
1.3K0
Revit二次开发案例之常规模型任意斜面创建钢筋
Revit二次开发之三通翻弯
最近小编做管综的时候面对三通翻弯很麻烦,所以就想着写个插件来解决吧。这些思路想法给大家一些启发,有用就看看,没用大家还是一起去吃瓜吧。
一席青衣卧龙城
2022/04/21
9080
Revit二次开发之三通翻弯
Revit二次开发之创建族实例(第十三期)
欢迎小编回来给大家继续更新,由于最近工作时长很久很久。。。我深刻的害怕我的英容俊貌只能留在冷冰冰的照片上,特地的继续加了个班。就这样还是我们部门工作时长最少的,就问你,害不害怕,害不害怕??
一席青衣卧龙城
2022/04/21
1.6K0
Revit二次开发之创建族实例(第十三期)
Revit二次开发之创建插件面板(第十五期)
这期来给各位讲解如何创建面板,至于为什么要创建面板,当然是为了装逼。。。。。。不对不对。。。是为了让用户方便使用你的插件。
一席青衣卧龙城
2022/04/21
1.4K0
Revit二次开发之创建插件面板(第十五期)
从Revit中选取元素(第五期)
大家看网上的其他教程或者参考卢石碧先生写的那本《Revit二次开发基础教程》的时候会发现和我这有出入,他们是这么写的
一席青衣卧龙城
2022/04/21
7540
从Revit中选取元素(第五期)
Revit二次开发之管线自动留洞(链接文件的管线自动留套管)
最近要进行管线留洞,核对施工图的留洞正确性,虽然很多插件都有这个功能,原理也很简单,无非就是创建一个洞口族或者套管族,毕竟插件要掏钱,那就自己码码代码生成一下吧。
一席青衣卧龙城
2022/04/21
6260
Revit二次开发之管线自动留洞(链接文件的管线自动留套管)
Revit二次开发——创建墙体(2)(第十一期)
上一期我们学了一下最简单的墙体创建的代码,这期我们来学复杂的墙体创建,我们学习二次开发的原因就是要辅助设计提高效率,翻模的话能够插件自动翻模,因此我们的墙体不可能会是默认墙体那么简单,需要有各种不同的尺寸,不同的样子,好了不多说我们开始学习吧。
一席青衣卧龙城
2022/04/21
6520
Revit二次开发——创建墙体(2)(第十一期)
Revit二次开发——创建和切换标记(第十六期)
开头先讲一个问题,平时做施工图标记的时候一根梁的标记是非常多的,所以我们会通过切换标记的形式来切换标记(如下图所示),那这在代码中是如何实现的呢?
一席青衣卧龙城
2022/04/21
9510
Revit二次开发——创建和切换标记(第十六期)
Revit二次开发——创建墙体(1)(第十期)
1.Create(Document, Curve, ElementId, Boolean)
一席青衣卧龙城
2022/04/21
5880
Revit二次开发——创建墙体(1)(第十期)
Revit二次开发之创建宿主元素(门窗等)(第十四期)
Document.NewFamilyInstance Method (XYZ, FamilySymbol, Element, Level, StructuralType)
一席青衣卧龙城
2022/04/21
7740
Revit二次开发之创建宿主元素(门窗等)(第十四期)
revit二次开发教程_BIM二次开发
1) 第一步,利用vs2010建立c# Windows服务类型的项目。
全栈程序员站长
2022/09/19
1.8K0
revit二次开发教程_BIM二次开发
Revit二次开发——创建楼板(第十二期)
不知道你们有多少人和小编一样天天加班4-5小时还走不了的加班狗。。。。。。最主要是。。。。。。。
一席青衣卧龙城
2022/04/21
1.3K1
Revit二次开发——创建楼板(第十二期)
Revit二次开发——接触式过滤(第十七期)
这期讲一个接触式过滤选择,什么是接触式过滤选择呢?又有什么作用呢?请继续往下看……
一席青衣卧龙城
2022/04/21
5310
Revit二次开发——接触式过滤(第十七期)
Revit二次开发之通过过滤器获取元素(第六期)
上一期我们讲了如何通过UI界面的进行元素的选择,但很多时候我们希望插件能够快速的获取元素并进行相对应的操作,省去人工的麻烦,毕竟我们共同拥有一个毛病——懒,所以这一期我们就讲讲过滤器的用法。(小编码了半天结果被浏览器那好家伙给糟蹋了,可惜了那篇文章。)
一席青衣卧龙城
2022/04/21
1.2K0
推荐阅读
相关推荐
Revit二次开发之——lookup的使用方法(第七期)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文