Wiki
Clone wikitarsier / Interoperability
As GH_PointCloud directly wraps Rhino.Geometry.PointCloud hence the two can be cast directly. This means we also directly use Rhino's native display pipeline, allowing very large point clouds.
C#
#!C# private void RunScript(System.Object cloudObj, ref object cloudOut) { // Since Rhino.Geometry.PointCloud is already in the SDK, we don't need any dependencies // And our object can be cast directly PointCloud cloud = (PointCloud) cloudObj; Random rng = new Random(2); // Iterate through the Rhino.Geometry.PointCloudItem list foreach (PointCloudItem item in cloud) { // Do something with it item.Color = System.Drawing.Color.FromArgb(rng.Next(0, 255), rng.Next(0, 255), rng.Next(0, 255)); } // Since a point cloud is IEnumerable of PointCloudItem, we need to wrap it as an object cloudOut = new GH_ObjectWrapper(cloud); // We will then be able to plug it into the point cloud parameter to have a GH_PointCloud }
Python
#!python from Rhino.Geometry import PointCloud, PointCloudItem from System.Drawing import Color from Grasshopper.Kernel.Types import GH_ObjectWrapper import random as rd rd.seed(2) # cloud is the component input, a GH_PointCloud or Rhino.Geometry.PointCloud for item in cloud: item.Color = Color.FromArgb(rd.randint(0, 255), rd.randint(0, 255), rd.randint(0, 255)); cloudOut = GH_ObjectWrapper(cloud);
GH_PointCloud components will also parse GH_GeometricGoo<PointCloud>, meaning that other point cloud implementations can be directly parsed, ie. Volvox. However if those libraries do not implement the same (or at least a parsing of Rhino.Geometry.PointCloud), deconstruction and reconstruction is required for the reverse.
Updated