# C# Scripting in Gh

**URL:** <https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712>\
**Category:** Bar-Rhino\
**Created:** [1 Ottobre 2022, 10:59am UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712 "2022-10-01T10:59:49Z")\
**Posts on this page:** 20\
**Page:** 4

<div class="post-metadata">

**Author:** ![giovanni.vit](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/giovanni.vit/32/16157_2.png) [@giovanni.vit](https://it.discourse.mcneel.com/u/giovanni.vit)\
**Post date:** [4 Ottobre 2022, 5:46pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/62 "2022-10-04T17:46:56Z")

</div>

magari, purtroppo però non posso aiutarvi, non sono pratico ne di programmazione ne di GH

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [4 Ottobre 2022, 5:48pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/63 "2022-10-04T17:48:47Z")

</div>

Era solo per informarti.

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [5 Ottobre 2022, 9:07am UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/64 "2022-10-05T09:07:44Z")

</div>

> [@luca.filippone](#):
>
> Ps per non soffrire troppo:

Bello !  
Non sembra troppo complicato, almeno da quanto ci capisco.  
Forse si potrebbe provare a riscriverlo per Rhino/RhinoCommon. 🙂

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [5 Ottobre 2022, 10:50am UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/65 "2022-10-05T10:50:00Z")

</div>

Se vuoi condividere/commentare il codice?  
Io ho inserito nel plugin le classi, appena posso vedo come richiamarle.

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [5 Ottobre 2022, 10:59am UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/66 "2022-10-05T10:59:08Z")

</div>

Che ne pensate se lo creiamo insieme e pubblichiamo gratuitamente il plugin firmato Mcneel Italia ?

---

<div class="post-metadata">

**Author:** ![RiccardoMajewski](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/riccardomajewski/32/22945_2.png) [@RiccardoMajewski](https://it.discourse.mcneel.com/u/RiccardoMajewski)\
**Post date:** [5 Ottobre 2022, 11:38am UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/67 "2022-10-05T11:38:12Z")

</div>

Fico!  
Ma, l’idea di base sarebbe… che sia più performante/efficiente di quello attuale integrato…?

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [5 Ottobre 2022, 12:22pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/68 "2022-10-05T12:22:27Z")

</div>

> [@luca.filippone](#):
>
> Se vuoi condividere/commentare il codice?

Era solo un’idea per una specie di esercitazione, non ho scritto niente … e comunque sarebbe incomprensibile. 😉

> [@luca.filippone](#):
>
> Io ho inserito nel plugin le classi

Stai facendo un add-on per GH ?

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [5 Ottobre 2022, 1:51pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/69 "2022-10-05T13:51:12Z")

</div>

Aspetta: c’è già quello integrato? 🙈🤦🏻  
Abbiamo scherzato. 😁

---

<div class="post-metadata">

**Author:** ![RiccardoMajewski](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/riccardomajewski/32/22945_2.png) [@RiccardoMajewski](https://it.discourse.mcneel.com/u/RiccardoMajewski)\
**Post date:** [5 Ottobre 2022, 2:02pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/70 "2022-10-05T14:02:53Z")

</div>

Intendo questi:  
 ![2022-10-05 15_59_04-](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/2X/b/bba47f43e235a01cc158e47a13a2b7d84eceef3f.png)

Metodi rhinocommon per il voronoi non so se esistono, nemmeno ho cercato.

* * *

Però l’idea è comunque carina, sarebbe “didattico” farci le nostre classi e metodi per 1 fare la triangolazione delaunay, e 2 fare il voronoi.  
Usare librerie già fatte… boh, penso sarebbe più interessante rifarle da zero.  
Usiamo elementi base delle librerie McNeel come il Punto3d e qualche .Distance o simili … ma già che ci siamo potremmo rifare tutto! 😆

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [5 Ottobre 2022, 2:33pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/71 "2022-10-05T14:33:09Z")

</div>

> [@RiccardoMajewski](#):
>
> ci siamo potremmo rifare tutto!

Hehe … pero’ per fare qualcosa utilizzabile da Rhino/GH prima o poi bisogna usare le loro classi, no ? 🙂

---

<div class="post-metadata">

**Author:** ![RiccardoMajewski](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/riccardomajewski/32/22945_2.png) [@RiccardoMajewski](https://it.discourse.mcneel.com/u/RiccardoMajewski)\
**Post date:** [5 Ottobre 2022, 2:42pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/72 "2022-10-05T14:42:27Z")

</div>

Una classe “Punto2D” contenente .X e .Y sarebbe semplice.  
La mesh(rhino) finale è solo convertire la lista dei nostri Punto2D in vertici, e la topologia creata con il nostro delaunay **deve** essere una semplice lista ti coppie di numeri interi, gli indici dei vertici che definiscono gli spigoli… con una mini-logica half-edge ricostruire la mesh è un metodo di una decina di righe.  
È fare il delaunay il problema… non sembra semplice, e ottimizzare per le prestazioni ancora peggio.

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [5 Ottobre 2022, 3:18pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/73 "2022-10-05T15:18:01Z")

</div>

> [@RiccardoMajewski](#):
>
> sarebbe semplice.

Certo, anche se, volendo, c’e’ anche in RhinoCommon:  
[Point2d Structure (rhino3d.com)](https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_Geometry_Point2d.htm)  
Ma capisco che sia un buon esercizio di programmazione. 🙂

> [@RiccardoMajewski](#):
>
> È fare il delaunay il problema… non sembra semplice

Mah, ho dato un’occhiata al progetto linkato da Luca, a me sembra pulito, ben fatto, e volendo una buona traccia da seguire.

> [@RiccardoMajewski](#):
>
> e ottimizzare per le prestazioni ancora peggio.

Se si vuole ottimizzare forse si puo’ puntare su quanto diceva Sergio:

> [@Sergio\_Alessi](#):
>
> partizioni spaziali per velocizzare la selezione degli elementi geometrici

Anche qui se si vuole, ci sono classi in RhinoCommon:

[RTree Class (rhino3d.com)](https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_Geometry_RTree.htm)

Oppure farsi qualcosa da zero. Forse basta una semplice griglia, senza bisogno di usare strutture ricorsive.

Va bene, ho straparlato abbastanza … vedete vuoi cosa preferite costruire. 🙂

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [5 Ottobre 2022, 4:10pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/74 "2022-10-05T16:10:26Z")

</div>

Siete più folli di me… 🤣  
Non se ne parla proprio a migliorare l algoritmo che ritengo uno Step avanzato.🤪  
Poi se volete, fate pure, ma mezzo neurone non lo metto 😁

Per me è tanto se capisco come si implementano classi e metodi, mai fatto pratica, solo letto un po’.

1. Innanzitutto occorre togliere credo il file

MainWindows.Xaml.Cs

perché del form non ce ne famo nulla.

1. Poi in input i punti li diamo noi da gh col componente Population

2. Dai punti creiamo la triangolazione:

var points = delaunay.GeneratePoints(PointCount, DiagramWidth, DiagramHeight);

var triangulation = delaunay.BowyerWatson(points);

1. Sostituiamo il metodo DrawTriangulation perché sia GH a disegnare le linee (come? Booo, da capire)

2. I bordi della Triangolazione di Delaunay si ricavano da

var vornoiEdges = voronoi.GenerateEdgesFromDelaunay(triangulation);

1. Dovremmo sostituire

DrawVoronoi(vornoiEdges);

con un codice di libreria GH;

1. Sostituiamo il metodo

Ho finito di lavorare da poco, riposo il neurone e poi vedo un po’.

Sarebbe bello fare un meeting online, tempo fa lo proposi ma adesioni zero.

---

<div class="post-metadata">

**Author:** ![RiccardoMajewski](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/riccardomajewski/32/22945_2.png) [@RiccardoMajewski](https://it.discourse.mcneel.com/u/RiccardoMajewski)\
**Post date:** [5 Ottobre 2022, 4:30pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/75 "2022-10-05T16:30:23Z")

</div>

> [@luca.filippone](#):
>
> Non se ne parla proprio a migliorare l algoritmo che ritengo uno Step avanzato.🤪

No, ok, hai ragione…  
Però tra quello che dici te (usare un codice esistente) e fare da zero l’algoritmo (anche inefficiente/lento) … mi sembra più divertente la seconda strada.

Cmq stasera provo anche io i 7 punti che hai detto…

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [5 Ottobre 2022, 5:04pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/76 "2022-10-05T17:04:50Z")

</div>

> [@luca.filippone](#):
>
> Sostituiamo il metodo DrawTriangulation perché sia GH a disegnare le linee (come? Booo, da capire)

Cio’ che vuoi disegnare lo puoi mandare in output dal componente, se sono oggetti RhinoCommon.

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [5 Ottobre 2022, 5:07pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/77 "2022-10-05T17:07:42Z")

</div>

Giusto, ma se serve un ciclo…?

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [5 Ottobre 2022, 5:27pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/78 "2022-10-05T17:27:15Z")

</div>

Se parli di ciclo per costruire gli oggetti, li salvi in una array o in una lista, o anche direttamente in un albero GH, ma questi non li conosco …

---

<div class="post-metadata">

**Author:** ![giuseppe](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/giuseppe/32/16416_2.png) [@giuseppe](https://it.discourse.mcneel.com/u/giuseppe)\
**Post date:** [6 Ottobre 2022, 11:48am UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/79 "2022-10-06T11:48:01Z")

</div>

> [@luca.filippone](#):
>
> Che ne pensate se lo creiamo insieme e pubblichiamo gratuitamente il plugin firmato Mcneel Italia ?

Tutto bellissimo tranne la firma. In questo ambito il marchio e nome sono registrati 😉 I vostri nomi dovrebbero essere in vista per una giusta pubblicità. Deve andare a voi non a McNeel.

---

<div class="post-metadata">

**Author:** ![luca.filippone](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/luca.filippone/32/16173_2.png) [@luca.filippone](https://it.discourse.mcneel.com/u/luca.filippone)\
**Post date:** [12 Ottobre 2022, 4:55am UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/80 "2022-10-12T04:55:04Z")

</div>

@RiccardoMajewski… ci devi dire qualcosa?

---

<div class="post-metadata">

**Author:** ![RiccardoMajewski](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/riccardomajewski/32/22945_2.png) [@RiccardoMajewski](https://it.discourse.mcneel.com/u/RiccardoMajewski)\
**Post date:** [12 Ottobre 2022, 11:09pm UTC](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712/81 "2022-10-12T23:09:43Z")

</div>

> [@luca.filippone](#):
>
> ci devi dire qualcosa?

…ehm…si!(?) 😅  
Sarò sincero, non ricordo cosa ci eravamo detti… ho una memoria pessima.  
In peggioramento.

* * *

Ho preparato un giochino con c#. Mi sono reso conto solo dopo che forse è diventato un po’ troppo complesso per un uso “didattico”.  
Comunque, eccolo qua:

[![](https://img.youtube.com/vi/n5zl-Vp9_lA/maxresdefault.jpg "Conway's Game of Life on c# on Grasshopper on Rhinoceros") ](https://www.youtube.com/watch?v=n5zl-Vp9_lA)

[GoL V1.00.gh](https://it.discourse.mcneel.com/uploads/short-url/6NyY97bIeTnufH5RTW7j3Krjvyt.gh) (24,0 KB)

(perdonate il tono flemmatico, una di notte, vorrei 8 ore al giorno in più…)

Se volete faccio un altro video dove vado più in dettaglio con la descrizione del codice vero e proprio…

[Pagina precedente](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712.md?page=3)

[Pagina seguente](https://it.discourse.mcneel.com/t/c-scripting-in-gh/4712.md?page=5)
