Revit SDK 介绍:AllViews 创建图纸

前言

如何用 API 创建图纸,并且放置视图?SDK 里面有一个例子,相当不错。
重点 API:

public static ViewSheet ViewSheet::Create(
	Document document,
	ElementId titleBlockTypeId
);
public static Viewport Viewport::Create(
	Document document,
	ElementId viewSheetId,
	ElementId viewId,
	XYZ point
);

操作步骤

选择你要放到图纸里面的视图:
在这里插入图片描述
生成图纸:
在这里插入图片描述

代码逻辑

创建图纸的 API 非常简单,不过有两个参数需要传给它。

ViewSheet.Create(doc, m_titleBlock.Id)

第一个参数可以从 commandData 里面得到,而第二个参数需要首先过滤一遍文件中的构件,然后用户自己在 UI 上选择一个。
过滤构件得到 title block:

private void GetTitleBlocks(Document doc)
{
   FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
   filteredElementCollector.OfClass(typeof(FamilySymbol));
   filteredElementCollector.OfCategory(BuiltInCategory.OST_TitleBlocks);
   m_allTitleBlocks = filteredElementCollector.ToElements();
   if (0 == m_allTitleBlocks.Count)
   {
      throw new InvalidOperationException("There is no title block to generate sheet.");
   }

   foreach (Element element in m_allTitleBlocks)
   {
      FamilySymbol f = element as FamilySymbol;
      AllTitleBlocksNames.Add(f.Family.Name + ":" + f.Name);
      if (null == m_titleBlock)
      {
         m_titleBlock = f;
      }
   }
}

创建好图纸之后需要放置视图到这个图纸里面:

  1. Viewport.Create 创建视窗
  2. tempUtempV 控制加入的视图位置
private void PlaceViews(ViewSet views, ViewSheet sheet)
{
   double xDistance = 0;
   double yDistance = 0;
   CalculateDistance(sheet.Outline, views.Size, ref xDistance, ref yDistance);

   Autodesk.Revit.DB.UV origin = GetOffSet(sheet.Outline, xDistance, yDistance);
   //Autodesk.Revit.DB.UV temp = new Autodesk.Revit.DB.UV (origin.U, origin.V);
   double tempU = origin.U;
   double tempV = origin.V;
   int n = 1;
   foreach (Autodesk.Revit.DB.View v in views)
   {
      Autodesk.Revit.DB.UV location = new Autodesk.Revit.DB.UV(tempU, tempV);
      Autodesk.Revit.DB.View view = v;
      Rescale(view, xDistance, yDistance);
      try
      {
         //sheet.AddView(view, location);
         Viewport.Create(view.Document, sheet.Id, view.Id, new XYZ(location.U, location.V, 0));
      }
      catch (ArgumentException /*ae*/)
      {
         throw new InvalidOperationException("The view '" + view.Name +
            "' can't be added, it may have already been placed in another sheet.");
      }

      if (0 != n++ % m_rows)
      {
         tempU = tempU + xDistance * (1 - TITLEBAR);
      }
      else
      {
         tempU = origin.U;
         tempV = tempV + yDistance;
      }
   }
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客BIM工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值