Ciao
Qui c’e’ il mio tentativo.
Lavora su curve 2D nel piano XY.
Ammesso che funzioni …
Si puo’ scegliere l’input da una curva razionale (credo anche non razionale …)
oppure da una polilinea che funge da control polygon … taroccato, nel senso che X e Y rappresentano X e Y, ma la Z rappresenta il peso dei vari CV.
Vedi l’input selector per settare l’input da utilizzare.
La definizione serve ad aumentare il grado della curva di 1
Il risultato e’ la nuova curva, ma solo se il grado e’ minore di 12
Per ogni valore del grado c’e’ comunque anche come output una polilinea di visualizzazione e una polilinea control polygon X,Y,W
Se partiamo da un arco di grado 2, la definizione costruisce la curva di grado 3.
Per costruire curve di grado maggiore bisogna cuocere la curva risultante (o il control polygon X,Y,W)
e utilizzarla come nuovo input per la definizione …
In pratica dobbiamo aumentare il grado di 1 ogni volta.
( Non saprei come fare diversamente, a meno di ridurre la definizione a uno script,
mi fermo qui e lascio proseguire gli esperti di GH )
sergio-4.gh (23,3 KB)
Lo script serve solo a ricavare una polilinea dalle curve, per poter vedere anche quelle con grado > 11:
import Rhino
def step( cv, uu ):
cv2 = []
for ix in range( len( cv ) - 1 ):
cv2.append( cv[ ix ] * ( 1.0 - uu ) + cv[ ix + 1 ] * uu )
return cv2
def pt( cv, uu ):
if len( cv ) == 1:
return cv[ 0 ]
return pt( step( cv, uu ), uu )
if cv:
du = 1.0 / ( pc - 1 )
pts = []
for ix in range( pc ):
pts.append( pt( cv, du * ix ) )
a = pts
EDIT
La prima linea dello script
import Rhino
non serve … l’ho dimenticata quando ho modificato il vecchio script.
Si puo’ eliminare.
EDIT 2
Ho dimenticato di specificare che funziona solo su curve di Bezier … sorry.