Revit导入SQL数据库
今天,我决定在崎岖的地形上前进(或者至少,对我来说是这样):“处理数据库”。 我从客户那里得到了一个问题,是否可以使用 Dynamo 驱动 SQL 数据库并将 Revit 数据(最好是交叉数据)提供给表格。 所以,这是一个挑战,答案是:“是的,我们可以! ”
通过以下步骤,我也想帮助你设置此工作流程。 下面脚本的范围是双重的。 首先,我想为 Revit 模型中的家具对象提供来自它们所属房间的数据。 其次,我想将所有家具和房间数据提取到位于另一台主机(在本例中为虚拟机)上的 MySQL 数据库中。
1、开始之前
我在下面列出了运行此脚本之前需要安装的一些先决条件:
- 你需要设置一个 MySQL 服务器,最好是在虚拟机上,或者至少安装 MySQL .NET 连接器。
- 在下面的视频中,使用了一个名为 Workbench 的 MySQL 查看器。 可以在此处找到此查看器。
- 还需要一个名为 Slingsho他! 的 Dynamo 包 (由 Nathan Miller,The ProvingGround.org 制作)。Slingshot是一个节点库,用于将 Dynamo 连接到外部关系数据库管理系统 (RDBMS)。
2、家具和房间之间的交叉数据
第一个要求是收集 Room 数据并将此数据提供给属于相应 Room 的 Furniture 对象。 因此,使用了一个名为“Elements in Room”的自定义节点。 该节点可以在 Conrad Sobon 的 archi-lab.net 包 (Grimshaw) 中找到。 此自定义节点检测家具对象的位置点是否在房间边界内。 在这种情况下,自定义节点包含在此消息底部的数据集中。
有些房间不包含家具,这会在此自定义节点的输出中生成空列表。 要过滤掉它,可以在每个子列表上执行 List.IsEmpty 节点。 这会在最后为你提供经过过滤的家具列表,按房间排序,以及包含家具的相同房间列表。 通过填充添加到项目中家具对象的 RoomNr 项目参数的值,将这两个列表组合起来,将房间号的值发送回 Revit。
3、连接到 MySQL 服务器
在将 Revit 模型中的数据输入 MySQL 数据库之前,我们需要在 Dynamo 和服务器之间建立连接。 这可以使用以下执行 Slingshot!节点:
- Connection.MySQL_ConnectionString :使用左侧代码块中的输入数据生成连接字符串
- 包含用于创建新数据库的命令字符串的代码块。 此代码块由名为“Schema”的变量驱动
- Command.MySQL_Command :这会将命令发送到 ConnectionString 中指示的 MySQL 服务器。 结果是一个布尔值,指示是否创建了“模式”或“数据库”。
4、在 MySQL 数据库中创建表
Revit 数据需要提取到多个表中。 一个用于家具,一个用于房间。 有了Dynamo和Slingshot!, 可以使用特定的列来定义这些表。 在本例中,我使用代码块将命令字符串发送到 MySQL 服务器。 (该字符串实际上是使用 Workbench 查看器创建表时从 MySQL 命令提示符复制过来的)。
//Syntax for command to create the Room table with indicated columns
“CREATE TABLE `” + DBase + “`.`” + Table + “` (
`ROOM_ID` INT NOT NULL COMMENT ”,
`NUMBER` VARCHAR(45) NULL COMMENT ”,
`NAME` VARCHAR(45) NULL COMMENT ”,
`AREA` DOUBLE NULL COMMENT ”,
PRIMARY KEY (`ROOM_ID`) COMMENT ”)”;
5、将 Revit 中的数据输入 MySQL 数据库
在这部分脚本中,我将从 Furniture 和 Room 实例中提取数据,并将它们输入数据库的正确表中。 每个对象的 Revit ID 都是唯一的,将用作数据库中的主键。 最重要的是,家具实例所属的房间的 Revit ID 也将写入家具表中。 稍后可以使用此值跨表进行查询。
下面显示了如何收集家具数据并将它们发送到 SQL.InsertInto 节点。 最后一个节点为数据库中的数据输入生成命令字符串。 该节点的Table输入是数据库名和表名的拼接字符串,这里是“MillenniumRail.Furniture”
在下图中,对 Room 数据的收集进行了类似的操作。
收集完所有数据并生成字符串后,我们可以将它们发送到 Command.MySQL_Command 以连接到数据库并写入值。 这是使用 List.Join(连接来自 Room 和 Furniture 实例的 SQL.InsertInto 输出)为 Furniture 和 Rooms 一次性完成的。
6、更改MySQL数据库中的数据
使用 MySQL Workbench,你可以更改数据库中的数据。 在这种情况下,家具标记的值被添加到表中。
7、从MySQL数据库读取数据
已在数据库中执行的更改可在 Dynamo 中读取,并可在必要时传输回 Revit。 可以在下面找到使用 Query.MySQL_Query 节点读取数据所需的语句。 这与MySQL中的提示命令基本相同:“SELECT * FROM millenniumrail.furniture”
8、数据集
可以在这里下载 Dynamo 数据集。 在运行脚本之前,请确保你拥有:
- 向家具对象添加了一个名为“RoomNr”的(项目)参数(或在 Dynamo 中更改参数名称)
- 与你的 MySQL 服务器的活动连接
- 安装Slingshot! 包。
原文链接:Revit beyond BIM
BimAnt翻译整理,转载请标明出处