While in python

come mai? dov’è che sbaglio??

png

import rhinoscriptsyntax as rs
obj = rs.GetObject(“Select curve”, rs.filter.curve)
lun = raw_input() #56

if obj:
while rs.CurveLength(obj) < lun:
rs.EnableObjectGrips(obj, True)
for i in range(1,4):
point = rs.ObjectGripLocation(obj, i)
point[1] = point[1] - .1
rs.ObjectGripLocation(obj, i, point)
rs.EnableObjectGrips(obj, False)

ho provato anche inserendo “if rs.CurveLength(obj) > lun: break” ma comunque mi si blocca :triumph:

un aiutino per favore . . . .

Ciao Salvio

… Sicuro che raw_input() funzioni negli script ?
Io userei rs.GetString()

il raw_input l’ho messo alla fine prima avevo il valore predefinito 56 ed era la stessa cosa

il problema credo non sia nel raw_input() ma nel while che non si ferma arrivato al valore inserito

in pratica il while deve spostare i grips di -0.1 fino a che la curva non arrivi alla lunghezza indicata

il codice senza il while fa quello che deve fare con il while funziona ma poi va in loop continuo e si blocca…

Devi mettere una condizione di fine ciclo e con il comando break esci dal ciclo altrimenti non si ferma
Vittorio

Se nel loop metti un

print rs.CurveLength( obj )

dovresti capire qualcosa in piu’.

Ricordati Salvio:
per capire cosa c’e’ che non va, serve a poco cambiare istruzioni a caso,
e’ meglio far stampare allo script dei valori che ti permettano di capire cosa succede. :slight_smile:

Sorpresa ! :slight_smile:

qui questo script funziona:

import rhinoscriptsyntax as rs

obj = rs.GetObject('Select curve', rs.filter.curve)
lun = 56

if obj:
  while rs.CurveLength(obj) < lun:
    rs.EnableObjectGrips(obj, True)
    for i in range(1,4):
      point = rs.ObjectGripLocation(obj, i)
      point[1] = point[1] - .1
      rs.ObjectGripLocation(obj, i, point)
    rs.EnableObjectGrips(obj, False)

L’indentazione l’ho rifatta perche’ in quello che hai postato era andata persa …

EDIT

Ah, la Y dei CV diventa -6.90

Infatti stamani il while funziona mah :thinking:

scusa Emilio ieri essendo che non mi funzionava il while avevo cercato degli esempi per capire dove era lo sbaglio e c’erano un paio che usavano insieme il raw_input ho letto che bisogna usarlo al posto di input. ma che differenza c’è tra questi due appena citati e getstring getinteger getreal?

raw_input() o input() li usi da console, da terminale o da finestra dos, o chiamala come vuoi … :wink:
Cioe’ quando usi Python fuori da Rhino, con un’interfaccia a caratteri.

Gli script per Rhino girano in un altro ‘ambiente’, qui abbiamo i metodi rs per ottenere l’input dall’utilizzatore.
Credo sia meglio usare quelli.

( raw_input() e’ per Python 2, input() per Python 3 )

Grazie Emilio per la spiegazione.