IFC++ is an open source IFC implementation for C++. It is very fast, but it has not the lowest possible memory footprint, because it has a complete class model.
Benefits of the complete class model are (among others):
- you can easily instantiate objects and access member variables, for example:
shared_ptr<IfcCartesianPoint> ifcPoint = make_shared<IfcCartesianPoint>();
shared_ptr<IfcPolyLoop> polyLoop = make_shared<IfcPolyLoop>()
polyLoop->m_Polygon.push_back(ifcPoint);
- you can navigate the model easily by accessing member variables directly, including inverse attributes:
shared_ptr<IfcBuildingStorey> currentBuildingStorey = ...;
for (auto it : currentBuildingStorey->m_IsDecomposedBy_inverse)
{
shared_ptr<IfcRelAggregates> relAggregates(it);
for (auto it2 : relAggregates->m_RelatedObjects)
{
shared_ptr<IfcObjectDefinition> child_obj = (it2);
shared_ptr<IfcWallStandardCase> wall = dynamic_pointer_cast<IfcWallStandardCase>(child_obj);
if(wall)
{
// do something with wall
}
}
}
Inverse attribute pointers are automatically generated by IFC++ for all object references in the model.
- casting is possible for all types:
shared_ptr<IfcPropertySet> pset = dynamic_pointer_cast<IfcPropertySet>(relatingPropertyDefinition);
- Professional support is available for bug fixing or custom implementations on www.ifcquery.com.
The project is published under the MIT license, which means that you can use it for any purpose, personal or commercial. There is no obligation to publish your source code.
Open source example application for Qt here available: https://github.com/ifcquery/ifcplusplus/releases
https://github.com/ifcquery/ifcplusplus/wiki/Build-instructions
BIMViewPlus: Advanced IFC viewer with integrated file browser, model split & export to IFC/glTF/html
https://github.com/BIMViewPlus/BIMViewPlus
The IFC viewer BIMViewPlus is based on IFC++, but is not open source.
BIMViewPlus has an integrated file browser and a powerful search feature.
From the search results, a partial model can be extracted and exported to IFC4 or HTML/glTF/glb.