Gli Script

Cosa sono gli Script , a cosa servono , come si creano , dove si usano ?

Ciao Grazie

Ciao

Partirei dalla documentazione McNeel, parla anche delle macro, che a volte sono sufficienti, senza bisogno di uno script (poi ovviamente ognuno usa quello che vuole :grinning:)

https://docs.mcneel.com/rhino/8/help/it-it/index.htm#information/rhinoscripting.htm?Highlight=runpythonscript

Linko anche la stessa pagina in inglese perche’ mi sembra piu’ interessante vedere le macro con i comandi originali.
Sono quelle che trovi nei pulsanti delle toolbar standard.

https://docs.mcneel.com/rhino/8/help/en-us/index.htm#information/rhinoscripting.htm?Highlight=runpythonscript

Questa credo sia la fonte principale per la documentazione dell’automazione per Rhino:

… Oltre a quanto c’e’ sulle pagine McNeel di GitHub.

EDIT:
In fondo alla pagina c’e’ la possibilita’ di cambiare lingua.
Io se clicco su Italiano vengo spedito su rhino3d.com (… in italiano :wink: ),
ma da li’ non so come andare a Rhino Developer (in italiano).
Forse tu ci riesci. :slight_smile:
/EDIT

Prima risposta breve:
Se non sbaglio avevi citato AutoLISP.
Grosso modo stessa cosa. :wink:
Ma se non erro con ACad basta aprire una parentesi e puoi scrivere istruzioni Lisp.
Su Rhino e’ un po’ piu’ complicato: bisogna usare dei comandi appositi.
Ne riparliamo … :slight_smile:

1 Mi Piace

Grazie , tanta roba per ora ho scaricaroEssential Matematics 4 edizione in Italiano e l ho stampato cosi ci facciamo una base di documentazione da leggere , con calma , molta calma :sweat_smile::sweat_smile::sweat_smile:.

1 Mi Piace

Non so nemmeno le Macro cosa siano , forse richiami in automatico dei comandi …:disappointed_relieved::pensive:

Si Ho fatto anni fa un programma in Autolisp che si carica in ambiente Autocad .

In pratica dovevo inseire i due diametri a richiesta del codice e lunghezza e poi mi disegnava diciamo lo sviluppo del pezzo una sorta di Sviluppasrf mi sembra il comando ma che funziona solo su figura non tagliata mi sembra in Rhino.

In pratica una funzione che all epoca non implementava Autocad 10 , per iniziare sarebbe gia buono fargli disegnare una polilinea con relativa inclinazione e lunghezza…poi non so se sia meglio una Macro , Script , o GH , argomenti sicuramenti di cui serve anche un buona teoria .

Ciao Grazie

1 Mi Piace

Come sai per Rhino una polilinea e’ una curva composta da una serie di segmenti retti.
Intendi inclinazione e lunghezza di ognuno dei segmenti ?

1 Mi Piace

Si esatto esempio tipo Pollinea @100<0 poi @40<10 ,@50<10.

Ciao Grazie

1 Mi Piace

Mi sembra una buona idea per iniziare. :slight_smile:

… Ma bisogna prima scegliere che tipo di ‘script’ utilizzare.
Credo che per Rhino 8 ci siano, oltre alle macro, 4 diverse possibilita’ per gli script,
piu’ Grasshopper 1 & Grasshopper 2 …

Direi l’imbarazzo della scelta …
:wink:

1 Mi Piace

Purtroppo non sono in grado di dirti quale sia la scelta migliore , scegli pure tu , i dati li ho in excel ma li possiamo scrivere manualmente o da un csv non so come funzionano.

Ciao Grazie

Parlavo di script per Rhino in generale.

Di cosa preferisci imparare, diciamo cosi’.

( A parte le macro, che sono semplicemente un testo che riporta il comando, comprese eventuali opzioni ecc. Queste conviene impararle almeno un pochino, anche per capire cosa fanno alcuni pulsanti standard )

Per gli script ci sono:

RhinoScript (cosi’ chiamato). I ‘vecchi’ script introdotti in Rhino 2 e disponibili tuttora.
Il linguaggio e’ il VBScript di Microsoft.
A parte il linguaggio, la libreria di funzioni per interfacciarsi con Rhino e’ abbastanza semplice da utilizzare.
Ma ha dei limiti: lavora solo sugli oggetti presenti nel documento 3dm, cioe’ quelli che vedi a video, non su geometrie ‘astratte’, salvo cose molto semplici come i punti e poco piu’
In generale e’ piuttosto limitata … non puoi farci ‘troppe’ cose.

Poi ci sono gli script che utilizzano Python:
Fino a Rhino 7 c’era un solo ‘tipo’ di script con Python.
Rhino 8 ne aggiunge un secondo.

Il primo tipo utilizza IronPython, credo versione 2.7.
Non sono un esperto, ma grosso modo e’ un interprete Python scritto per l’ambiente dotNet di Microsoft (che e’ piu’ o meno una costante per McNeel, almeno finora).
IronPython, oltre ad alcune librerie tradizionali di Python, puo’ utilizzare le librerie di dotNet, quindi in pratica del C#.
Ovviamente utilizzare librerie C# con Python crea qualche (piu’ o meno) piccolo problema.

Per interagire con Rhino, da IronPython abbiamo due librerie: due possibilita’ che non si escludono a vicenda, anzi e’ comune utilizzare entrambe in uno script:

La prima rhinoscriptsyntax e’ progettata per replicare piuttosto fedelmente RhinoScript, ed e’ scritta in Python.
Questo e’ certo una comodita’ per chi conosca gia’ RhinoScript o voglia utilizzare entrambi i linguaggi, o ancora non abbia bisogno di una libreria piu’ ‘potente’, diciamo.

La seconda libreria e’ RhinoCommon, che e’ una libreria scritta in e per C# e puo’ essere usata anche per i plug-in.
E’ la libreria principale per lavorare con Rhino, almeno in ambiente dotNet, a occhio direi che contiene centinaia di classi e consente di fare molte cose con Rhino, a livello di geometria, di oggetti nel files 3dm, di livelli, blocchi, viste. ecc. ecc.

(Anche rhinoscriptsyntax e quindi RhinoScript permettono di usare livelli, viste ecc, ma fanno meno cose)

Avendo parlato di RhinoCommon, aggiungo che rhinoscriptsyntax e’ scritta in Python, come detto sopra, utilizzando RhinoCommon come libreria per collegarsi con Rhino.

Qui si ferma la mia esperienza diretta, tranne qualche piccolo script per Grasshopper … vediamo dopo.

Rhino 8 pero’ ha introdotto la possibilita’ di utilizzare script in CPython, non ricordo la versione, scusa, ma credo forse 3.9 o 3.10.
CPython e’ il tradizionale interprete Python, diciamo quello ‘ufficiale’.
Dovendo utilizzarlo per Rhino, serve il modo per richiamare RhinoCommon (bisogna usare quella, non ci sono librerie native in Python.per questo).
Per questo CPython usa una libreria per Python chiamata se non sbaglio Python.NET.
Per quello che so gli script in CPython per Rhino sono ancora piuttosto ‘acerbi’.
Credo comunque che l’obiettivo sia di non avere differenze, o di averne poche, rispetto agli script IronPython.

Parallelamente a CPython, Rhino 8 ha introdotto anche gli script in C#.
E, dovendo comunque utilizzare una libreria C#, cioe’ RhinoCommon, mi sembra una scelta logica ( e personalmente anche un po’ tardiva … :smile:).

Per informazioni sugli script in CPython e in C# purtroppo personalmente non so dirti niente.
Nel caso serve che intervengano altri …

Parlando di script, un breve cenno agli script in Grasshopper:
Da parecchio tempo Grasshopper ha avuto la possibilita’ di utilizzare script in VB.net e in C#, tramite appositi componenti.
Piu’ recentemente sono arrivati anche gli script in IronPython, sempre col loro bel componente.

Credo, ma non sono sicuro, che in Rhino 8 stiano lavorando anche per gli script in CPython, non so se per GH1 per GH2 …
Credo sia chiaro che di questo so molto poco … sorry. :blush:

Scusa, ma … no. :wink:
Per poterti scrivere i tuoi script dovrai saper usare (almeno un po’) un linguaggio e una libreria.
Potrebbe richiedere un certo impegno in tempo e fatica.

Io ho solo cercato di fare un rapido riassunto della situazione, poi certo chiedi per quello che non e’ chiaro (e sara’ parecchio :blush: ).

Ma credo che debba decidere tu se e come iniziare a imparare (anche :wink: ) a scriverti gli script.
( Purtroppo, come abbiamo gia’ detto, il Lisp e’ fuori questione :confused: )

Ciao.

1 Mi Piace

Concordo penso che sia la scelta giusta apprendere un pò anche le Macro grazie.

Ottimo mi sa che probabile sia lo stesso linguaggio che ho usato per gli script con Mach3 (Cypress) per il taglio Plasma sensore Omnico etc…, ho un bel manuale stampato .

Il Dotnet se ricordo bene è nato dopo il VB6 ci ho fatto un po di programmazione con il Vb6 ma il Dotnet mai usato.

Ovviamente questo è un argomento da apprendere con dedizione e studio , presumo vada compreso bene anceh il concetto geometrico di costruzione Curve etcc…

Sicuramente non sara una passeggiata , quanto meno una base se è fattibile , nel caso pongo un esempio se si vuole affrontare l esempio .

Riassunto ovviamente complesso come gia avevo ho intuito infatti ho guardato qualche tutorial tempo fa di Gh ma non ho mai provato a farci nulla.

Posso dirti cosa mi piacerebbe ottenere ad esempio ma dirti quale sia fra le 4 strade quale sia piu idonea per diciamo il mio obbiettivo , mi dovrai consigliare tu EMilio , o qualcuno che sia preparato.
Indubbiamente se si parla di Python Script si parla di codice di programmazione per cui serve documentarsi e studiarci sicuramente.

Grazie Emilio delle risposte e dell aiuto costante.

aggiungo solo una cosa che non mi sembra sia stata menzionata:

i codici fatti con VBSscript se ricordo, possono essere eseguiti solo su piattaforma Windows
mentre con Python utilizzando la libreria rhinoscriptsyntax (che in pratica ti permette di scrivere
lo stesso codice che scriveresti in VBSscript) permettendoti di eseguire i codici anche sui Mac.

1 Mi Piace

Solo una parola: C#.

2 Mi Piace

confermo, ma come ha sottolineato Emilio, solo nel caso abbia molto molto tempo da dedicare.
(C# per iniziare da zero è il più tosto di tutti, poi dopo aver acquisiti i concetti le cose cambiano)

ps io non escluderei una piccola sbirciatina con Gh che eviterebbe di dover scrivere codici.

2 Mi Piace

Ciao , uso la piattaforma WIn10 .
Grazie

Ciao , il tempo è sempre una rincorsa , anche se il codice è molto intrigante proprio per la sua vasta complessità ma chiaramente penso serva molto tempo e pure predisposizione per avere un certo risultato , non ho delle grandi basi in programmazione , ho programmato moooolto tempo fa con Turbo Pascal 5 :grimacing: poi Vb6 che gia era ad oggetti…

Siete piu esperti di mè per cui se secondo voi è la strada piu semplice nella sua complessità , allora ok per GH . :star_struck: :partying_face:

Ciao Grazie

si questo lo avevo intuito, era per metterti a conoscenza di questo, essendo che potrebbe capitare di voler cambiare da Win a Mac e ti ritrovi con codici non eseguibili oppure di dover utilizzare pc di qualche azienda o voler passare gli script a colleghi che potrebbero utilizzare i Mac

non saprei dirti se sia la più semplice (in un certo senso si)
in pratica ogni componente contiene già del codice all’interno
devi collegare tramite i fili (spaghetti) i vari componenti
(di sicuro è il più veloce per capire se fa a caso tuo)

il ragionamento che devi fare inizialmente è sempre quello, devi sapere cosa fare e come farlo,
come costruisci lo script scrivendo il codice, in Gh crei una definizione collegando i componenti.

ps anch’io molto (molto) tempo fa ho fatto qualcosina con VB6 ma non ricordo che fosse OOP

Bene, un buon punto di partenza. :slight_smile:

Si’, certo, in fondo e’ solo un altro modo di usare il CAD.
( Ci sono dei CAD che puoi usare solo in questo modo )

Non posso consigliarti sulle cose che non conosco, come dicevo ieri …
Ma riguardo a quelle che un po’ conosco …

Io vedrei 3 aspetti:

  1. Il linguaggio
  2. la libreria per interagire con Rhino
  3. sviluppi futuri

Prima opzione:
Visto che conosci VBScript, mi sembra piu’ semplice usare quello.
Quindi liberia/ambiente RhinoScript, che e’ abbastanza semplice da imparare e utilizzare.
Lo svantaggio e’ il punto 3.
RhinoScript e’ semplice, ma fa cose semplici, diciamo cosi’.
E non si puo’ passare ad altre librerie, salire di livello, per cosi’ dire.
Rimani nell’ambiente RhinoScript con i suoi limiti.
( Oltre al fatto che non funziona su Mac, come ha detto Salvio … casomai servisse)

Seconda opzione:
IronPython. Lo svantaggio, se non lo hai mai usato, e’ che bisogna imparare un po’ il linguaggio.
Non so quanto possa servire l’esperienza con Pascal e VB6, credo siano abbastanza diversi, salvo ovviamente i concetto di base della programmazione, diciamo, procedurale: variabili, cicli, condizioni, subroutine … i salti credo non siano piu’ di moda. :wink: .
Python ha delle affinita’ con C e linguaggi derivati, almeno parzialmente come sintassi.
In comune col Lisp c’e’ che si usano parecchio le liste, anche se per Python non sono l’unica struttura dati. Sintassi e comandi per usarle sono diversi, ma i concetti di base restano quelli, anche se Python mostra una certa ‘antipatia’ (non so perche’) per la programmazione funzionale.
Per il punto 2, siamo alla pari con RhinoScript, perche’ (almeno in un primo tempo) puoi usare rhinoscriptsyntax che e’ molto simile a RhinoScript ( … lo dice anche il nome :wink: ).
Il punto 3 e’ ancora favorevole, perche’ se e quando servisse puoi iniziare a usare anche RhinoCommon e quindi potrai fare cose piu’ complesse.

Bene. Conoscere gli oggetti serve senz’altro.
Non troppo per RhinoScript e rhinoscriptsyntax.
Molto di piu’ per RhinoCommon.

Quanto a GH:
Personalmente trovo (trovavo) comodo usare gli script facendomi le mie toolbar con relativi pulsanti.
Usare GH lo trovo (idem) molto piu’ scomodo.
Salvo casi in cui sia importante l’utilizzo interattivo di GH, ad esempio con gli Slider.
Allora per questo e’ molto piu’ semplice usare GH.
Per cui alla fine dipende molto dal tipo di operazioni che vuoi automatizzare: per certe cose e’ piu’ veloce usare gli script, per altre GH.
Ho letto che ultimamente McNeel sta facendo qualcosa per agevolare l’utilizzo di definizioni GH direttamente da Rhino, come fossero degli script.
Ma non conosco l’argomento, quindi per questo temo serva l’intervento di chi ne sa piu’ di me.

Come ho gia’ detto, anche sugli script in CPython e C# purtroppo non sono in grado di dire niente, almeo a livello pratico.

Ciao.

1 Mi Piace

Va Bene Emilio come dicevo sono in griglia e devo accendere il motore , la strada io non la conosco la conosci meglio tu visto che mi guidi per quello che puoi e che vuoi , al limite posso dirti cosa mi piacerebbe automatizzare o realizzare .
Ciao e grazie

Certo e’ utile saperlo.
Anche per il futuro, come accennavo.

Dicci cosa vuoi fare e cerchiamo di capire se basta RhinoScript o se e’ meglio
provare con Python.

Ciao

1 Mi Piace

Un esempio di punto d arrivo dello script o altro potrebbe essere una serie di tronchi di cono con relativa inclinazione , ( l esempio che ho citato pochi post fa della polinea che ti dicevo per poi procedere tipo con un cerchio Perp all inizio e fine della curva e creare le due basi del tronco di cono ) per poi ottenere tipo una tubatura con relativa inclinazione di piegatura inserita manualmente o recuperata esternamente da relativo file .
Questo è un esempio di ricostruzione geometrica tronco di cono , ma sicuramente ci puo essere un altro metodo tipo disegnare il cono e troncarlo …
Se non mi sono spiegato bene dimmelo che rimodulo la descrizione piu accuratamente
Ciao Grazie