Gli Script

Ho dato un occhiata in tarda nottata ieri ero Ko , devo dire veramente capolavoro , meraviglioso la costruzione in tempo reale , tutto in ciclo for automatico che non è poco , notevole veramente complimenti Emilio , molte grazie della dimostrazione costruttiva e utile per chi necessita di capire il meccanismo script.
Oggi gli do un occhio e cerco di capire bene perchè ieri ho fatto il furbo ,ho frettolossamente inserito il codice e guardato il risultato come un bambino curioso :star_struck: :rofl: :rofl: risultato bellissimo simile al mio vecchio lisp anni 80 , ma molto superiore per concetto matematico .

Domande ne avrei gia ora , ma prima rivedo tutto bene , ovviamente il codice segue le regole anche di disegno Rhino e va capito bene .

Ciao Grazie
Grande Emilio :heart_eyes:

Ciao Stavo rivedendo dall inzio il codice e chiedo 2 info …
Sono corretti i commenti ?
for line in lines:
# Creazione lista con le stringhe ottenute scomponendo stringa originale wrd
wrd = line.strip().split( ‘,’ )
# lista di numeri ottenuti floating-point
num = [ float( wr ) for wr in wrd ]
# prendo valore primo 0 dalla lista , diametro 1 e trovo raggio
rad.append( num[ 0 ] / 2 )
# prendo valore 1 dalla lista ,lunghezza
lng.append( num[ 2 ] )
# prendo il valore quattro 3 dalla lista , angolo piega
deg.append( num[ 3 ] )
# prendo valore secondo 1 dalla lista ,diametro 2 e trovo raggio

Le liste sono creati come contenitori di dati recuperati dal file txt e rappresentano i valori assegnati a posizione viene incrementato fino a tutit i dati ?
Viene creata 1 sola lista che contiene tutti i valori che recuperiamo ?
Una volta inseriti nella lista i dati con variabile.Append gli do un indice d inizio per futuro recupero indice per il ciclo for ?

Sarebbe possibile all interno del file txt in una posizione a scelta inserire un nome ed assegnarlo su un punto di annotazione o testo nell ambiente di disegno dove viene creata la forma disegnata ?

CIao Grazie

Ciao

Se vuoi dire che il primo valore della lista num e’ il diametro, OK.

E’ il terzo valore, quello con indice 2

Suppongo che questo si riferisca a

rad.append( num[ 1 ] / 2 )

Qui prendiamo il valore di indice 1 dell’ultima linea di dati del file, per aggiungere il raggio del cerchio finale alla nostra lista.

Costruiamo 3 liste per raggi, lunghezze e angoli.
Leggiamo tutte le linee del file, quindi salviamo nelle liste tutti i valori relativi al condotto.

Le liste sono 3: rad , lng e deg
Se intendi una sola lista per i raggi, una sola per le lunghezze e una sola per gli angoli, si’.
La prima lista contiene tutti i raggi per i cerchi
La seconda tutte le lunghezze per i tratti di condotto
La terza tutti gli angoli per la direzione dei vari tratti del condotto

append va scritto minuscolo.
Per Python minuscole e maiuscole sono diverse.

Abbiamo costruito le liste leggendo le linee del file a iniziare dalla prima,
per cui l’indice di inizio per le 3 liste e’ sempre 0.
Il raggio del primo cerchio e’ in rad[ 0 ]
La lunghezza del primo tratto e’ in lng[ 0 ]
L’angolo del primo tratto e’ in deg[ 0 ]
Per i successivi valori gli indici aumentano di 1 ogni volta.

Certo, sei tu che leggi il file con lo script.
Se sai come e’ formattato il file, lo fai leggere allo script.
Puoi disegnare un TextDot con
https://developer.rhino3d.com/api/RhinoScriptSyntax/#geometry-AddTextDot

Ciao

1 Mi Piace

Chiedevo se dopo :
wrd = line.strip().split( ‘,’ )
num = [ float( wr ) for wr in wrd ]

i dati presi dal file tutti insieme aprendo il file vengono messi in una lista o variabile Num e poi in base alla posizione assegnata
0,1,2,3 vengono create le liste rad , lng, deg …

Cerco di capire come funziona , cè la possibilta che faccio domande non al meglio…
Ciao grazie

Esatto.
Prima leggendo il file ricaviamo la lista wrd
Dopo convertiamo i valori in float e li salviamo nella lista num,
che poi usiamo i valori in num per caricare le 3 liste.

Hai capito bene ! :slight_smile:

Ciao

1 Mi Piace

Scusa, non e’ esatto, ovviamente … :blush:

Dal file leggiamo la lista lines,
nel ciclo leggiamo un valore per volta da lines,
valore che chiamiamo line
e poi da line ricaviamo la lista wrd ecc.

1 Mi Piace

Questi sono tutti i comandi che si possono utilizzare all interno dello script ad esempio in cui stiamo lavorando ?

Ciao

Per gli script in Python c’e’ una libreria, diciamo, di base, nel senso che tutta l’interazione degli script con Rhino si basa su questa libreria, chiamata RhinoCommon
https://developer.rhino3d.com/api/rhinocommon/
E’ una libreria per C#, quindi totalmente object-oriented, ma IronPython la usa tranquillamente, senza grossi problemi.
Si utilizza semplicemente la sintassi Python per la programmazione a oggetti.
Da notare che per Python RhinoCommon si chiama Rhino, quindi per utilizzarla scriveremo all’inizio dello script

import Rhino

Poi c’e’ rhinoscriptsyntax, che e’ una libreria, diciamo, ausiliaria, scritta richiamando RhinoCommon, che cerca di riprodurre fedelmente la ‘antica’ :wink: libreria RhinoScript usata dai primi script di Rhino in VBScript.
( Gli script in VBScript sono tuttora attuali e pienamente utilizzabili su Windows )

rhinoscriptsyntax fa cose semplici ma e’ semplice da utilizzare.
Nessun problema di oggetti qui, e’ semplicemente una libreria di funzioni.

Dato il nome piuttosto scomodo da usare spesso la vedrai importata nello script come rs, in questo modo:

import rhinoscriptsyntax as rs

Per entrambe le librerie, ci sono esempi su:

… E anche nelle pagine di McNeel su GitHub.

Ciao

2 Mi Piace

Grazie delle perle di indicazioni da seguire e studiare , molto vasto Rhino senza limiti mi sembra di capire.

Una domanda riferita allo script che hai creato , presumo sia possibile ma forse difficile volendo prendere ad esempio dopo i primi 5 pezzi disegnati ( 5 tronchi di cono) scegliere l inclinazione di ruotare dal suo centro tutti i coni rimanenti oppure fino al numero tronchi a scelta successivi.

NOn so se mi sono spiegato bene , oppure se è piu semplice dal file txt recuperare i dati ricreando una lista , forse sarebbe un buon esercizio da provare :cold_sweat: :cold_sweat:

CIao grazie

Se stai parlando di variare i valori, come gli angoli, e vedere il risultato, per scegliere eventualmente una forma un po’ diversa.

Si puo’ fare da script, ma credo sia molto piu’ semplice utilizzando Grasshopper.

Ciao

No intendo lasciando questi valori , la piega ora è 10+10=20 poi 20+10 etc… e la linea di curvatura mi sembra di ricordare sia verso asse da Y Z , intendo se dopo aver disegnato tutta la forma come adesso alla fine si puo dirgli di ruotare verso X tipo di 40 gradi da un centro di un cerchio …o ruotando da li tutto il resto dei tronchi rimasti, ma che ruoti solo da un punto scelto .

CIao grazie

Scusa le domande stupide :smile: ma cerco di capire cosa vuoi fare. :slight_smile:

A me sembra che ruotare tutti i tratti dopo un certo cerchio corrisponda a cambiare l’angolo del tratto dopo il cerchio ( ultimo valore della linea nella nostra tabellina )
Quindi a cambiare un valore.

Dov’e’ che non ci capiamo ? :grinning:

Altra cosa:
Vuoi disegnare in 2 tempi ?
Cioe’ prima lo script attuale, e poi … quando ti servira’ … un altro script per ruotare una parte del condotto ?

Oppure vuoi disegnare il condotto e subito ruotarne una parte ?

Suppongo di no, perche’ se e’ cosi’ lo disegneresti gia’ ruotato, senza bisogno di fare l’operazione in due tempi. :confused:

Altra domanda ancora.
Questa rotazione di parte del condotto puo’ variare ?
Nel senso: varia la parte da ruotare ? O varia l’angolo ? O entrambi ?

Suppongo di si’ …

Perche’ se si tratta di una rotazione in cui parte da ruotare e angolo sono stabiliti, fai prima a ruotare su Rhino e rifare 2 Loft che a farti uno script apposito.

Grazie, ciao.

1 Mi Piace

Si è complicato da spiegare comunque si effettivamente si puo ruotare da Rhino per cui inutile faticare con lo script.

Si varia sempre , ma con il ciclo for che hai fatto disegna sempre anche se cambi valori ho visto, sia che abbiamo 8 righe oppure 10.

Non voglio farti faticare oltre modo , ci guarderò con calma , mi piace lo script e il linguaggio usato .Gia avere una base che mi hai fornito come inizio è molto d aiuto , piu avanti provero a fare delle piccole modifiche e nel caso quando mi areno cosa probabile ti chiederò un info nel limite del possibile.

Molte grazie

1 Mi Piace

credo sia la cosa migliore. non’é consigliabile avere un solo script che fa molte cose insieme.

1 Mi Piace

Non so se si puo fare un getreal come Autolisp…
Le strade sono piu di una volendo .
Si si puo fare benissimo in piu script nessun problema, risulta anche piu semplice e meno incasinato.
Ciao Grazie

OK, allora per favore specifica poi cosa deve fare lo script.

Input, calcoli, output. Tutto quanto insomma. :smile:

E ci studieremo poi sopra. :slight_smile:

1 Mi Piace

Se ti va potremmo iniziare la seconda fase proprio con la creazione degli assi come abbiamo parlato X Rosso Y Verde Z Blu , magari con uno spessore più ampio.

Per il discorso rotazione possiamo affrontarlo dopo questo se vuoi , scegli tu quello che preferisci ,oppure appena ho acquisito un po’ più di conoscenza ci provo io :rofl::sweat_smile: e poi mi correggi. Al momento non ci ho dedicato molto tempo sto disegnando ancora i modelli per fare gli stampi .
Non nego che lo script mi piace ,il codice da soddisfazione .

Ciao Grazie

1 Mi Piace

OK, su quale livello vanno gli assi ?

Ciao

EDIT:

Scusa, altra domanda:
la lunghezza degli assi e’ fissa o puo’ variare ?

Grazie

1 Mi Piace

Vediamo se ho capito bene la domanda è per gli assi di riferimento sulla discussione , se quello
ho creato 3 piani X Rosso Yverde ZBlu
lunghezza ho fatto 1000 mm.

Secondo mè va bene fissa .

Questi script in generale si possono assegnare ad un tasto o caricato in automatico dal sistema e assegnarli ad un comando ?

Cè una lunghezza massima prevista per uno script ?

Ciao Grazie

Ho trovato un impostazione dove presumo lo carica all avvio di Rhino.


Si aspetta un file .rvb

Ciao Grazie