Revit SDK:WorkThread 做工的线程

前言

这个例子介绍了利用 idling 事件,在事件处理中利用 Analysis Visualisation Framework (AVF) 分析可视化框架来更新墙的一个面的颜色。

内容

实现的效果:
在这里插入图片描述

这个例子有两个个关键点:

  1. idling event + thread
  2. Analysis Visualisation Framework (AVF)

核心逻辑1 - idling handler

通过 uiapp.Idling 注册一个事件处理函数:

m_hIdling = new EventHandler<IdlingEventArgs>(IdlingHandler);
uiapp.Idling += m_hIdling;

处理函数的核心是m_analyzer.UpdateResults

public void IdlingHandler(object sender, IdlingEventArgs args)
{
	bool processing = false;
	if (m_analyzer != null)
	{
		UIApplication uiapp = sender as UIApplication;
		if (uiapp.ActiveUIDocument != null)
		{
			using (Transaction trans = new Transaction(uiapp.ActiveUIDocument.Document))
			{
				trans.Start("bogus transaction");
                processing = m_analyzer.UpdateResults();
                trans.Commit();
            }
			// 通知 Revit 去进行更新
			args.SetRaiseWithoutDelay();
		}
	}

	// 如果分析结束,就取消注册消息处理函数
	if (!processing)
	{
		UnsubscribeFromIdling(sender as UIApplication);
		m_analyzer = null;
	}
}

Analysis Visualisation Framework (AVF)

Dynamo For Revit Node: Analysis Visualisation Framework (AVF) 分析可视化框架
FaceAnalyzer 是通过启动另外一个线程,调用 AVF 框架让选中的墙面逐渐改变颜色。
启动另外一个线程的逻辑,这个和多线程编程没有任何区别,它是通过m_analyzer.UpdateResults层层调用过来的:

// Revit 2021 SDK\Samples\MultiThreading\WorkThread\CS\ThreadAgent.cs
m_thread = new Thread(new ParameterizedThreadStart(this.Run));
m_thread.Start(m_results);

在 Run 的方法里面做了AVF 需要的数据的更新。

其它

这个例子介绍的内容表明,在 Revit 的 idling 事件里面可以使用线程。但线程的使用肯定是有限制的,显然,我们不能在线程里面去改变 Revit 模型的内容。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值