As first proposed by @bernd over at the FreeCAD forums, I think it's a great idea to share code between FreeCAD and BlenderBIM. I'm posting to start the discussion off with a very simple draft proposal of a new set of utility classes and functions which will be part of IfcOpenShell, which we can then use.
Here's a few ideas off the top of my head just to get started (definitely full of holes!), we can then organise them into classes (perhaps ifcopenshell.util.material , ifcopenshell.util.qto (do automagic calculations?) and ifcopenshell.util.pset , etc etc
get_material(element)
get_unit_scale() - stuff related to SI and imperial unit conversions and all that
convert_unit()
get_property() - note this needs to handle not just simple properties but complex list and tabular properties too - also qto can be merged into this since buildingSMART is planning to merge them anyway for IFC5
calculate_volume/area/length()?
convert_true_north_angle()?
fetch_epsg()?
dd2dms() and dms2dd() definitely
local_to_global(coordinate)?
map_class(element) - e.g. mapping between IFC classes and uniclass, omniclass, AIA CAD layers ...
In addition, various utilities can be shared:
IFC diffing
IFC COBie
IFC CSV spreadsheet export
IFC recycling / garbage collector
Ifc Patching