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取消异常处理


相关文章
|
3月前
|
数据可视化 前端开发 JavaScript
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
14 0
|
前端开发 JavaScript IDE
封装库/工具库中重要概念之编辑器
在前端开发中,编辑器(Code Editor)是一项非常重要的工具,它可以帮助我们更加高效地编写和编辑代码。虽然市面上已经有了许多强大的编辑器,但是使用封装库/工具库可以帮助我们更加方便地集成编辑器到我们的项目中
95 0
|
开发工具 C# C++
Revit2019二次开发外部工具(附加模块)的安装
Revit2019二次开发外部工具(附加模块)的安装
Revit2019二次开发外部工具(附加模块)的安装
Revit二次开发—获取并修改指定标高
Revit二次开发—获取并修改指定标高
|
数据安全/隐私保护 iOS开发 开发者
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
285 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)
|
数据安全/隐私保护 iOS开发 开发者
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(一)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
398 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(一)
|
C# Windows
艾伟_转载:用C#设计Windows应用程序模板
 通常windows应用程序都有相似的特征:控件、菜单、工具条、状态栏等等。每次我们开始作一个新的windows应用程序时都是以相同的事情开始:建立项目,添加控件和事件处理器。如果我们有一个模板,那么我们就可以节约大量的时间了。
808 0