Building Coder(Revit 二次开发) - 复制 Legend 组件

Building Coder 链接:http://thebuildingcoder.typepad.com/blog/2010/05/duplicate-legend-component.html

Revit 二次开发论坛链接:http://revit.5d6d.com/viewthread.php?tid=1286&extra=


目前仍然有部分Revit元素无法通过编程的方式创建,因为API没有为这些元素提供合适的创建方法。
Joe Ye 和 Harry Mattison 刚刚解决了一个关于如何为一个 Legend 创建新组件的问题。他们创造性的想法十分有趣。
思路是对现有的元素进行复制,然后再对复制的元素进行相关操作来实现创建的目的。下面让我们重现这个问题的解决过程吧。

问题:
是否有可能通过编程的方式为一个 Legend 增加新的组件?我找不到针对 Legend 组件的 API。是否有其它途径(例如:触发相关的键盘快捷键)?
是否可能复制现有的 Legend 组件然后修改它们的族来达到目的?

回答:
目前 Revit API 没有提供任何方法可以为 Legend 新增组件。不过幸运的是我们可以通过复制现有组件的方式创建新组件。
解决方案是:
1. 将需要被复制的元素放入一个组(Group)中;
2. 将这个组放置到一个新的位置
   译者注:实际上是对组进行复制。这步操作之后应该存在两个组。
3. 然后拆分新/老两个组

结果是被复制的元素保持不变,一个新的复制元素被增加到 Legend 中。

最新的 Building Coder 例子代码中包含一个新的命令:CmdDuplicateElements。该命令实现了上述操作,同时也是第一次使用 Manual 的方式定义外部命令。
也就是说该命令必须处理自己的事务周期。


[Transaction( TransactionMode.Manual )]
[Regeneration( RegenerationOption.Manual )]
class CmdDuplicateElements : IExternalCommand
{
  public Result Execute(
    ExternalCommandData commandData,
    ref string message,
    ElementSet elements )
  {
    UIApplication app = commandData.Application;
    UIDocument uidoc = app.ActiveUIDocument;
    Document doc = uidoc.Document;
 
    Transaction trans = new Transaction( doc,
      "Duplicate Elements" );
 
    trans.Start();
 
    Group group = doc.Create.NewGroup(
      uidoc.Selection.Elements );
 
    LocationPoint location = group.Location
      as LocationPoint;
 
    XYZ p = location.Point;
    XYZ newPoint = new XYZ( p.X, p.Y + 10, p.Z );
 
    Group newGroup = doc.Create.PlaceGroup(
      newPoint, group.GroupType );
 
    group.Ungroup();
 
    ElementSet eSet = newGroup.Ungroup();
 
    // change the property or parameter values 
    // of elements in eSet as required...
 
    trans.Commit();
 
    return Result.Succeeded;
  }
}

你可以选则若干个 Legend 组件,然后执行该命令来得到新的 Legend 组件。然后再修改这些新组件的“组件类型(Component Type)”参数来得到指定类型的组件。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值