Ciao a tutti, ho bisogno del vostro aiuto perchè non riesco a pensare ad una soluzione.
Devo far colorare una sequenza di curve con colori alternati.
Mi spiego meglio: ho dieci curve in continuità, la prima deve diventare rossa, la seconda verde, la terza rossa di nuovo e così via fino all’ultima.
Qualcuno ha qualche idea?
Grazie
Ciao Federico
Se ho capito bene le curve sono consecutive, nel senso che una finisce nel punto dove inizia un’altra.
Inoltre la prima e l’ultima curva non si toccano, cioe’ le curve non formano un circolo chiuso.
Se e’ cosi’, ti faccio una domanda:
E’ possibile richiedere di selezionare la prima curva ?
( ho una mezza idea che in questo caso risulterebbe piu’ semplice … sempre se funziona … )
Ciao
Ciao Emilio
Le curve sono consecutive e quindi inizio e fine delle curve si toccano, però non è detto che sia un circolo aperto, anzi è più probabile che sia chiuso.
Il metodo di selezione non è importante, credo che il più semplice sia la catena che quindi implica la selezione di una prima curva e in sequenza tutte le altre.
Vediamo cosa ti è venuto in mente?
Grazie
A me è venuto in mente questo…
curve-colorate-gm.gh (10,2 KB)
curve-colorate-gm.3dm (45,3 KB)
Occorre Grasshopper e l’add-on Human anche se penso che i colori si possano fare con Python.
Ho messo due metodi diversi per fare i colori sui canali R e B del componente colore.
Non serve selezionare nulla. Il componente Bake produce le curve sul layer colore. Nascondi il layer Default e puoi vedere il risultato.
Puoi mettere tutte le curve che vuoi sul layer Default… dovrebbe funzionare…
OOOOOOOOps…leggo troppo di fretta…ti servivano alternati due colori. Basta piccola modifica al file che ho mandato.
Grazie Giuseppe, scusami, ma sono stato poco preciso io.
Vorrei non passare per GrassHopper, preferirei python.
Grazie lo stesso per il tempo dedicato.
Nessun problema! E’ sempre uno spunto utile per ragionare indipendentemente dallo strumento.
Eccomi …
Allora … avevo fatto uno script piuttosto complicato che lavorava sulle singole curve, cercando quelle adiacenti eccetera …
Poi ho visto la definizione di Giuseppe e ho imparato che e’ molto meglio unire le curve e poi separarle in modo da ottenere la lista gia’ ordinata.
import rhinoscriptsyntax as rs
import System
def main():
done = []
curves = rs.GetObjects( 'Curve ?' )
rs.UnselectAllObjects()
rs.SelectObjects( curves )
rs.Command( '_Join' )
rs.UnselectAllObjects()
curves = rs.ExplodeCurves( rs.FirstObject(), True )
colr = 'red'
for curve in curves:
if colr == 'green':
rs.ObjectColor( curve, System.Drawing.Color.Green )
colr = 'red'
else:
rs.ObjectColor( curve, System.Drawing.Color.Red )
colr = 'green'
main()
Ciao !
Fammi capire sta cosa, se unisco le curve selezionate e poi le separo, il ciclo for segue l’ordine?
Fantastico!
Più semplice di quel che pensavo.
Unica cosa che non son riuscito è selezionare le curve tramite _chain.
Grazie!
Prova questo script
Vittorio
ColoriAlterni.py (530 Byte)
Ciao Federico
Dalla documentazione di rs.ExplodeCurves():
ExplodeCurves
Explodes, or un-joins, one more curve objects.
Polycurves will be exploded into curve segments.
Polylines will be exploded into line segments.
ExplodeCurves will return the curves in topological order.
Hehe … a volte la documentazione di Rhino… documenta.
… Purtroppo solo a volte …
Ciao !
Eccezionale!
Grazie a tutti!