**Revit二次开发实例——模型自动扣减**
本文章来源于微信公众号 '有福BIM’
有福BIM的第四篇原创文章!
阅读前望知悉:
我晓得各位读者和粉丝中不乏C#二开大佬
有福作为一个二开新手(编程泥腿子)
自知对编程的语法或定义的理解浅薄
故此文不敢称之‘教程’
仅作为‘技术分享’与‘学习笔记’之类尚可
这个系列被我称为《零基础Revit二次开发》
可有意思的事
从另一个角度来看
真正的零基础(不会C#、没有任何编程经验、Revit不熟悉)
是不可能搞好二次开发的
有福会在这里分享 有福插件 所有的源代码
并附详细注释供有需者参考
照抄代码也可实现目标功能是我所能保证的?️
而进行二开前的一些准备工作(开发环境部署、vs安装)等请自行上网搜索
(我始终认为这会过滤出一批真正想做好二开的有追求的的BIM狗子)
好
有福这里就不拉家常了
主程序代码分为A、B两部分
A
//有福提示!!!
//以下代码中,‘//’后面的文字内容为注释部分,注释中有‘**’的表示编程所必须(照抄即可)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using System.Windows.Forms;
using Application = Autodesk.Revit.ApplicationServices.Application;
//**以上为引用(编程所必须)
namespace LianJie//**新建一个命名空间 ‘LianJie’(名字可自行设定)
{
[Transaction(TransactionMode.Manual)]//**设定事务为手动更新
public class LianJcom : IExternalCommand//**实现外部命令的接口
{
public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
//**实现 Execute 方法重载
{
UIApplication uiApp = commandData.Application;
Autodesk.Revit.ApplicationServices.Application app = uiApp.Application;
Document doc = uiApp.ActiveUIDocument.Document;
//**以上三行为获取DB级别和UI级别文档(以后会经常见到)
Transaction trans = new Transaction(doc, "LianJie");//新建一个事务
trans.Start();//开始事务
这里会弹出一个对话框与用户交互(弹出窗口的代码部分见C)
B
Form1 form1 = new Form1();//运行弹出窗口程序
if (form1.ShowDialog() == DialogResult.OK)//将窗口输入的内容返回到主程序
{
}
string loucen=form1.str;//将窗口输入内容赋值给新建的变量 ‘loucen’
//获得所有结构柱图元
FilteredElementCollector JGZfilteredElements = new FilteredElementCollector(doc);
//新建一个收集器 ‘JGZfilteredElements’
JGZfilteredElements.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_StructuralColumns);
//对所有图元应用过滤器‘.OfClass(typeof(FamilyInstance))’和‘.OfCategory(BuiltInCategory.OST_StructuralColumns)’
//得到所有的结构柱图元,并存到收集器中
var strcloumnElement = from element in JGZfilteredElements
where element.get_Parameter(BuiltInParameter.DOOR_NUMBER).AsString()