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

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

Coverage Parity 87% at [email protected]

Assessed 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

IFCjs [email protected] Coverage Parity

79.56% Complete (74/93)

Legend:

  • Complete
  • Incomplete
  1. IFCPLANE
  2. IFCBSPLINESURFACE
  3. IFCBSPLINESURFACEWITHKNOTS
  4. IFCRATIONALBSPLINESURFACEWITHKNOTS
  5. IFCAXIS2PLACEMENT2D
  6. IFCCARTESIANTRANSFORMATIONOPERATOR2D
  7. IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM
  8. IFCPOLYLINE
  9. IFCLINE
  10. IFCINDEXEDPOLYCURVE
  11. IFCCIRCLE
  12. IFCELLIPSE
  13. IFCBSPLINECURVE
  14. IFCBSPLINECURVEWITHKNOTS
  15. IFCRATIONALBSPLINECURVEWITHKNOTS
  16. IFCAXIS1PLACEMENT
  17. IFCAXIS2PLACEMENT3D
  18. IFCLOCALPLACEMENT
  19. IFCCARTESIANTRANSFORMATIONOPERATOR3D
  20. IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM
  21. IFCCONNECTEDFACESET
  22. IFCCLOSEDSHELL
  23. IFCOPENSHELL
  24. IFCFACE
  25. IFCADVANCEDFACE
  26. IFCPOLYLOOP
  27. IFCINDEXEDPOLYGONALFACE
  28. IFCPOLYGONALFACESET
  29. IFCMAPPEDITEM
  30. IFCBOOLEANCLIPPINGRESULT
  31. IFCBOOLEANRESULT
  32. IFCHALFSPACESOLID - update needed to add scaling parameter
  33. IFCPOLYGONALBOUNDEDHALFSPACE
  34. IFCREPRESENTATIONMAP
  35. IFCFACEBASEDSURFACEMODEL
  36. IFCSHELLBASEDSURFACEMODEL
  37. IFCADVANCEDBREP
  38. IFCFACETEDBREP
  39. IFCPRODUCTREPRESENTATION
  40. IFCPRODUCTDEFINITIONSHAPE
  41. IFCSHAPEREPRESENTATION
  42. IFCTRIANGULATEDFACESET
  43. IFCSURFACECURVESWEPTAREASOLID
  44. IFCSWEPTDISKSOLID
  45. IFCREVOLVEDAREASOLID
  46. IFCEXTRUDEDAREASOLID
  47. IFCINDEXEDPOLYGONALFACEWITHVOIDS
  48. IFCPRESENTATIONSTYLEASSIGNMENT
  49. IFCSURFACESTYLE
  50. IFCSURFACESTYLERENDERING
  51. IFCSURFACESTYLESHADING
  52. IFCSTYLEDREPRESENTATION
  53. IFCSTYLEDITEM
  54. IFCCOLOURRGB
  55. IFCMATERIALLAYERSETUSAGE
  56. IFCMATERIALLAYERSET
  57. IFCMATERIALLAYER
  58. IFCMATERIAL
  59. IFCFILLAREASTYLE
  60. IFCMATERIALLIST
  61. IFCMATERIALCONSTITUENTSET
  62. IFCMATERIALCONSTITUENT
  63. IFCMATERIALPROFILESETUSAGE
  64. IFCMATERIALPROFILE
  65. IFCMATERIALPROFILESET
  66. IFCFACEOUTERBOUND
  67. IFCFACEBOUND
  68. IFCEDGELOOP
  69. IFCEDGECURVE
  70. IFCARBITRARYOPENPROFILEDEF
  71. IFCARBITRARYCLOSEDPROFILEDEF
  72. IFCARBITRARYPROFILEDEFWITHVOIDS
  73. IFCRECTANGLEPROFILEDEF
  74. IFCROUNDEDRECTANGLEPROFILEDEF
  75. IFCRECTANGLEHOLLOWPROFILEDEF
  76. IFCCIRCLEPROFILEDEF
  77. IFCELLIPSEPROFILEDEF
  78. IFCCIRCLEHOLLOWPROFILEDEF
  79. IFCCSHAPEPROFILEDEF
  80. IFCISHAPEPROFILEDEF
  81. IFCLSHAPEPROFILEDEF
  82. IFCTSHAPEPROFILEDEF
  83. IFCUSHAPEPROFILEDEF
  84. IFCZSHAPEPROFILEDEF
  85. IFCDERIVEDPROFILEDEF
  86. IFCCOMPOSITEPROFILEDEF
  87. IFCARBITRARYOPENPROFILEDEF
  88. IFCCYLINDRICALSURFACE
  89. IFCSURFACEOFREVOLUTION
  90. IFCSURFACEOFLINEAREXTRUSION
  91. IFCCOMPOSITECURVE
  92. IFCCOMPOSITECURVESEGMENT
  93. IFCTRIMMEDCURVE