The IFC SDK provides datatypes and code supporting the read and write of IFC files. This is an experimental project aiming at advancing implementation and uses of C++ Modules at large. The SDK contains C++ datatypes that can be memory-mapped directly onto the on-disk format. See the IFC Specification for more details.
If you want to participate in the development of the IFC SDK, you are welcome! You can report issues, comment on pull requests, and learn about what we are working on. You can also submit pull requests to fix bugs or add features reflecting the Specification: see CONTRIBUTING.md for more information.
This project uses CMake for defining projects, and the code has been tested to work on Windows and Linux. It can be built and run under WSL (Windows Subsystem for Linux) as well.
The JavaScript IFC viewer can be run by loading the index.html file in a browser.
IFC files to experiment with can be generated by using a current Microsoft C++ compiler. There are a couple of IFC files checked into the repo for basic testing purposes. Longer term, we want to be able to generate IFC files using the SDK itself. To generate an IFC file, you can use a current Visual C++ compiler. The following will generate an IFC containing almost everything in the test.cpp translation unit. Currently, non-inline functions or methods will not be generated into the IFC.
cl /std:c++20 /exportHeader test.cpp
This will create an IFC file named test.cpp.ifc. This can be dumped with ifc-printer like this.
ifc-printer.exe --color test.cpp.ifc
See BUILDING.md for more information.
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to grant us the right to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR (Pull Request) appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
See CONTRIBUTING.md for more information.
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.
This project has adopted the Microsoft Open Source Code of Conduct.
Resources:
- Microsoft Open Source Code of Conduct
- Microsoft Code of Conduct FAQ
- Contact opencode@microsoft.com with questions or concerns
Copyright (c) Microsoft Corporation.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception