FreeCAD-HVAC is a FreeCAD workbench for creating and managing HVAC duct networks. The current implementation focuses on a basic but usable duct-network workflow built around route geometry, automatic connectivity parsing, and library-driven generation of duct segments and fittings.
The intended workflow is:
- Create a Duct Network
- Add base routing geometry using sketches or line-based objects
- Let the parser extract connectivity from that geometry
- Automatically generate duct segments and junctions/fittings.
- Modify duct/ fitting parameters directly on the generated segments and junctions/fittings.
- For editing routing the base geometry can be edited as needed and the generated segments and junctions/fittings are synchronised automatically.
This approach keeps the modeling process parametric and reduces the need to rebuild duct geometry manually after every layout change.
A simplified view of the architecture is:
-
Network container layer
DuctNetworkmanages the overall duct model and its internal folders. -
Topology layer
DuctNetworkParserreads base geometry and determines connectivity and classification. -
Generated object layer
DuctSegmentandDuctJunctionmanage the derived HVAC elements. -
Library layer
HVACLibraryRegistry,HVACLibraryService, and JSON definitions provide reusable segment and junction definitions.
DuctNetwork is the central object used to manage a duct system. It is designed to manage the modeling workflow now, and to support analysis workflows later. A duct network maintains managed folders for:
- Base geometry: user-authored routing objects such as sketches and line objects
- Generated geometry: automatically created duct segments and junctions/fittings
This separation makes the workflow easier to manage: the user edits the base route, while derived HVAC geometry is regenerated or synchronized from it.
DuctNetworkParser is responsible for reading the base geometry and building network connectivity information from it. It handles:
- topology generation
- connectivity interpretation
- node and edge handling
- classification logic used for segment and junction generation
In practical terms, this is the component that converts drawing geometry into structured duct-network data.
Generated HVAC elements are managed through:
DuctSegment: represents generated duct runsDuctJunction: represents generated fittings, junctions, or similar connection objects
The parser reads the base geometry, extracts connectivity, and the resulting information is synchronized into these generated objects. This keeps the final duct model tied to the original routing input.
The project uses a library-driven architecture for duct and fitting generation.
Library parsing and management are handled by:
HVACLibraryRegistryHVACLibraryService
These components load and organize the available HVAC definitions used by the model generator.
Duct segments and junctions are defined in the library using JSON files. Shape generation is handled using shape generation functions specified along with element definition. This keeps the system modular and extensible. New profiles, fitting types, and parameters can be added through library data instead of hard-coding everything in the core logic.
- Duct routing module (may use the same module or reuse components for piping also).
- Detailing of ducts and fittings for rectangular/ circular/ oval ducts.
- Add BIM data
- Standard library of commonly used air side HVAC components like Diffusers, grills, registers, dampers, intake and exhaust accessories, VAV units, AHUs etc.
- Pressure drop calculation based on terminal flow rates and static pressure calculation for nodes.
- Automatic sizing module based on constant friction drop, constant velocity, static regain methods.
- Add additional duct classes (custom profile ducts) and detailing like insulation, duct supports, flanges etc.
- Add support for defining piping.
Basic duct creation functionality is now reasonably in place. The project already supports the main framework required for:
- defining duct routes
- parsing connectivity
- generating duct segments
- generating junction/fitting objects
- organizing library-based element definitions
This provides a solid base for further development, including richer fitting logic, validation tools, and future analysis capabilities.