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