C# Scripting in Gh

Un’altro dettaglio.
Le classi e metodi esistenti nelle varie librerie si possono richiamare senza fare tutto il percorso delle sotto classi… fintanto che non c’è ambiguità!
Ad esempio, la classe Point3d, esiste solo una volta in tutte le librerie (di default) di uno script c#.
Quindi scrivere "new Point3d(" o "new Rhino.Geometry.Point3d(" è la stessa identica cosa, l’autocompletamento capisce di cosa si tratta e ti propone i vari metodi/costruttori.

Se, però, esiste un’altra classe con lo stesso nome, l’autocompletamento non capisce e cessa di funzionare. Puoi quindi scrivere il “percordo completo” della classe per risolvere.

confusion


random interpolated curve.gh (2,5 KB)

 private void RunScript(int n, ref object C, ref object P)
  {
    List<Point3d> pts = new List<Point3d>(); //Creata lista di punti vuota
    System.Random rnd = new System.Random(8); //Questo è una classe di System, di Windows. Crea numeri random. 8 è il seed
    for(int i = 0;i < n;i++){
      pts.Add(new Point3d(i, rnd.NextDouble(), 0)); //Aggiunge un nuovo punto alla lista, x pari alla iterazione del ciclo for, y random
    }
    C = Curve.CreateInterpolatedCurve(pts, 3); //Crea curva interpolata
    P = pts;
  }



Un esemptio con un metodo:


c# star.gh (3,8 KB)

Aggiungere quei commenti prima di un metodo/classe (con “///” all’inizio) permette di avere la descrizione del metodo mentre poi lo si richiama:

1 Mi Piace

chiedevo nella legalità.

Certo certo…
Era tanti per dire… il codice interno non è accessibile.
Abbiamo solo rhinocommon.
McNeel spera (giustamente) che codice dipendente dalle loro librerie, rimanga tale.
Se si potesse estrarre codice come chiedevi, si plagierebbe rhino in un attimo.

Si può, probabilmente, ma è molto difficile…

Non sono più interessato :crazy_face:

1 Mi Piace

Forse è meglio che per il futuro facciamo un copia incolla del codice e lo evidenziamo come codice appunto.

Ad esempio, il problema icona l’ho risolto così:

protected override System.Drawing.Bitmap Icon => Properties.Resources.icon24; //senza l’estensione

image

1 Mi Piace

Mah, ragazzi … non so quanti segreti ci siano effettivamente nel codice dei componenti standard di GH.
Ci saranno tanti richiami a librerie, come RhinoCommon e altre, comprese quelle relative all’SDK di GH.
Ma se non hai il codice della libreria, cosa te ne fai ? :slight_smile:
Anche di RhinoCommon d’altronde, abbiamo la api, ma non gli algoritmi dei calcoli geometrici,
e credo che non funzioni nemmeno separata da Rhino, cioe’ dalle librerie interne di Rhino.
Almeno questo e’ quello che credo di capire … poi chissa’ … :grinning_face_with_smiling_eyes:

1 Mi Piace

l’idea sarebbe (con un condizionale grande quanto una casa) di rifare il plugin AirCoDe in modo più ordinato e semplice.

infatti credo che (nel caso mi smentite) gli algoritmi sono la parte più “preziosa” dei codici
sono quelli che vengono anche cambiati col tempo migliorando le prestazioni, mi sembra di ricordare casi come: whatsapp oppure skype granparte del loro successo è stato dato proprio dalla differenza di questi.

E’ una cosa che personalmente ho sempre trovato molto molto difficile … :confused:

eeee Luca è proprio questo il bello nel scrivere codici, trovare asset migliore quindi funzionale allo scopo
quante volte ho scritto e ri-scritto un codice che falla fine fa la stessa cosa di quello precedente
ma è proprio lì la differenza nella qualità / esecuzione / rapidita / non ricorsiva / e non meno la leggibilità

un conto per fare un’azione scrivi un codice che fa vari passaggi invece di trovare appunto l’argoritmo
migliore efficiente sia dal punto di vista di step da fare ma anche fare gli step che rendono più di altri
quindi no’é solo una questione di fare meno passaggi ma si tratta di una combinazione di vari fattori
un po come in Gh dove alcuni componenti hanno quel visualizzatore di percentuale della loro resa
puoi usare diversi metodi con diversi componenti per fare la stessa cosa ma avrai una resa diversa

ma alla fine se ho capito bene vorresti scrivere lo stesso codice che si trova all’interno dei componenti
per ottenere lo stesso risultato del tuo progetto già realizzato utilizzando i vari componenti. . .

(immagino che l’intenzione è di realizzare appunto un plug-in come hai mostrato sopra)
scrivere “seriamente” codici non’é affatto facile bisogna tener conto di tante cose
Riccardo nell’altro 3d ha riportato di aver scritto codici per oltre 300 righe
io ad esempio nello script VBS più lungo che ho fatto sono quasi 450 righe
però non credo proprio di averlo scritto come Riccardo o per lo meno come si dovrebbe scrivere
essendo che non ho tenuto conto di nessun errore tranne quelli obbligatori di input da me imposti
ma se per dire un codice che ti fa un determinato calcolo dopo avergli dato tutti i dati necessari
ma il calcolo non ritorna in quel caso bisogna gestirlo prevedere tutte le possibilità anche quelle
non preventivate e scrivere codici specifici per gestire queste situazioni, e bisogna farlo per
ogni operazione, se non erro ci sono proprio persone addette nelle aziende che scrivono programmi
preposti solo a fare questo, in pratica c’é chi scrive il codice e c’é chi gestisce gli eventuali errori

Emilio ma alla fine è una console dove programmare in C# se ho capito bene, è tipo la shell
dove scrivere il codice dopo aver installato Python oppure quando si avvia Py dal CMD giusto?

avviamente che Python essendo un linguaggio interpretativo più semplice nella sintassi è nato apposta per questo, a differenza di linguaggi più a basso livello, ma lo scopo di questo 3d è proprio quello di
saltare il gradino di un linguaggio semplice da scrivere per iniziare uno più complesso ma in prospettiva con più possibilità infatti era questo lo scopo degli incoraggiamenti che mi avete dato giusto. . .

C’e’ un vecchio libro del professor Niklaus Wirth, l’autore del Pascal, che si intitola
Algoritmi + Strutture Dati = Programmi
… E se lo dice lui. :wink: :grinning_face_with_smiling_eyes:

Tra l’altro prima dimenticavo il caso forse piu’ comune di utilizzo delle librerie.
Utilizzare una libreria compilata per il tuo sistema, senza bisogno di avere anche il codice. :blush:
Suppongo che in ogni caso le librerie proprietarie di Rhino siano ben protette … :slight_smile:

Esatto. Per quello personalmente lo trovo molto piu’ comodo rispetto ad un componente GH.

Secondo me uno script in C# non e’ molto piu’ lungo di uno in Python.
Quello che conta e’ la libreria che usi.
Uno script in Python che usi RhinoCommon mediamente e’ piu’ lungo di uno che usi rhinoscriptsyntax.

1 Mi Piace

Infatti, pensando ai limiti di c# sulla protezione del codice, non c’è miglior algoritmo di offuscamento se non far scrivere il codice da @emilio:joy: :joy: :rofl:

Emì … si scherza!

2 Mi Piace

Non ho presente lo… “stile” di emilio nel programmare… (sul serio, non ho memoria…) … però la battuta m’ha spezzato! :rofl: :joy:

Hahahahaha …
Sergio mi ha fregato !
Ho appena scritto che fatico a organizzare i programmi …
:grinning_face_with_smiling_eyes:

1 Mi Piace

Allora posso levarci mano :rofl:

Parli del tuo progetto ?
Naaaaah …
Prima prova almeno a riscriverlo da capo 3 o 4 volte, dopo vedi cosa fare … :wink: :grinning_face_with_smiling_eyes:

In caso posso portare esigenze reali e condividerle con voi, insieme si impara e si implementa realmente.

Ps Emilio, non ci trovo nulla da ridere, lo trovo insensibile invece :rofl::stuck_out_tongue_winking_eye:

Dici che non c’e’ niente da ridere ma metti le faccine ROFL …
Non capisco se scherzi o sei serio. :confused: