ottimo Luca mi fa piacere più siamo è meglio
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?
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.
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
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:
public static Curve CreateInterpolatedCurve(
IEnumerable<Point3d> points,
int degree
)
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:
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
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…
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.
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”:
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>
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.
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;
}
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.
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 ?
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’ …