IFC Coverage - bldrs-ai/conway GitHub Wiki
Summary
Conway generates code bindings for the entire IFC 4.x specs, of 1000+ types.
Approximately 10%+ of those 1k+ types have geometry representations. Of those web-ifc supported 93 when conway forked from web-ifc in early 2023.
Conway has since rewritten about 80% (Q1 2024) of those types with our new high-performance approach, with work continuing on less common types as we encounter them in production.
geom-types.txt
List of supported and unsupported types in this dir: https://github.com/bldrs-ai/test-models/blob/main/ifc/scripts
Coverage analysis in a file
> cat model.ifc | grep --color=never -E "(`grep -v \# geom-types.txt | xargs | sed 's/ /|/g'`)" | /usr/bin/sed -E 's/.*(IFC[A-Z]+).*/\1/g' | sort | uniq -c | sort -rn
991822 IFCPOLYLOOP
990794 IFCFACEOUTERBOUND
990794 IFCFACE
...
55 IFCCOLOURRGB
49 IFCCOMPOSITECURVE
41 IFCMATERIALLAYERSET
10 IFCCIRCLEPROFILEDEF
1 IFCARBITRARYPROFILEDEFWITHVOIDS
Computing % makeup
Run this twice, replacing tot=1
with last line of first run
> cat model-type-counts.txt | awk 'BEGIN{x=0;tot=1;print "#count % %cumulative type"} ; //{x+=$1;printf("%d %.2f%% %.2f%% %s\n", $1, $1/tot * 100, x/tot * 100, $2)} ; END{print x}'
...
10 335733600.00% IFCCIRCLEPROFILEDEF
1 335733700.00% IFCARBITRARYPROFILEDEFWITHVOIDS
3357337
> cat model-type-counts.txt | awk 'BEGIN{x=0;tot=1;print "#count % %cumulative type"} ; //{x+=$1;printf("%d %.2f%% %.2f%% %s\n", $1, $1/tot * 100, x/tot * 100, $2)} ; END{print x}'
#count % %cumulative type
991822 29.54% 29.54% IFCPOLYLOOP
990794 29.51% 59.05% IFCFACEOUTERBOUND
990794 29.51% 88.56% IFCFACE
76212 2.27% 90.83% IFCFACETEDBREP
76212 2.27% 93.10% IFCCLOSEDSHELL
66467 1.98% 95.08% IFCBOOLEANRESULT
...
41 0.00% 100.00% IFCMATERIALLAYERSET
10 0.00% 100.00% IFCCIRCLEPROFILEDEF
1 0.00% 100.00% IFCARBITRARYPROFILEDEFWITHVOIDS
3357337
Misc types
- IFCRELAGGREGATES
- IFCBOOLEANRESULT: .INTERSECTION., .UNION. (low prio, only a few results: https://github.com/search?q=path%3A*.ifc+IFCBOOLEANRESULT+.UNION.&type=code)
- IfcExtrudedAreaSolidTapered, doesn't fail check bc doing instanceof IfcExtrudedAreaSolid, which is true
Geom types
With a geom-types.txt file based on the coverage below, but setup in this format:
IFCPLANE
#IFCBSPLINESURFACE -- Partially implemented. Needs testing
#IFCBSPLINESURFACEWITHKNOTS -- "
#IFCRATIONALBSPLINESURFACEWITHKNOTS -- "
IFCAXIS2PLACEMENT2D
IFCCARTESIANTRANSFORMATIONOPERATOR2D
IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM
IFCPOLYLINE
IFCLINE
IFCINDEXEDPOLYCURVE
IFCCIRCLE
IFCELLIPSE
#IFCBSPLINECURVE -- "
#IFCBSPLINECURVEWITHKNOTS -- "
#IFCRATIONALBSPLINECURVEWITHKNOTS -- "
IFCAXIS1PLACEMENT
IFCAXIS2PLACEMENT3D
IFCLOCALPLACEMENT
IFCCARTESIANTRANSFORMATIONOPERATOR3D
IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM
IFCCONNECTEDFACESET
IFCCLOSEDSHELL
IFCOPENSHELL
IFCFACE
IFCADVANCEDFACE
IFCPOLYLOOP
IFCINDEXEDPOLYGONALFACE
IFCPOLYGONALFACESET
IFCMAPPEDITEM
IFCBOOLEANCLIPPINGRESULT
IFCBOOLEANRESULT
IFCHALFSPACESOLID
IFCPOLYGONALBOUNDEDHALFSPACE
IFCREPRESENTATIONMAP
IFCFACEBASEDSURFACEMODEL
IFCSHELLBASEDSURFACEMODEL
IFCADVANCEDBREP
IFCFACETEDBREP
IFCPRODUCTREPRESENTATION
IFCPRODUCTDEFINITIONSHAPE
IFCSHAPEREPRESENTATION
#IFCTRIANGULATEDFACESET -- Done Dec'23
#IFCSURFACECURVESWEPTAREASOLID -- TODO(pablo) May'25
#IFCSWEPTDISKSOLID -- Dec'24
#IFCREVOLVEDAREASOLID -- TODO(pablo) May'25
IFCEXTRUDEDAREASOLID
IFCINDEXEDPOLYGONALFACEWITHVOIDS
IFCPRESENTATIONSTYLEASSIGNMENT
IFCSURFACESTYLE
IFCSURFACESTYLERENDERING
#IFCSURFACESTYLESHADING -- Done Dec'23
#IFCSTYLEDREPRESENTATION -- TODO(pablo) May'25
IFCSTYLEDITEM
IFCCOLOURRGB
IFCMATERIALLAYERSETUSAGE
IFCMATERIALLAYERSET
IFCMATERIALLAYER
IFCMATERIAL
#IFCFILLAREASTYLE -- TODO(pablo) May'25
IFCMATERIALLIST
IFCMATERIALCONSTITUENTSET
IFCMATERIALCONSTITUENT
#IFCMATERIALPROFILESETUSAGE -- June 2 '25
IFCMATERIALPROFILE
IFCMATERIALPROFILESET
IFCFACEOUTERBOUND
IFCFACEBOUND
IFCEDGELOOP
IFCEDGECURVE
IFCARBITRARYOPENPROFILEDEF
IFCARBITRARYCLOSEDPROFILEDEF
IFCARBITRARYPROFILEDEFWITHVOIDS
IFCRECTANGLEPROFILEDEF
IFCROUNDEDRECTANGLEPROFILEDEF
IFCRECTANGLEHOLLOWPROFILEDEF
IFCCIRCLEPROFILEDEF
IFCELLIPSEPROFILEDEF
IFCCIRCLEHOLLOWPROFILEDEF
IFCCSHAPEPROFILEDEF
IFCISHAPEPROFILEDEF
IFCLSHAPEPROFILEDEF
IFCTSHAPEPROFILEDEF
IFCUSHAPEPROFILEDEF
IFCZSHAPEPROFILEDEF
IFCDERIVEDPROFILEDEF
IFCCOMPOSITEPROFILEDEF
IFCARBITRARYOPENPROFILEDEF
#IFCCYLINDRICALSURFACE -- Done Nov'23
#IFCSURFACEOFREVOLUTION -- Done Nov'23
#IFCSURFACEOFLINEAREXTRUSION -- Done Nov'23
IFCCOMPOSITECURVE
#IFCCOMPOSITECURVESEGMENT -- June 2 '25
IFCTRIMMEDCURVE
IFCBLOCK -- May 30 '25
IFCROUNDEDRECTANGLEPROFILEDEF -- May 30 '25. Incorrect in web-ifc
[email protected]
Coverage Parity 87% atAssessed on May 19 w/Nick, Pablo & Russell, 81/93, incl 6 unknown states for BSPLINE types, so only 6 TODOs otherwise.
> wc -l geom-types.txt
93 geom-types.txt
> grep -v \# geom-types.txt | wc -l
74
[email protected] Coverage Parity
IFCjs79.56% Complete (74/93)
Legend:
- Complete
Incomplete
- IFCPLANE
IFCBSPLINESURFACEIFCBSPLINESURFACEWITHKNOTSIFCRATIONALBSPLINESURFACEWITHKNOTS- IFCAXIS2PLACEMENT2D
- IFCCARTESIANTRANSFORMATIONOPERATOR2D
- IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM
- IFCPOLYLINE
- IFCLINE
- IFCINDEXEDPOLYCURVE
- IFCCIRCLE
- IFCELLIPSE
IFCBSPLINECURVEIFCBSPLINECURVEWITHKNOTSIFCRATIONALBSPLINECURVEWITHKNOTS- IFCAXIS1PLACEMENT
- IFCAXIS2PLACEMENT3D
- IFCLOCALPLACEMENT
- IFCCARTESIANTRANSFORMATIONOPERATOR3D
- IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM
- IFCCONNECTEDFACESET
- IFCCLOSEDSHELL
- IFCOPENSHELL
- IFCFACE
- IFCADVANCEDFACE
- IFCPOLYLOOP
- IFCINDEXEDPOLYGONALFACE
- IFCPOLYGONALFACESET
- IFCMAPPEDITEM
- IFCBOOLEANCLIPPINGRESULT
- IFCBOOLEANRESULT
IFCHALFSPACESOLID- update needed to add scaling parameter- IFCPOLYGONALBOUNDEDHALFSPACE
- IFCREPRESENTATIONMAP
- IFCFACEBASEDSURFACEMODEL
- IFCSHELLBASEDSURFACEMODEL
- IFCADVANCEDBREP
- IFCFACETEDBREP
- IFCPRODUCTREPRESENTATION
- IFCPRODUCTDEFINITIONSHAPE
- IFCSHAPEREPRESENTATION
IFCTRIANGULATEDFACESETIFCSURFACECURVESWEPTAREASOLIDIFCSWEPTDISKSOLIDIFCREVOLVEDAREASOLID- IFCEXTRUDEDAREASOLID
- IFCINDEXEDPOLYGONALFACEWITHVOIDS
- IFCPRESENTATIONSTYLEASSIGNMENT
- IFCSURFACESTYLE
- IFCSURFACESTYLERENDERING
IFCSURFACESTYLESHADINGIFCSTYLEDREPRESENTATION- IFCSTYLEDITEM
- IFCCOLOURRGB
- IFCMATERIALLAYERSETUSAGE
- IFCMATERIALLAYERSET
- IFCMATERIALLAYER
- IFCMATERIAL
IFCFILLAREASTYLE- IFCMATERIALLIST
- IFCMATERIALCONSTITUENTSET
- IFCMATERIALCONSTITUENT
IFCMATERIALPROFILESETUSAGE- IFCMATERIALPROFILE
- IFCMATERIALPROFILESET
- IFCFACEOUTERBOUND
- IFCFACEBOUND
- IFCEDGELOOP
- IFCEDGECURVE
- IFCARBITRARYOPENPROFILEDEF
- IFCARBITRARYCLOSEDPROFILEDEF
- IFCARBITRARYPROFILEDEFWITHVOIDS
- IFCRECTANGLEPROFILEDEF
- IFCROUNDEDRECTANGLEPROFILEDEF
- IFCRECTANGLEHOLLOWPROFILEDEF
- IFCCIRCLEPROFILEDEF
- IFCELLIPSEPROFILEDEF
- IFCCIRCLEHOLLOWPROFILEDEF
- IFCCSHAPEPROFILEDEF
- IFCISHAPEPROFILEDEF
- IFCLSHAPEPROFILEDEF
- IFCTSHAPEPROFILEDEF
- IFCUSHAPEPROFILEDEF
- IFCZSHAPEPROFILEDEF
- IFCDERIVEDPROFILEDEF
- IFCCOMPOSITEPROFILEDEF
- IFCARBITRARYOPENPROFILEDEF
IFCCYLINDRICALSURFACEIFCSURFACEOFREVOLUTIONIFCSURFACEOFLINEAREXTRUSION- IFCCOMPOSITECURVE
IFCCOMPOSITECURVESEGMENT- IFCTRIMMEDCURVE