Added
* Added gltf extensions: `KHR_materials_transmission`, `KHR_materials_specular`, `KHR_materials_ior`, `KHR_materials_clearcoat`, `KHR_Texture_Transform`, `KHR_materials_pbrSpecularGlossiness`
* Added `GLTFContent.check_extensions_texture_recursively`
* Added `GLTFContent.get_node_by_name`, `GLTFContent.get_material_index_by_name`
* Added `GLTFContent.add_material`, `GLTFContent.add_texture`, `GLTFContent.add_image`
* Added pluggable `Brep` support with `compas.geometry.brep`.
* Added Rhino `Brep` plugin in `compas_rhino.geometry.brep`.
* Added boolean operations to the `compas_rhino` `Brep` backend.
* Added boolean operation operator overloads in `compas.geometry.Brep`
* Added `format` task using `black` formatter.
* Added a `test_intersection_circle_circle_xy` in the `test_intersections`
* Added split operation to `compas_rhino.geometry.Brep`.
* Added a `RhinoArtist` in `compas_rhino`.
* Added a `RhinoArtist` in `compas_ghpython`.
Changed
* Based all gltf data classes on `BaseGLTFDataClass`
* Fixed `Color.__get___` AttributeError.
* Fixed `RhinoSurface.curvature_at` not returning a Vector, but a Rhino SurfaceCurvature class object
* Fixed `cylinder_to_rhino` conversion to match `compas.geometry.Cylinder` location.
* Changed identification of cylinder brep face to non-zero in `compas_rhino.conversions.cylinder.Cylinder`.
* Changed linter to `black`.
* Automatically trigger `invoke format` during `invoke release`.
* Fixed bug in `intersections.intersection_circle_circle_xy` where the Circle's Plane was accessed instead of the centre.
* Fixed bug in `_core.tangent` where the Circle's Plane was accessed instead of the centre.
* Fixed the `test_tangent` to work with a properly defined circle
* `RhinoBrep` serialization works now with surface types other than NURBS.
* Fixed bug in finding halfedge before a given halfedge if that halfedge is on the boundary (`Mesh.halfedge_before`).
* Renamed `Brep.from_brep` to `Brep.from_native`.
Removed