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 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 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 ?
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.
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.
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’ 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:
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
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 .
Scusa le domande stupide ma cerco di capire cosa vuoi fare.
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 ?
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.
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.
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.
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
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 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 .
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 ?