Allorai, si, in effetti tra uno script e l’altro ho utilizzato stessi nomi per cose diverse, e quindi il codice non è più inter-compatibile.
Se noti, nel primo script faccio dei cicli for dove uso variabili “x” e “y”. Nel secondo script uso gli stessi nomi ma per cose diverse.
Questo fa un po tutto:
c#_bmp_path_mesh_evaluate.gh (5,4 KB)
private void RunScript(string path, Point3d pt, ref object M, ref object W, ref object H, ref object C)
{
if(!System.IO.File.Exists(path)){
this.Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Invalid file path!");
return;
}
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(path);
if(bmp == null){
this.Component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Bitmap file not valid!");
return;
}
int w = bmp.Width;
int h = bmp.Height;
W = w; // Outputting image X size
H = h; // Outputting image Y size
System.Drawing.Color[] colors = new System.Drawing.Color[w * h];
int i = 0;
for(int y = h - 1;y > -1;y--){
for(int x = 0;x < w;x++){
colors[i] = bmp.GetPixel(x, y);
i++;
}
}
Mesh m = Mesh.CreateFromPlane(Rhino.Geometry.Plane.WorldXY, new Interval(0, w - 1), new Interval(0, h - 1), w - 1, h - 1);
m.VertexColors.AppendColors(colors);
M = m;
int u = (int) Math.Round(pt.X * (w - 1), 0);
int v = (int) Math.Round((1 - pt.Y) * (h - 1), 0);
C = bmp.GetPixel(u, v);
}
In un’altro thread avevo messo un paio di esempi semplici di script c#.
Vedi qua e i post successivi.
E questo è un esempio di come riproporre il “Game of Life” in c#.