Elements 项目介绍
项目概述
Elements 是一个跨平台的库,用于创建建筑元素。它专为建筑师、工程师和其他希望通过编写代码生成建筑的专业人士设计。在创建 Hypar 这个平台时,我们需要一个能够生成建筑元素的库,并作为平台每个功能的核心运行。Elements 满足了一系列苛刻的要求,例如小巧、快速、并行运行于Linux的微服务环境且不依赖于其他主流软件的几何内核。
项目组成
- Elements Core: 包含了
Element
类型、几何内核和其他核心建筑元素类型。 - Elements.Benchmarks: 用于对Elements进行性能基准测试和追踪。
- Elements.CodeGeneration: 将Element类型的JSON schema转换为C#的方法。
- Elements.Components: 用于创建元素的组件。
- Elements.Playground: 一个在线代码编辑应用程序,用于在浏览器中生成元素。
- Elements.Serialization.DXF: 用于模型的DXF格式序列化和反序列化。
- Elements.Serialization.IFC: 用于模型的IFC格式序列化和反序列化。
核心功能
- 高效的几何处理: Elements 使用一种简单的混合 BREP/CSG(边界表示与构造实体几何)几何内核,支持矢量、线条、弧、和多边形等在建筑设计中常用的基本几何类型。
- 精度控制: 提供多种方法保证几何操作的精度,比如
Vector3.Epsilon=1e-05
和double.IsAlmostEqualTo(...)
等。 - 灵活的元素系统: Elements系统允许用户定义新的建筑元素类型,而不是像 IFC 或 Revit 等 BIM 应用那样被限制于已存在的元素分类。这种灵活性使得用户可以更好地在系统中处理建筑模型。
设计原则
- 元素实例化: Elements可以定义一个元素并通过实例对其进行引用和变换。
- 可扩展性: Elements是C#的一个库,但设计时考虑到未来可能在其他编程语言中使用,因此,不依赖C#特有的特性如属性来传递类型或其特性的信息。
- 开放性: Elements的设计鼓励在流行的AEC(建筑、工程和施工)应用中重用代码。
项目搭建与测试
- 构建: 通过
dotnet build
进行项目构建。 - 测试: 使用
dotnet test
进行测试确保库的功能正常。 - 基准测试: 提供 Elements.Benchmarks 用于性能评估。
项目的使用
用户可以通过 NuGet 包管理器将 Elements 集成到自己的项目中。在 .NET Core 项目中,使用 dotnet add package Hypar.Elements
命令进行安装,在 Visual Studio 中则可通过 Install-Package Hypar.Elements
安装。
对于那些想要贡献该项目的开发者,源码和详细的使用示例及文档都可供参考。特别是在提供的示例测试中,用户可以找到几乎所有函数的使用示例。
Elements 旨在提供一个高效、易用且具备可扩展性的工具集,以帮助建筑专业人士提高生产力,摆脱对其他大型软件的依赖,尽可能地简化复杂的建筑设计任务。通过关注小巧、高效和开放性,Elements 试图在建筑软件领域带来一股清新的风潮。