C# for Rhino

per Sergio che mi ha indicato il link con i 2 passaggi (entrambi eseguiti senza problemi) e
anche per chi vorrà contribuire/partecipare a questo 3d io lo faccio con lo spirito della scoperta

inizio col dire che dopo aver eseguito l’installazione di VStudio e RCommon
ho avviato un nuovo progetto come indicato dalla guida e mi sono ritrovato con
questa schermata dove selezionando Command.cs mi ritrovo con questo codice

avvio l’esecuzione con la freccia Verde mi si apre Rhino ma non si nota nessuna operazione, ora nel codice vedo richiamati punti/linee ecc quindi mi aspettavo che comparisse qualche oggetto, arrivati a questo punto si deve fare qualche altra operazione per eseguire il codice oppure è normale che non succeda nulla?

Proverei a scrivere command … (o come hai chiamato il comando).

ha fatto tutto in automatico il progetto si chiama: MyRhinoPlugin1

dove dovrei scrivere command?

ah forse ho capito, intendi nella barra di comando in Rhino;
ho provato a scrivere nella barra di comando di Rhino
ma in qualsiasi modo mi tornava comando sconosciuto.

ok per adesso chiudo “che pure na certa. . .”
domani a mente fresca ci ri-provo :+1:

ps pensiero prima di coricarmi;
per caso mica dovrei creare un file RHP e quindi importarlo prima in Rhino?
(ma non credo, anche perché se si debbono fare varie prove ogni volta fare la procedura sarebbe dura)

S tu avessi letto tutta la guida non saresti bloccato a questo punto! Basta leggere
dal punto 3 del seguente link.

Se non manifesti un minimo di buona volontà a leggere e studiare trovo inopportuno
sprecare del tempo a risponderti.

hai ragione Sergio, se non l’ho fatto è semplicemente perché dopo l’ultima volta dove sono stato più di una settimana a seguire i passaggi spiegati e aver installato e re-installato oltre 30GB di software di VStudio rimanendo oltre che bloccato anche con ritorni di errori vari questa volta non ho voluto prendere iniziativa,
ma seguire solo i suggerimenti dati essendo che da come avevo compreso questa procedura l’avevi fatta.

mi spiace che hai pensato questo, ma credo che in tutto questo tempo che sono sul forum
credo di aver dimostrato più volte di non essere un utente che gli piace la soluzione pronta anzi,
se mai l’incontrario, voglio sempre capire per non dover poi successivamente chiedere di nuovo aiuto.

come si vede dalla guida che stavo seguendo mi sottolineava l’obbligo di installare VS-SDK e anche controllare altre cose da installare che in questo caso invece non ho fatto, ho semplicemente seguito e installato ciò che diceva i link che hai postato. (magari il problema e ché nel mio link si parla di VS-2019)

comunque giusto per informazione andando a cercare con il lanternino questo file RHP
essendo che non si trovava nella posizione che viene indicata ma da tutt’altra parte
sono riuscito ad eseguire lo script e posso dire che funziona perfettamente.
quindi grazie per il tuo aiuto senza non c’é l’avrei fatta :+1:

ma alla fine anche con la stanchezza che si era fatto tardi, avevo intuito qual’era la procedura da fare. . .
e ovviamente confermo che come interazione tra VS e Rh è un po contorta la procedura :woozy_face:

barra

altra cosa che mi aveva sviato dal capirlo prima il funzionamento, è questa barra che compare dopo aver cliccato sul pulsante esegui di VS che poi si avvia Rh ritrovandomela in primo piano, tutta questa
procedura mi aveva fatto pensare che il codice venisse passato in automatico.

vabbè spero che non mi lasciate da solo adesso con le mie mille domande e comunque grazie ancora :pray:

avrei due domande:

  1. il codice nella foto di tratta di C/C++ o C#?

  2. come mai quando clicco su nuovo progetto mi compare in automatico questo codice?
    in teoria non dovrebbe essere vuoto? quindi dovrei cancellarlo e sostituirlo con un proprio codice?

grazie in anticipo.

Immagino sia c# (la parola chiave using non l’ho mai vista) . Inoltre su esplora soluzioni noterai l’estensione dei file .cs.
Si, sostituisci con il tuo codice. Fai attenzione a cosa cancelli.

1 Mi Piace

questa è la parte iniziale del codice, dove si vede che using viene utilizzato all’inizio come anche in Gh
using dove indica la freccia quello non l’ho capito come mai viene utilizzato per indicare un nuovo punto?

namespace dovrebbe essere il nome del progetto
mentre public class la classe che conterrebbe il codice
con i vari gruppi di codici evidenziati (ellisse e sottolineati)

ps ma per un nuovo codice partendo da zero, dovrei cancellare tutto il contenuto della classe?

Ti rispondo sommariamente.
Il progetto che hai creato è un plugin con nome MyRhinoPlugin1.
All’interno del plugin puoi inserire più comandi che saranno definiti all’interno dello
namespace (spazio dei nomi) del plugin (riga 9).
Su namespace ci sarebbe da scrivere un capitolo …
Ogni nuovo comando è una classe derivata dalla classe command di rhino (riga 11).
Dalla riga 13 alla riga 22 si garantisce che il nuovo comando venga invocato
in modo univoco, una sola istanza (vedi commenti: … only one instance …).
Il codice che ti interessa, per ora, inizia dalla riga 26 dove si riscrive il metodo
RunComand della classe command di rhino (override) che deve tassativamente
restituire Result il cui valore indica in che modo è stato concluso il comando.

Il tuo codice sostituirà tutto quello inserito all’interno del metodo RunCommand infatti alla
riga 28 c’è un commento che riporta: TODO: start here modifying the …

Immagino che l’istruzione using serva ad indicare al compilatore quali librerie utilizzare
(all’inizio di ogni file). La stessa istruzione using evidenziata da te nella riga 33 con la freccia
dovrebbe definire un namespace privato che devi interpretare, in modo molto banale:
usando la nuova istanza della classe GetPoint chiamata getPointAction esegui le seguenti
istruzioni contenute tra { }. Tutte le variabili dichiarate al suo interno sono valide solo per il
codice contenuto tra le parentesi graffe di using. Infatti, se fai caso, la variabile pt0 viene
definita alla riga 32, prima di using in quanto la variabile pt0 servirà alla fine del comando per
aggiungere il nuovo oggetto geometrico linea (doc.Objects.AddLine(pt0,pt1)).
Se fai caso, alla riga 45 (immagine tua precedente), dove si determina il punto pt1, si invoca
nuovamente nuova istanza della classe GetPoint chiamata nuovamente getPointAction (!).
Il compilatore non restituisce un errore: perché? Perché getPointAction per ricavare il
punto pt1 fa parte di uno namespace distinto dal namespace per ricavare il punto pt0.
Aggiungo che, al 99%, se cerchi di usare getPointAction al di fuori di using { … } il
compilatore ti segnalerà un errore.

Per completare ti evidenzio l’ultima riga (obbligatoria!): return Result.Succes; e le
righe 39 e 54 dove si restituisce il getPointAction.CommandResult() terminando il
comando (in quanto l’utente non avrà cliccato un punto ma avrà annullato il comando
o altro) che è un metodo comodo e semplice senza dover decidere quale valore
di dovrà restituire il comando (Success, Cancel, Nothing …).

Ho cercato di darti qualche info in più. Nella guida online di rhino ci sono molti
esempi che dovrai studiare senza dare nulla per scontato, anche alla riga di codice
più semplice. Rimane primario conoscere bene il linguaggio C# altrimenti ti
perderai al primo errore del compilatore. Pertanto ti rinnovo il consiglio di seguire
una guida seria di c# da zero ed in particolare quelle di fcamuso su youtube che
sono ben fatte.

1 Mi Piace

Per aggiungere nuovi comandi al plugin di progetto:

e seguire le istruzioni.
Si può fare anche a mano aggiungendo al progetto una classe ma poi si dovrebbe modificare il
progetto … un rompicapo. Questo tool fa tutto con pochi click: McNeel ha reso tutto semplice.

1 Mi Piace

grazie Sergio per la spiegazione dettagliata e consigli dati,
cercherò di approfondire il discorso seguendo i tutorial :+1:

se nel menù File clicco su Nuovo e poi scelgo File…
mi compare la schermata in primo piano “Nuovo file” (indicato dalla freccia)
se scelgo la riga “Classe C#” (indicata nell’ellisse)
mi compare la scheramata in secondo piano “Classe1.cs” (indicata nel rettangolo)

credi che andrebbe bene per eseguire il codice Rhino questa procedura senza creare un intero progetto?
perché ho già provato ma credo che qualcosa non sia andata come dovrebbe, di sicuro qualche errore ho commesso, però non vorrei percorrere una strada senza uscita. ps sembra la stessa schermata C# Gh

Sergio ti ha gia’ spiegato come funziona.

Posso aggiungere che in questo caso ‘using’ in C# e’ simile al ‘with’ di Python.
Cercando “using statement C#” trovi altre info.
Ad esempio:

Avevo iniziato anche io a mettere mano ai Plugin di Grasshopper e a seguire le loro dispense, poi però ho capito che non era il modo giusto per acquisire una solida competenza e ho iniziato prima con i video del prof Camuso, poi non riuscivo a seguire bene e ho acquistato il volume di Pelleriti, Guida C#10 e sono circa a 600 di mille pagine, sono ai delegate ed eventi.

È un investimento di tempo che mi tornerà utile sia per Rhino sia per tante altre cose.

C’è un detto che dice “chi vuole accorciare allunga”.

Fermarmi per fare il punto e iniziare un cammino lento e costante mi ha portato a fare strada più velocemente di chi procede a tentoni e trova quasi per caso la soluzione.
Prima si è lenti più degli altri, poi si raggiungono o si superano. :blush:
Mia esperienza personale.

1 Mi Piace

No,
Progetto - Aggiungi classe (o qualcosa di simile)
e dovresti trovare il tipo di classe corretta tipo Command Rhinoceros …

Adesso da qui in poi devi studiare tutta la guida online:

e tenere sempre aperta la guida dell’API di rhinocommon dove troverai tutte le
info sulle librerie di rhino che dichiari e usi + ng dichiarate all’inizio del codice.

https://developer.rhino3d.com/api/RhinoCommon/html/R_Project_RhinoCommon.htm

Ciao Luca

( Premesso che ritengo giusto che ognuno studi nel modo che preferisce. :slight_smile: )
OK, ma a me sembra che ci sia anche una … terza via. :wink:
Cioe’ imparare le basi per essere in grado di sperimentare/provare e poi cercare informazioni, volta per volta, quando serve imparare qualcosa in piu’.
Concordo che cercare di far funzionare un programma provando a caso abbia poco senso.
Piuttosto fare dei piccoli test mirati per capire come funziona una certa cosa, se restano dei dubbi.

Comunque …
Ragazzi, i linguaggi moderni stanno diventando delle cose enormi.
Una volta erano mooooolto piu’ semplici …

:wink: :grinning_face_with_smiling_eyes:

Esattamente quello che intendevo, mi riferivo alle basi, perché poi si impara facendo, ma almeno quelle devi averle e per averle devi fermarti e studiare un po’.

1 Mi Piace

sono daccordissimo sia con Sergio che Luca, ma per esperienza personale non credo sia il percorso che faccia per me, le conoscenze didattiche non mi permettono di seguire libri impegnativi da solo:

come spiegato altre volte, nel 2000 presi 3 di questi libri 2 per VB e 1 per Access tutti Master
e ti dico che si possono contare sulle dita di una mano le pagini che mi sono servite per ogni libro. . .

Emilio ci hai azzeccato in pieno, appena vedo queste tipo di schermate iniziale
dove ci sono oltre 20 righe di sole righe per iniziare un solo semplice codice
mi viene l’angoscia, ricordo un tempo su un floppy ci stava il Cobol
ps con una schermata vuota e colore verde e blu ahahahah

Parli, prendendo ad esempio C#, dei vari using all’inizio,
del namespace e delle classi ?

io l’avevo associato in Python a from/import

esatto parlo di using namespace e public classi ecc.
sarà per il limite minimo di neuroni in mio possesso, per quanto mi riguarda sono propenso alla linea di iniziare con una pagina vuota, richiamo le poche librerire (come in Python) che mi servono per ciò
che debbo fare e poi man mano scrivo il codice ed eseguendolo controllo il corretto funzionamento,
grosso modo è questo tipo di approccio che penso sia più adatto per me.

si posso anche prendere il pezzo di codice lo incollo nella parte corretta sostituendolo con ciò che non mi serve ed alla fine funziona. ma comunque resta il fatto che non si sa a cosa serve tutta la parte che precede ciò che si è incollato, e quindi se nasce un problema non si sa nemmeno dove mettere le mani.
ovviamente poi c’é il rovescio della medaglia, e cioè, per sapere a cosa servono e come utilizzare tutte
quelle righe di codice bisogna prima studiarle e qui mi riallaccio al discorso precedente sull’istruzione.

ps la domanda fondamente che mi faccio, all’80% quello che io faccio con gli script è creare/modificare punti curve e poche altre cose simili, alla fine è necessario imparare tutto un linguaggio come il C#
credo che ci sono studenti che dopo tanti anni con la guida di un insegnante chissà cosa imaparano. . .
nel senso il C# é vasto come linguaggio bisogna conoscere prima bene anche l’informatica e non solo.

edit:
anche se so che quando si esegue uno script con VBS-Py poi c’é una elaborazione che fa Rhino
che non si vede, come anche quando si compila un file exe il codice è una cosa
poi il compilatore aggiunge altra roba che gli serve per poter farlo eseguire.

:brain: :innocent: :face_with_head_bandage: :face_with_thermometer: :exploding_head: :face_with_spiral_eyes: :woozy_face: :hot_face: ------------ :clap: :clap: :clap: :clap: :clap: :clap:

2 Mi Piace