The first is a "Point Distribute" node, which takes a mesh and outputs a pointcloud, scattering points randomly on the surface based on the input density. The distribution algorithm is extremely basic at this point, and doesn't take into account an attribute weight at each vertex.
The second node is a "Point Instance" node, which is mainly a placeholder until the engineering design for how to work with instancing in geometry nodes is decided. For now it just runs the same code that the convert pointcloud to mesh operator uses.
Geometry Nodes: Add pointcloud support to geometry class
This adds another set of the same mesh functions but for pointclouds. There are probably better ways to generalize this functionality, but that may have to be rethought in the future anyway if we want to store multiple of each type. And anyway it's handy to have a specific set of "pointcloud" functions available in the node implementations.
This uses the code from the rewritten boolean modifier from 2.91 as a node. The implementation is about as minimal as it can get, since for now the use case of this node is mostly to test multiple geometry outputs and inputs.
The boolean code requires a BMesh, so the node converts the input meshes to BMesh, so the bmesh is added as a dependency to the nodes module.
Geometry Nodes: initial test trying to use id properties to initialize group inputs
The settings can only be set via Python currently. The matching between properties and group inputs is based on the socket identifier (which is e.g. `Input_5`). Maybe we'll have to use a different matching strategy in the future, will see.
Geometry Nodes: support evaluation with more than one group input
Group inputs are not yet exposed in the modifier. For now I just added a simple float setting that will be passed to every float input of the group. Inputs of other types have some default value.