Script per congiungere punti

Buongiorno a tutti, ho approntato un script per congiungere alcuni punti di una superficie in uno unico.
In pratica dovrebbe far apparire i punti di controllo, far selezionare quelli che mi servono, unirli, chiedere il punto di arrivo e spostarli tutti su quel punto…
Funziona tutto a meraviglia, tranne l’ultimo passaggio in cui proprio non riesco a capire l’errore.
Qualcuno sarebbe così gentile da darmi un piccolo aiuto?
Lo script è questo:

Sub Congiungi_Punti

Dim Surf, i, arrGrip, arrPoint, arrStart, arrEnd, arrTranslation

'richiede superficie

           Surf = Rhino.GetObject("Select Surface ", 8)
If IsNull(Surf) Then
	rhino.print "Operazione annullata"
	Exit Sub
End If

'mostra punti di controllo

Rhino.EnableObjectGrips Surf

'richiede punti

               arrGrip = Rhino.GetObjectGrips("Seleziona Punti ")

'congiunge tutti i punti

          If isarray(arrGrip) Then
     	For i=0 To ubound(arrGrip) 
Rhino.ObjectGripLocation Surf, arrGrip(i)(1), Rhino.ObjectGripLocation(Surf, arrGrip(0)(1))
               Next
           End If

'chiede punto di arrivo

         arrEnd= Rhino.GetPoint("Point to move to")

'sposta tutti i punti di controllo al punto di arrivo

         arrStart= Rhino.ObjectGripLocation(Surf, arrGrip(0)(1))

         If isarray(arrEnd)Then
              arrTranslation= Rhino.VectorCreate(arrEnd, arrStart)
              Rhino.MoveObjects arrGrip,  arrTranslation
         End If

End Sub

Congiungi_Punti

Buongiorno Thomas

Sono fuori allenamento con RhinoScript :wink: .
Ma, vedendo lo script, ho un dubbio.

Alla fine usi Rhino.MoveObjects per spostare i Grip.
Non bisogna usare Rhino.ObjectGripLocation o Rhino.ObjectGripLocations come hai fatto sopra ? :confused:

In teoria si possono usare entrambi… ma io non riesco ad usarne nemmeno uno dei due… :frowning:

Altro dubbio:

Per spostare i grip usi la array arrGrip, che pero’ e’ stata ottenuta all’inizio dello script.
Ma nel frattempo i grip sono stati spostati.
Credo che arrGrip contenga ancora le posizioni iniziali.

Nessuna anima pia che mi da una mano :smiling_face_with_tear:

	'chiede punto di arrivo
	arrEnd = Rhino.GetPoint("Point to move to")
	
	'congiunge tutti i punti
	If isarray(arrGrip) Then
		For i=0 To ubound(arrGrip) 
			Rhino.ObjectGripLocation Surf, arrGrip(i)(1), arrEnd
		Next
	Else
		Exit Sub
	End If

guarda, (a parte le indicazioni di Emilio che per esperianza è sempre meglio seguire)
se ci pensi il codice comunque funzionerebbe, mettendo prima “chiede punto di arrivo”
e poi successivamente la parte del “congiunge tutti i punti” così lo script si conclude.

per quello che hai chiesto che debba fare il codice,
era superfluo la congiunzione dei punti, poi se
comunque ritieni che ti possa servire per altro allora
dopo aver congiunto i punti e richiesto il punto finale
ripeti la stessa riga come mostrato avendo come
destinazione arrEnd. ho aggiunto anche un Exit Sub


immagine

ps
quando posti un codice premi prima il pulsante evidenziato nel cerchio rosso
in modo che viene formattato diventando più chiara la lettura per chi legge.

2 Mi Piace

Era l’idea che avevo all’inizio, e ci avevo anche provato, ma sicuramente sbagliavo qualcosa nella sintassi perchè non ero riuscito a farlo funzionare…
Grazie per il supporto e per il suggerimento…

1 Mi Piace