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


目录
打赏
0
0
0
0
6
分享
相关文章
fpga内嵌逻辑分析仪使用方法 1
fpga内嵌逻辑分析仪使用方法
117 0
Echarts实战案例代码(19):利用visualMap视觉映射组件制作五色玫瑰工作进程图
Echarts实战案例代码(19):利用visualMap视觉映射组件制作五色玫瑰工作进程图
293 0
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
98 0
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
257 0
|
10月前
|
ArcGIS中ArcMap模型构建器ModelBuilder的模型建立与运行操作方法
ArcGIS中ArcMap模型构建器ModelBuilder的模型建立与运行操作方法
138 1
设计一款可扩展和基于windows系统的一键处理表格小工具思路
设计一款可扩展和基于windows系统的一键处理表格小工具思路
67 0
fpga内嵌逻辑分析仪使用方法 2
fpga内嵌逻辑分析仪使用方法
207 0