Revit 产品通过参数保存许多属性。我们常常需要修改参数的值。
1. 如果在对象的属性对话框中,点击参数,如果该参数右侧显示一个文本编辑对话框,这类参数的修改最简单,直接用Parameter.Set() 函数来修改参数值,包括整形,长度,字符串等。
2. 如果点击一个参数,右侧显示一个下拉列表,此时存储在该参数中可能是一个ElementId类型的变量,指向文件中的一个对象;也可能是一个ElementId类型,ElementId.IntegerValue 是一个小于0的整数常量, 但是没有指向Revit文件中的一个对象。 怎么修改这种参数的值呢?
获取目标值的大小
a. 把该参数值手动设置为你希望在编程中设置的值。
b. 编写一段程序,读取该参数的ElementId,并获取Id值(ElementId.IntegerValue),比如获得的值是-1
设置参数值:
a. 创建一个ElementId 对象,把获取到的目标参数值传入:这里传入-1
ElementId id = new ElementId(-1);
b. 把这个ElementId对象赋值给参数 。 如下所示:
e.get_Parameter("Underlay").Set(id);
请看下面的完整代码。修改一个楼层平面图是否显示下面的楼层。有2个选择: 1. 设置下面的某一个楼层,2. 不显示任何楼层。 下面代码演示不显示任何楼层。
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using Autodesk.Revit .DB; using Autodesk.Revit.UI; using Autodesk.Revit .ApplicationServices; using Autodesk.Revit.Attributes ; [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)] public class RevitCommand : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) { UIApplication app = commandData.Application; Document doc = app.ActiveUIDocument.Document; FilteredElementCollector collector = new FilteredElementCollector(doc); collector.OfClass(typeof(ViewPlan)); IList<Element> planViews = collector.ToElements(); Transaction trans = new Transaction(doc, "ExComm"); trans.Start(); foreach (Element e in planViews) { if(e.Name.Equals("Level 1") { ElementId id = new ElementId(-1); e.get_Parameter("Underlay").Set(id); //don't show other level's slice } } trans.Commit(); return Result.Succeeded ; } }
3. 如果参数右侧出现一个按钮,点击按钮弹出一个对话框,这种参数的值一般不能用编程的方式来修改。