Revit二次开发—载入族并交互式放置

简介: Revit二次开发—载入族并交互式放置

核心代码

using (Transaction tx = new Transaction(doc))
{
    tx.Start("Transaction Name");
    Family family = null;
    var str = "xxx.rfa";
    doc.LoadFamily(str, out family);
    tx.Commit();
    // 交互式放置之前需要结束事务
    if (family != null)
    {
      var symbol = doc.GetElement(family.GetFamilySymbolIds().FirstOrDefault()) as FamilySymbol
        uidoc.PromptForFamilyInstancePlacement(symbol);
    }
}

问题一:按esc取消放置时报错

d31653c4cce24092b0f7c245a2f9d951.png

利用 try-catch 捕获异常,并设置该异常不予处理,代码如下:

try
{
}
catch (Exception ex)
{
    //用户取消异常,不抛出异常信息
    if (!(ex is Autodesk.Revit.Exceptions.OperationCanceledException))
    {
        throw ex;
    }
}

问题二:如何在放置一个族实例之后退出放置

思路:注册文档更新事件,事情响应时给Revit窗口发送两次ESC

问题三:已存在所载入族时,如何正常放置


Family family = null;
// 过滤当前文档是否存在该族
FilteredElementCollector collector = new FilteredElementCollector(doc);
collector.OfClass(typeof(Family));
IList<Element> CollectorList = collector.ToElements();
foreach (var elem in CollectorList)
{
    var familyItem = elem as Family;
    // str是要载入族的名称
    if (familyItem.Name == Path.GetFileNameWithoutExtension(str))
    {
        family = familyItem;
        break;
    }
}
// 如果未载入过,则载入该族
if (family == null)
{
    doc.LoadFamily(str, out family);
}
// 交互式放置
uidoc.PromptForFamilyInstancePlacement(
doc.GetElement(family.GetFamilySymbolIds().FirstOrDefault()) as FamilySymbol);

参考资料

Send Keys to Application Programmatically Using C#

Building Coder(Revit 二次开发) - 放置族实例

Revit二次开发知识分享(十一)放置实例

Revit二次开发知识分享(十二)给Revit发送Esc按键

Revit二次开发 用户Esc取消异常处理


相关文章
|
19天前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
35 0
|
3月前
|
机器学习/深度学习 运维 算法
函数计算产品使用问题之第三方插件安装后不显示是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
【51单片机】一文带你利用【Keil软件的模板功能】【自定义模板】简化操作(带图详解)
【51单片机】一文带你利用【Keil软件的模板功能】【自定义模板】简化操作(带图详解)
|
11月前
|
编译器
嵌入式QT 树形浏览 - navListView
嵌入式QT 树形浏览 - navListView
|
4月前
|
数据可视化 前端开发 JavaScript
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
39 0
|
开发工具 C# C++
Revit2019二次开发外部工具(附加模块)的安装
Revit2019二次开发外部工具(附加模块)的安装
Revit2019二次开发外部工具(附加模块)的安装
|
Android开发 iOS开发 异构计算
如何快速定位Android端GPU问题之工具介绍
## GAPID ```GAPID```是```Google```下的一个开源库,可用于记录发送给GPU的API调用及渲染状态检查,目前主要用于Android端,对OpenGL ES及Vulkan的支持最完善,使用此工具可以协助定位排查端上OpenGL ES的渲染效果、渲染状态及错误、渲染绑定的shader等资源,同时可以即时修改渲染每步中的变量值并查看新的渲染效果。 ## 下载安装
2501 0