问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Revit 二次开发:从 Revit 开始 (1)

创作时间:
作者:
@小白创作中心

Revit 二次开发:从 Revit 开始 (1)

引用
1
来源
1.
https://forums.autodesk.com/t5/community-blog/revit-er-ci-kai-fa-cong-revit-kai-shi-1/ba-p/13202332

Revit二次开发是建筑信息化(BIM)领域的重要技术,它允许开发者通过编程方式扩展Revit的功能。本文将探讨如何将Revit中的构件逻辑映射到编程中,以及如何避免常见的“所见即所得”思维误区。

将Revit中的构件逻辑带入到编程中

在Revit二次开发中,很多开发者会首先使用Revit软件,然后再进行开发。这种方式通过将Revit中的结构和操作映射到代码设计中,可以在前期帮助开发者理解并快速实现需求。

Revit中的构件逻辑分为族、族类别和构件三个层级,利用这些层级关系,可以很好地控制构件的配置、生成和放置。在程序设计中,我们也可以借鉴这种层级思想。为了减少代码之间的耦合性,通常情况下,我们会在同一个文件下创建多个方法类,在这些方法类中,我们像在建模中一样逐步找到需要创建的族,并按指定的步骤进行构建。

举个例子,假设我们需要在代码中绘制一面墙,可以像这样编写代码:

// Build a location line for the wall creation
XYZ start = new XYZ(0, 0, 0);
XYZ end = new XYZ(10, 10, 0);
Line geomLine = Line.CreateBound(start, end);
// Create a wall using the location line
Wall.Create(document, geomLine, level.Id, true);

这段代码中,我们首先定义了墙体的起点和终点坐标,然后调用Wall.Create()方法来创建墙体。这与Revit中的操作非常相似,体现了如何将Revit的概念和操作直接映射到编程逻辑中。

这是一个简单的逻辑映射,可能会有点抽象,但是当我们首先接触Revit在学习C#的时候就可以将一些Revit里面的概念带入进去,可以让我们更深的理解程序设计和逻辑。

切换所见即所得的思维

很多工程领域的从业者或学生在学习编程时,常常将“所见即所得”的思维模式直接应用到编程逻辑中。这样做的一个显著问题是,在测试模型和场景时看似没有问题,但一旦进入新项目或新的环境,就可能出现错误。这种情况通常发生在初学者忽视了一些潜在问题,将一些几何显示的细节理所当然地视为正确。

例如下面这个楼梯剖面标注的案例:

很多初学者再开始编写这个程序的时候会将逻辑梳理为:

  1. 找到设计师点击的鼠标左键位置
  2. 将平面坐标映射到Revit中
  3. 放置标记,完成整个功能

这种逻辑在正交视图中通常没有问题,但在处理斜视图时可能会出现偏差。虽然我们通常看到的视图是二维的,这是因为计算机显示器的屏幕本质上是一个二维平面,它只能呈现物体的投影,而无法显示实际的三维空间。

实际上,在建筑设计和建模中,视图往往是通过投影将三维物体压缩到一个平面上,这就导致了二维显示与三维空间之间的差异。当我们在正交视图中操作时,坐标位置是精确的,但在斜视图或三维剖面视图中,坐标的映射关系会受到视角变化的影响,从而产生误差。

下面是一个示意,左侧为正视图,右侧为斜视图:

因此,实际的坐标转换过程中,设计程序时如果仅仅依赖屏幕上的二维显示而忽略了斜视角度,可能会导致我们获取的用户点击位置与实际目标位置不符,产生偏差。这就是一个典型的被“所见即所得”显示模式误导的案例。尽管我们在屏幕上看到的视图是正交显示,但在三维空间中,偏移问题不可忽视。

因此,在设计程序时,我们不仅要借鉴Revit的操作思路,还需要考虑到实际的三维情况,避免仅凭肉眼所见的二维效果来推断坐标转换逻辑。这种情况在很多几何操作和判定中会时常出现,为了避免会出现各种计算错误,需要提前考虑到这种情况,并进行规避才能更完善的编写运行程序。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号