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. 如果参数右侧出现一个按钮,点击按钮弹出一个对话框,这种参数的值一般不能用编程的方式来修改。