Added
* Added `viewerinstance` in `compas.scene.Scene` to support viewers context detection.
* Added `compas_rhino8` as starting point for Rhino8 support.
* Added `compas.scene.SceneObjectNode`.
* Added `compas.scene.SceneTree`.
* Added `compas.scene.SceneObject.node`.
* Added `compas.scene.SceneObject.frame`.
* Added `compas.scene.SceneObject.worldtransformation`.
* Added `compas.scene.SceneObject.parent`.
* Added `compas.scene.SceneObject.children`.
* Added `compas.scene.SceneObject.add()`.
* Added tutorial for `compas.datastructures.Tree`.
* Added Serialisation capability to `compas.scene.Scene`.
* Added `show` flag to `compas.scene.SceneObject`.
* Added `show_points` flag to `compas.scene.GeometryObject`.
* Added `show_lines` flag to `compas.scene.GeometryObject`.
* Added `show_surfaces` flag to `compas.scene.GeometryObject`.
* Added `show_vertices` flag to `compas.scene.MeshObject`.
* Added `show_edges` flag to `compas.scene.MeshObject`.
* Added `show_faces` flag to `compas.scene.MeshObject`.
* Added `show_nodes` flag to `compas.scene.NetworkObject`.
* Added `show_edges` flag to `compas.scene.NetworkObject`.
* Added `show_vertices` flag to `compas.scene.VolMeshObject`.
* Added `show_edges` flag to `compas.scene.VolMeshObject`.
* Added `show_faces` flag to `compas.scene.VolMeshObject`.
* Added `show_cells` flag to `compas.scene.VolMeshObject`.
* Added `compas.data.Data.to_jsonstring` and `compas.data.Data.from_jsonstring`.
* Added `compas.data.Data.attributes`.
* Added optional param `working_directory` to `compas.rpc.Proxy` to be able to start services defined in random locations.
* Added `compas.datastructures.Datastructure.transform` and `compas.datastructures.Datastructure.transformed`.
* Added `compas.datastructures.Datastructure.transform_numpy` and `compas.datastructures.Datastructure.transformed_numpy`.
* Added `compas.datastructures.Halfedge.flip_cycles`.
* Added `compas.datastructures.Halfedge.is_connected`, `compas.datastructures.Halfedge.connected_vertices`, `compas.datastructures.Halfedge.connected_faces`.
* Added `compas.datastructures.Mesh.join`.
* Added `compas.datastructures.Mesh.weld` and `compas.datastructures.Mesh.remove_duplicate_vertices`.
* Added `compas.datastructures.Mesh.quads_to_triangles`.
* Added `compas.datastructures.Mesh.unify_cycles`.
* Added `compas.datastructures.Mesh.aabb` and `compas.datastructures.Mesh.obb`.
* Added `compas.datastructures.Mesh.offset` and `compas.datastructures.Mesh.thickened`.
* Added `compas.datastructures.Mesh.exploded`.
* Added `compas.datastructures.Mesh.adjacency_matrix`, `compas.datastructures.Mesh.connectivity_matrix`, `compas.datastructures.Mesh.degree_matrix`, `compas.datastructures.Mesh.laplacian_matrix`.
* Added `compas.topology.vertex_adjacency_from_edges`, `compas.topology.vertex_adjacency_from_faces`, `compas.topology.edges_from_faces`, `compas.topology.faces_from_edges`.
* Added `compas.datastructures.Network.split_edge`, `compas.datastructures.Network.join_edges`.
* Added `compas.datastructures.Network.smooth`.
* Added `compas.datastructures.Network.is_crossed`, `compas.datastructures.Network.is_xy`, `compas.datastructures.Network.is_planar`, `compas.datastructures.Network.is_planar_embedding`, `compas.datastructures.Network.count_crossings`, `compas.datastructures.Network.find_crossings`, `compas.datastructures.Network.embed_in_plane`.
* Added `compas.datastructures.Network.find_cycles`.
* Added `compas.datastructures.Network.shortest_path`.
* Added `compas.datastructures.Network.transform`.
* Added `compas.datastructures.Graph.is_connected`.
* Added `compas.datastructures.Graph.adjacency_matrix`, `compas.datastructures.Graph.connectivity_matrix`, `compas.datastructures.Graph.degree_matrix`, `compas.datastructures.Graph.laplacian_matrix`.
Changed
* Changed the `__str__` of `compas.geometry.Point` and `compas.geometry.Vector` to use a limited number of decimals (determined by `Tolerance.PRECISION`). Note: `__repr__` will instead maintain full precision.
* Changed `docs` Workflow to only be triggered on review approval in pull requests.
* Changed `draw` implementations of `compas.scene.SceneObject` to always use the `worldtransformation` of the `SceneObject`.
* Fixed typo in name `Rhino.Geometry.MeshingParameters` in `compas_rhino.geometry.RhinoBrep.to_meshes()`.
* Fixed `TypeErrorException` when serializing a `Mesh` which has been converted from Rhino.
* Fixed color conversions in `compas_rhion.conversions.mesh_to_compas`.
* Changed `SceneObject` registration to allow for `None` context.
* Changed `compas.data.Data.name` to be stored in `compas.data.Data.attributes`.
* Changed `compas.data.Data.__jsondump__` to include `compas.data.Data.attributes` if the dict is not empty.
* Changed `compas.data.Data.__jsonload__` to update `compas.data.Data.attributes` if the attribute dict is provided.
* Changed `compas.datastructures.Graph` to take additional `**kwargs`, instead of only `name=None` specifically.
* Changed `compas.datastructures.Network` to take additional `**kwargs`, instead of only `name=None` specifically.
* Changed `compas.datastructures.Halfedge` to take additional `**kwargs`, instead of only `name=None` specifically.
* Changed `compas.datastructures.Mesh` to take additional `**kwargs`, instead of only `name=None` specifically.
* Moved registration of `ping` and `remote_shutdown` of the RPC server to `compas.rpc.Server.__init__()`.
* Moved `FileWatcherService` to `compas.rpc.services.watcher` so it can be reused.
* Changed `compas.datastructures.Mesh.subdivide` to `compas.datastructures.Mesh.subdivided`.
* Moved `compas.numerical.pca_numpy` to `compas.geometry.pca_numpy`.
* Moved `compas.numerical.scalafield_contours` to `compas.geometry.scalarfield_contours`.
* Moved `compas.numerical.matrices` to `compas.topology.matrices`.
* Moved `compas.numerical.linalg` to `compas.geometry.linalg`.
* Changed `watchdog` dependency to be only required for platforms other than `emscripten`.
* Changed `compas.geometry.earclip_polygon` algorithm because the current one does not handle several cases.
Removed
* Removed `compas_rhino.forms`. Forms will be moved to `compas_ui`.
* Removed `compas.scene.NoSceneObjectContextError`.
* Removed `compas.datastructures.Datastructure.attributes` and `compas.datastructures.Datastructure.name` (moved to `compas.data.Data`).
* Removed `attributes` from `compas.datastructures.Graph.data`.
* Removed `attributes` from `compas.datastructures.Network.data`.
* Removed `attributes` from `compas.datastructures.Halfedge.data`.
* Removed `attributes` from `compas.datastructures.Mesh.data`.
* Removed `compas.datastructures.mesh_bounding_box` and `compas.datastructures.mesh_bounding_box_xy`.
* Removed `compas.datastructures.mesh_oriented_bounding_box_numpy` and `compas.datastructures.mesh_oriented_bounding_box_xy_numpy`.
* Removed `compas.datastructures.mesh_delete_duplicate_vertices`.
* Removed `compas.datastructures.mesh_is_connected` and `compas.datastructures.mesh_connected_components`.
* Removed `compas.datastructures.mesh_isolines_numpy` and `compas.datastructures.mesh_contours_numpy`.
* Removed `compas.datastructures.trimesh_gaussian_curvature`.
* Removed `compas.datastructures.trimesh_descent`.
* Removed `compas.datastructures.mesh_disconnected_vertices`, `compas.datastructures.mesh_disconnected_faces` and `compas.datastructures.mesh_explode`.
* Removed `compas.datastructures.mesh_geodesic_distances_numpy`.
* Removed `compas.datastructures.trimesh_face_circle`.
* Removed `compas.datastructures.mesh_weld`, `compas.datastructures.meshes_join`, `compas.datastructures.meshes_join_and_weld`.
* Removed `compas.datastructures.mesh_offset` and `compas.datastructures.mesh_thicken`.
* Removed `compas.datastructures.mesh_face_adjacency` and `compas.datastructures.mesh_unify_cycles`.
* Removed `compas.datastructures.mesh_transform`, `compas.datastructures.mesh_transformed`, `compas.datastructures.mesh_transform_numpy`, `compas.datastructures.mesh_transformed_numpy`.
* Removed `compas.datastructures.mesh_quads_to_triangles`.
* Removed `compas.datastructures.volmesh_bounding_box`.
* Removed `compas.datastructures.volmesh_transform` and `compas.datastructures.volmesh_transformed`.
* Removed `compas.topology.unify_cycles_numpy` and `compas.topology.face_adjacency_numpy`.
* Removed `compas.topology.unify_cycles_rhino` and `compas.topology.face_adjacency_rhino`.
* Removed `compas.datastructures.network_is_connected`.
* Removed `compas.datastructures.network_complement`.
* Removed `compas.datastructures.network_disconnected_nodes`, `compas.datastructures.network_disconnected_edges`, `compas.datastructures.network_explode`.
* Removed `compas.datastructures.network_adjacency_matrix`, `compas.datastructures.network_connectivity_matrix`, `compas.datastructures.network_degree_matrix`, `compas.datastructures.network_laplacian_matrix`.
* Removed `compas.datastructures.network_transform`, `compas.datastructures.network_transformed`.
* Removed `compas.datastructures.network_shortest_path`.
* Removed `compas.numerical`.