C++ to c# RhinoCommon

Hi, Please some body help me to convert this bit of code from c++ to c# RhinoCommon.
I am not sure what is m_P in c#.

void space_n::GetGridPointCloud(ON_PointCloud& cloud)
{
int size = m_size_x * m_size_y*m_size_z;
cloud.Destroy();
cloud.m_P.Reserve(size);
cloud.m_P.SetCount(size);

for (int z = 0; z < m_size_z; z++)
{
	for (int y = 0; y < m_size_y; y++)
	{
		for (int x = 0; x < m_size_x; x++)
		{
			int idx = Index(x, y, z);
			cloud.m_P[idx] = ON_3dPoint(m_vertices[idx].x_pos, m_vertices[idx].y_pos, m_vertices[idx].z_pos);
		}
	}
}

}

Here code for a C# command I wrote to create a random point cloud with colors:

		protected override Result RunCommand(RhinoDoc doc, RunMode mode)
		{
			Random r = new Random(13);
			var plcnt = 1000000;
			var edge = 10;

			GetNumber gn = new GetNumber();
			gn.SetCommandPrompt("How many pointsies");
			gn.SetDefaultInteger(plcnt);
			gn.SetUpperLimit(500000001, true);
			gn.SetLowerLimit(1, true);
			gn.AcceptNothing(true);

			var gnrc = gn.Get();
			if (gnrc == GetResult.Nothing || gnrc == GetResult.Number)
			{
				var nr = (int)gn.Number();
				if (nr > 500000000)
				{
					RhinoApp.WriteLine("More than 500.000.000 points");
					return Result.Cancel;
				}
				PointCloud pc = new PointCloud();
				for (int i = 0; i < nr; i++)
				{
					var d = (double)i;
					pc.Add(
						new Point3d(r.NextDouble() * edge, r.NextDouble() * edge, r.NextDouble() * edge),
						System.Drawing.Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))
					);
				}

				doc.Objects.AddPointCloud(pc);

				doc.Views.Redraw();
			}

			return Result.Success;
		}

You may want to check out the different constructors and the methods to add ranges:

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_Geometry_PointCloud.htm

Also check the Add, Set and so on for manipulating the cloud.

1 Like

Many thanks !