🌓
搜索
 找回密码
 立即注册

BKM · Revit二次开发13—修改构件参数

admin 2020-4-10 18:59:46 64034

点击上面“蓝字”关注我们

在上一期中,我们讲到如何获取构件参数,为我们进一步获取BIM模型的构件信息提供了基础。这一期我们就讲讲修改模型参数,这会使得我们对BIM模型进行批量修改时候取得方便。

思路:选择构件,应用程序修改命令,完成修改。

准备材料:Visual studio 2017,Revit 2017(源代码文末获取)

1.创建代码

复制一下代码,记得添加系统引用和RevitAPI。

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.Attributes;
namespace GetElementParameters{ [Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] [Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]public class modify_parameters : IExternalCommand {public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application; Document doc = commandData.Application.ActiveUIDocument.Document; UIApplication uiapp = commandData.Application; UIDocument uiDoc = uiapp.ActiveUIDocument; Selection selection = uiDoc.Selection; ICollection<ElementId> selectedIds = uiDoc.Selection.GetElementIds();
Transaction ts = new Transaction(doc, "模板代码"); ts.Start();
if (0 == selectedIds.Count) {// 如果没有选择元素 TaskDialog.Show("开发提示框", "请先选择一个或多个墙构件"); }else {foreach (ElementId id in selectedIds) { Element element = doc.GetElement(id); element.get_Parameter(BuiltInParameter.WALL_TOP_OFFSET).SetValueString("1000"); element.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET).SetValueString("-1000"); } TaskDialog.Show("开发提示框", "命令执行完成"); }
ts.Commit();return Result.Succeeded; } }}

2.代码解释

(1)上述代码仅修改墙的顶部和底部偏移值,顶部标高偏移1000,底部标高偏移-1000,我们使用BuiltInParameter获取参数值,并使用到SetValueString这个函数。

element.get_Parameter(BuiltInParameter.WALL_TOP_OFFSET).SetValueString("1000");element.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET).SetValueString("-1000");  

(2)查看值是否能被修改。在Lookup中,我们需要查看一个属性值是否能被修改,也就是这个IsReadOnly是False能被修改,True就不能被修改。


(3)Transaction说明

凡是涉及对模型的修改,一定要有Transaction,最简单的理解就是告诉Revit,这一个步骤是进行的什么操作,如果测试出错,也可以进行撤销。

Transaction ts = new Transaction(doc, "模板代码");ts.Start();//这之间写功能代码ts.Commit();

3.加载到Revit

将在VS中生成的dll文件加载到Revit,以后这个步骤就不具体细讲了。

4.运行代码

先选中构件,在运行命令。


修改成功。

总  结

借助修改构件参数,可以在对模型进行合规性检查过后,批量进行修改,特别是大量重复性工作,比如构件命名。

欢迎加入QQ群:427981585。

微信公众号【BIM技术应用交流】后台回复“二开13”获取本期源代码。

欢迎关注知乎专栏【BKM - Revit二次开发】



扫一扫

101701.jpg
随机推荐

最新主题

0 回复

高级模式
游客
返回顶部