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

image-20201219153551001

核心代码

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取消放置时报错

在这里插入图片描述

利用 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取消异常处理
请添加图片描述

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 要在Revit二次开发放置AnnotationSymbol注释符号,可以使用以下代码: ```csharp // 获取当前文档和视图 UIDocument uiDoc = commandData.Application.ActiveUIDocument; Document doc = uiDoc.Document; View view = doc.ActiveView; // 获取AnnotationSymbol类型 FilteredElementCollector fec = new FilteredElementCollector(doc); fec.OfClass(typeof(AnnotationSymbol)); AnnotationSymbolType symbolType = fec.FirstElement() as AnnotationSymbolType; // 设置注释符号位置和内容 XYZ position = new XYZ(0, 0, 0); string content = "这是一个注释符号"; AnnotationSymbol symbol = AnnotationSymbol.Create(doc, symbolType.Id, view.Id, position, content); // 将注释符号添加到文档中 Transaction trans = new Transaction(doc, "Add Annotation Symbol"); trans.Start(); doc.Create.NewAnnotationSymbol(symbol); trans.Commit(); ``` 这段代码会在当前活动视图中放置一个AnnotationSymbol注释符号,并设置注释符号的位置和内容。使用 `AnnotationSymbolType` 类型获取注释符号类型,然后使用 `AnnotationSymbol.Create` 方法创建注释符号实例。最后,将注释符号添加到文档中。 ### 回答2: Revit二次开发可以使用AnnotationSymbol类来放置注释符号。AnnotationSymbol类是Revit API中的一部分,可用于创建和修改Revit项目中的注释元素。 在Revit中,注释符号用于在平面视图和立面视图中表示一些额外的信息,例如标高、尺寸、文字和图例等。通过使用AnnotationSymbol类,我们可以创建和定位这些注释元素。 要创建一个注释符号,首先需要获取注释元素所在的视图。然后,使用AnnotationSymbol类的构造函数,将所需的参数传递给它,例如注释符号的类型、注释符号的位置和旋转角度等。接下来,使用AnnotationSymbol类的Place方法将注释符号放置在指定的位置。 一旦注释符号被创建和放置,我们可以使用AnnotationSymbol类的其他方法和属性来修改和控制它的外观和行为。例如,可以使用AnnotationSymbol类的方法调整注释符号的大小、位置和旋转角度,也可以使用其属性设置注释符号的文本内容和格式。 总结来说,通过Revit二次开发中的AnnotationSymbol类,我们可以方便地创建和放置注释符号,从而在Revit项目中表示附加的信息和注释。这为设计、施工和协调过程中的图纸和模型提供了更好的可视化和交流方式。 ### 回答3: revit二次开发允许在模型中放置注释符号AnnotationSymbol,可以通过编程来实现这一功能。 首先,我们需要使用revit API中的AnnotationSymbol类来创建注释符号。可以通过指定其类型和位置来放置注释符号。其常见的类型包括文字、标记、箭头等。通过设置注释符号的属性,例如大小、颜色、字体等,可以调整注释符号的外观。 在二次开发中,我们可以使用revit API提供的方法来创建和定位注释符号。首先,我们需要使用Document类中的Create.NewTextNote方法来创建一个文本注释符号。然后,我们可以使用Element类中的SetLocation方法来设置注释符号的位置。通过设置注释符号的参数,我们可以调整其大小和旋转。 例如,以下代码片段可以在revit模型中放置一个文本注释符号: Document doc = commandData.Application.ActiveUIDocument.Document; XYZ position = new XYZ(10, 10, 0); TextNote textNote = TextNote.Create(doc, viewId, position, "这是一个注释符号", TextStyleTypeId); 在这个例子中,我们首先获取当前活动文档,然后创建一个XYZ对象来定义注释符号的位置。接下来,我们使用TextNote.Create方法创建一个文本注释符号,并指定注释文本、视图ID和注释符号样式类型ID。 通过类似的方式,我们可以创建不同类型的注释符号,并将其放置在指定的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

硬核小青年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值