在上一期中,我们讲到如何获取构件参数,为我们进一步获取BIM模型的构件信息提供了基础。这一期我们就讲讲修改模型参数,这会使得我们对BIM模型进行批量修改时候取得方便。
思路:选择构件,应用程序修改命令,完成修改。 准备材料:Visual studio 2017,Revit 2017(源代码文末获取) 复制一下代码,记得添加系统引用和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; } } }
(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();
将在VS中生成的dll文件加载到Revit,以后这个步骤就不具体细讲了。 先选中构件,在运行命令。
修改成功。
借助修改构件参数,可以在对模型进行合规性检查过后,批量进行修改,特别是大量重复性工作,比如构件命名。 欢迎加入QQ群:427981585。 微信公众号【BIM技术应用交流】后台回复“二开13”获取本期源代码。 欢迎关注知乎专栏【BKM - Revit二次开发】
|