C# Scripting in Gh

come già anticipato in precedenza apro questo 3d nella sezione Bar dove parlare condividere esempi di codici / file / link ecc sul linguaggio C# sia classico che ovviamente inerente a Rhino / Grasshopper

spero nel coninvolgimento di quanti più utenti possibili anche solo per parlarne
partendo dalle basi (basilari) ovviamente l’intento è quello di capirne un pochino
con l’aiuto di chi ha familiarità con questo linguaggio cinfido in un bel percorso :slight_smile:

SI INIZIA. . .

Perché non continuare quello già esistente?

1 Mi Piace

ciao Luca, in verità l’intendo di questo 3d mi piacerebbe che trattasse specificatamente di esempi concreti, poi certo che ci si ragiona sopra anche con discorsi estesi ma vorrei che tutto girasse intorno a codici.

grazie per essere stato il primo a partecipare spero che anche altri si accodano
proseguo anch’io facendo qualche ricerca in rete vorrei trovare dei codici
che mi permettessero di creare punti spostarli ruotarli e creare curve

a lavoro :muscle:

ciao @emilio e grazie per aver postato questa risposta

ho pensato di collegarlo a questo 3d su C# come primo esempio pratico
non poteva che inizia con il classico print di saluto in questo caso personalizzato :+1:

1 Mi Piace

Giusto.
Qualche idea su cosa provare a fare dopo ?

certo

vorrei iniziare con cose spero abbastanza semplici ma che vedo risultati pratici istantanei, anche per iniziare a prendere confidenza, per lo meno si inizia a fare cose che per chi utilizza Rhino sono comuni

Mi aggrego con piacere. Ho studiato mezzo Libro di Pelleriti per usare bene C# in GH. :slight_smile:
Sono al concetto di ereditarietà e polimorfismo. 8 capitoli massicci.

1 Mi Piace

ottimo Luca mi fa piacere più siamo è meglio :muscle:
spero che non ti butti subito su cose complicate finisce che poi sono io che mi disaggrego ahahahah

quindi se ho capito bene quello che inizialmente intendo fare: creare punti spostarli e crearci una curva
sono cose che già hai studiato e fatto proprio con C# in Gh?

Macchè, mi sono ingozzato di teoria C# generica che non ho ancora digerito.
Devo capire ad esempio, per fare una curva da punti, quale metodo usare.

ahahahah ben venuto nel club :grin: :grin:

eeee ci sono passato anch’io alla fine degli anni 90 inizio 2000, tra il passaggio da VB a VBA (Access)
mi comprai un libro di programmazione per VBA e due per VB6 “Master” compresivi CD con esempi
conclusione tranne per un paio di cose i codici di quei tre libri non li ho mai usati costo 90.000 Lire cad.

alla fine comprando dei libri basilari ed economici sia per Access che per VB6 ci ho fatto tutti gli esempi
e per VB6 trovai un libricino tascabile dove riporatava un pezzo di codice per ogni pagina utili e pratici.

Emilio nell’atro 3d ha parlato di aver ricavato il primo test dalla documentazione
sono curioso di quale documentazione parla e come trovarla per darci un’occhiata

In specifico, tipo… ?
Daje che butto su un po di codice…
A fare esempi troppo generici ho talmente poca fantasia che non riesco nemmeno a iniziare… ditemi qual’è un mini-target da raggiungere.

ahahahah sei grande Riccardo mi piace il tuo entusiasmo, non so Luca che già ha iniziato è sta a metà libro su C# personalmente al momento per il C# non ho nulla su cui lavorare. ho deciso di fare questo salto giusto un po per curiosità e anche per vedere di superare l’angoscia che ogni volta che in Gh apro C# quella scheramata iniziale con tutte quelle parentesi graffe e se clicchi su alcuni punti escono righe e righe di codice senza sapere a che servono mi ha sempre frenato nell’approfondire l’argomento.

forse con questo si può iniziare:

https://www.rhino3d.com/download/rhino/6/essential-csharp-scripting-grasshopper

nel link del food4rhino c’é un collegamento per scaricare sia la guida in pdf su C#
e un file .gh con gli esempi esposti proprio nella guida direttamente dal sito di Rhino

ho dato una prima occhiata e sembra proprio quello che stavo cercando
ho visto come spostare un punto, cambiargli le coordinate interagendo con Gh
di codici ne ho visto solo un paio giusto una o due righe come mi interessava

faccio giusto un paragone, spiegando anche del perché non mi sono mai avvicinato a questo linguaggio

nel link preceduto sopra viene riportato il codice per creare una linea,
onestamente non so voi, ma mi sembra un po eccessiva come sintassi
ora per carità, io ho la pecca di minimizzare troppo, ma nell’esempio sopra
veramente lo vedo esageratamente troppo, tutto quel codice per una linea. . .

sarà solo una mia impressione, ma spero che la guida linkata sia prevalentemente come gli esempi visti.

Considera che C# in generale non è un linguaggio di scripting interpretato, ma un linguaggio tipizzato e compilato e puoi fare un infinità di cose.
Non è affatto semplice inizialmente, ma pian piano lo diventa.

Io al momento ho compilato un plugin gha con il componente che crea la curva da punti dati e sono felice come un bambino :crazy_face::grin:

Posso condividerlo e si può aggiungere come tutti i Plug.
Non riesco a capire come mettere la bitmap icona del componente.
@Riccardo sai per caso come si fa?

ps questa non sono riuscito ad implementarla:
https://developer.rhino3d.com/api/RhinoCommon/html/M_Rhino_Geometry_Curve_CreateInterpolatedCurve.htm

public static Curve CreateInterpolatedCurve(
	IEnumerable<Point3d> points,
	int degree
)

La curva Nurbs si invece :upside_down_face: :slightly_smiling_face::

PS2
e una micro evoluzione

PS3 crea,se possibile, una curva di Bezier
2022-10-02_10-11-17

2 Mi Piace

Che sappiate, esiste un modo per leggere il codice di un componente standard?

AGGIUNGERE UN ICONA AL COMPONENTE

Su quel link si usa in tutti e 3 i linguaggi il metodo Rhino.Input.Custom.GetPoint() che permette e richiede un po di righe per il controllo dei filtri e tutte le altre opzioni.
(Su rhinoscript si fa in una riga e fine, volendo.)
Poi c’è il controllo .IsTiny , che controlla che i due punti non siano troppo vicini tra loro.
In generale, è un codice esempio di un caso molto specifico, che richiede il prompt all’user di selezionare sulla viewport di rhino i punti inizio-fine per fare una linea.
(I 3 esempi per i 3 linguaggi sono simili, in lunghezza…)

Se il tuo obbiettivo è creare una linea, basta una riga di codice su uno script di c#:
A = new Line(Point3d.Origin, new Point3d(10, 10, 0));


Grande! … in pratica sei già allo step dopo. Io per ora ho sempre fatto solo script dentro grasshopper, di plugin non so niente. Mi limito allo scripting…


Per i plugin, non so.
Per “barare” e farlo sui script c# di grasshopper, io salvavo il file in ghx , editavo con notepad++ e inserivo un override nel blocco xml dello script c# in specifico, tipo:

<item name="IconOverride" type_name="gh_drawing_bitmap" type_code="37">
    <bitmap length="326">iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAAOhJREFUSEvVjjEKwkAQRXMXOxFBTyBYCzZiYSlYCXoGy1hZi3WwEwsLLxCwsbSwCHgBS7FJZFj3M7vZMRaJsg8euxvm/0nwK7L3WRn2AnpzCdeMhs/ac8AOaPTdDvPvX+EKE3aRdBbCB+nOJYpOgu78ncMV0khF9qwrC6QQ8amI7tr/wv+kDHNk010dzpMOXKczuE9XUJqnLlVpIgb8WdCOhrB3CeHofIXLYwqleepSlSZiwJ8Fg24EN/0Y3sI7fGxPUJqnLlVpIgb8WRC1xvDQrMFk0YDPZAKleepSlSZiwJ8FJVs1QfACMv2oTdEgsBIAAAAASUVORK5CYII=</bitmap>
</item>

Risultato:
2022-10-02 12_05_57-Window
… ma sono tutti override di un normale c# (se gli fai doppio click lo editi come al solito)… roba che rischia di saltare, forse…


Intendi il guid? Component guid o instance guid?

1 Mi Piace

Tutto il codice C# incluso.

Mi piace impacchettare il codice, tanto la logica e il codice interno non cambia, ma se voglio ho un pacchetto gha condivisibile e non apribile.
Vorrei creare un pacchetto aeronautico, ma ci vuol tempo, magari insieme si impara e riesco.

Per l icona ho scritto sul forum inglese sperando che non mi prendano a parole, li vedo sensibili :grin:

Ah, intendi il codice proprio che “fa funzionare” un componente standard di grasshopper… ?
Non credo sia possibile, o almeno, siamo a livelli di hacking e/o datamining.
McNeel ci da accesso a rhinocommon, questo che chiedi e “oltre”…
Spero di non aver capito male…

Documentazione di Mono
https://www.mono-project.com/docs/

Nello specifico:
https://www.mono-project.com/docs/getting-started/mono-basics/

Se guardi la versione Python vedi che e’ molto simile.
Quello che ‘allunga’ lo script e’ l’utilizzo di RhinoCommon, qualunque linguaggio tu stia usando.
Se vuoi scrivere poco, c’e’ rhinoscriptsyntax che e’ fatto apposta, usa quello. :slight_smile:

EDIT:

Altra cosa: l’esempio di cui parli non e’ per GH, quindi comprende anche l’input dei punti da usare per la linea.
In GH l’input arriva dai parametri del componente, quindi non e’ da scrivere.


Nel grosso dei casi ti basta stare dentro le graffe di “RunScript”.

Ecco un breve esempio dove si usa un oggetto che risiede al di fuori di “RunScript”:
counter
Codice:

  private void RunScript(bool Click, bool Reset, ref object Counter)
  {
    if(Reset) n = 0;
    if(Click) n = n + 1; //n++; avrebbe avuto lo stesso risultato
    Counter = n;
  }

  // <Custom additional code> 
  int n;
  // </Custom additional code> 

c# 3 sezioni e counter.gh (5,5 KB)