在Revit API 中提供了一个模型动态更新的接口:IUpdater
这个接口能监听Revit中特定的 改变,并立马做出一些反应,
比如:
Revit中,我想让用户没办法画墙,我就可以通过IUpdater
来实现,大致过程为,我会先监听用户是不是画了墙,只要用户
画了一个墙,我就执行一段程序来将用户画的墙删除,而用户做
其他的操作,并不会触发这段程序
下面是一个简单例子:
// 首先要创建一个类 来实现IUpdater 这个接口
public class UpdateOP : IUpdater
{
AddInId addInId=null;
Guid guid = new Guid("9F0F9863-BB3E-434A-83E9-08DA29E8DD23");
public UpdateOP(AddInId addin)
{
this.addInId = addin;
}
//这就是删除墙的代码
// 当触发这个Updater后 就会 运行下面的代码,
// 注意Updater 是在Transaction提交之前触发的,所有不能新建Transaction
public void Execute(UpdaterData data)
{
ICollection<ElementId> ids = data.GetAddedElementIds();
Document doc = data.GetDocument();
doc.Delete(ids);
}
public string GetAdditionalInformation()
{
return "delete wall";
}
public ChangePriority GetChangePriority()
{
return ChangePriority.FloorsRoofsStructuralWalls;
}
public UpdaterId GetUpdaterId()
{
return new UpdaterId(addInId, guid);
}
public string GetUpdaterName()
{
return "delele wall";
}
}
private void UpdaterTest()
{
UpdateOP updater = new UpdateOP(app.ActiveAddInId);
//注册
UpdaterRegistry.RegisterUpdater(updater);
//设置过滤器
ElementClassFilter wallFilter = new ElementClassFilter(typeof(Wall));
//添加触发器
UpdaterRegistry.AddTrigger(updater.GetUpdaterId(), wallFilter, Element.GetChangeTypeElementAddition());
}
运行上面的程序以后,用户就不能创建墙了。。。。。
博主会经常更新一些技术文章,请大家多多关注,多多交流
更多技术交流,请加qq群480950299