Bug oppure il mio pc da i numeri

premessa: uso Rh 7.2 quindi con relativo Gh (la versione 2 di Gh se ho capito bene dovrebbe partire con l’eventuale nuova versione di Rh 8 quindi presumo che l’attuale versione di Gh sia identica su tutte le SR?)

se quanto detto sopra è corretto, e Gh ha un suo funzionamento indipendentemente dalla SR di Rh
dovrebbe essere possibile replicare su ogni SR di Rh 7 la stessa situazione che mi sta capitando in Gh:

sono pienamente conscio che uso metodi per così dire “poco ortodossi” nella scrittura di codici/script
detto questo passo al quesito, nel componente Py in Gh associo ai 2 input 2 punti (10,10,0) e (-10,-10,0)
come script in Py eseguo le seguenti righe ed in uscita oltre ai 2 punti copiati e spostati verso asse Z
mi ritrovo selezionato anche l’ultimo oggetto creato in Rh che non centra nulla con la def di Gh :thinking:

import rhinoscriptsyntax as rs
xx = rs.CopyObject(x, (0, 0, 10))
yy = rs.CopyObject(y, (0, 0, 10))
a = xx, yy
a += "", rs.AddPoint(0,0,0)

da quello che ho riscontrato è l’ultima riga (ovviamente) che cozza con lo script, infatti credo che aggiungere elementi alla variabile in uscita non vada bene essendo che Gh mi presenta un errore Guid, ma sembra che usando i doppi apici raggiri questo intoppo, peccato che poi si riscontra questo inconveniente di ritrovarmi selezionato in Gh insieme ai 2 punti anche l’ultimo oggetto in Rh anche se successivamente.
(se associo un solo punto non funziona)

Così non va bene?
img1

ciao Leopoldo, si certo ovviamente va bene :+1:

avevo provato in quel modo, essendo che volevo usare un metodo tipo quello di VBS dove usando
il simbolo “_” alla fine di una riga posso andare a capo e continuare la stringa della riga precedente.

la domanda del Bug però rimane. . . . hai per caso provato a replicare il problema, ti si è presentato?

Sì, il problema si presenta, come dici tu.

1 Mi Piace

la sintassi che ho postato funziona ma bisogna avere un doppio valore

import rhinoscriptsyntax as rs
a = rs.AddPoint(0,0,0), rs.AddPoint(10,0,0)
a += rs.AddPoint(20,0,0), rs.AddPoint(30,0,0)

oppure finire con una virgola:

import rhinoscriptsyntax as rs
a = rs.AddPoint(0,0,0), # rs.AddPoint(10,0,0)
a += rs.AddPoint(20,0,0), # rs.AddPoint(30,0,0)

alla fine chissà perché i doppi apici " " richiamano l’ultimo oggetto di Rh. . . .

Ciao Salvio
Nessuna stranezza. Hai aggiunto un ‘valore’ non compatibile all’interno della lista. Poi va da se che i risultati siano i più inaspettati … :upside_down_face:

ciao Sergio, non saprei se sia proprio non compatibile:

Annotazione 2022-04-23 114027

facendo la prova del nove usando la Shell di Python al di fuori da Rhino non sembra dare nessun problema
anzi era "“quasi” il risultato che mi aspettavo da Py in Gh essendo che nel primo caso della foto la tuple viene aggiunta ma convertita in lista, nel secondo caso il testo viene affettato, l’ultimo è ciò che mi aspetto.

tornando alla tua risposta, comunque trovo strano che un carattere di testo nullo “” si colleghi ad un’oggetto

Mi sembra normale che funzioni, è una lista di tipi vari. Se poi la dai in pasto ad una procedura che esige dati specifici all’ingresso non vedo perchè non aspettarsi risultati anomali.

null-refer

alla fine i doppi apici se non trovano nessun oggetto in Rhino riporta un valore nullo, comunque
non credo sia questa la questione (anche perché la potrebbe spiegare solo chi ha scritto il codice)

quello che mi fa ancora più strano e che nell’esempio della Shell in Python il concatenamento, funziona bene anche inserendo un solo valore “lista/tuple” mentre in Gh bisogna inserire la virgola ad ogni riga.

edit:

import rhinoscriptsyntax as rs

a = rs.AddPoint(0,0,0),
a += rs.AddPoint(20,0,0),
print rs.coerce3dpoint(a[0])

b = rs.AddPoint(10,0,0),\
rs.AddPoint(30,0,0)
print rs.coerce3dpoint(b[0])

in alternativa si può anche usare l’operatore \ al posto di += per concatenare una stringa di codice

Sicuro che la versione di Python sia la stessa ?

E quale e ’ il caso che non ti aspetti ?

In effetti pare strano, ma senza vedere la definizione non si puo’ dire

EDIT:

A quanto ricordo \ serve a concatenare due linee di codice.
Ma che funzioni anche += non l’ho mai sentito … :open_mouth:

ciao Emilio,

se Gh in Rh 7 usa sempre la versione di Py 2.7 allora è quella che ho usato anche con la Shell

>>> a=[0,0,0]
>>> a+="ciao"
>>> a
[0, 0, 0, 'c', 'i', 'a', 'o']

ero convinto che in questa situazione venisse aggiunto un valore di testo completo e non uno slicing

import rhinoscriptsyntax as rs
a = rs.AddPoint(0,0,0), rs.AddPoint(10,0,0)
a += "", rs.AddPoint(20,0,0)

anch’io avevo ipotizzato che potesse centrare qualcosa il codice della def, ma invece basta che usi queste tre righe per riscontrare il problema, infatti se in Rh non hai nessun oggetto Gh riporta errore

io invece che \ servisse per concatenare due righe di codice non lo sapevo l’ho scoperto adesso
per questo avevo usato += come negli esempi postati (precedendo la variabile inizializzata)

>>> a = [0,0,0]
>>> a += [1,1,1]
>>> a
[0, 0, 0, 1, 1, 1]
>>> 
>>> 
>>> a = [0,0,0],
>>> a += [1,1,1],
>>> a
([0, 0, 0], [1, 1, 1])

come si può vedere l’esempio dalla Shell funziona, e in modi diversi:

  1. senza virgola la seconda riga viene incorporata alla prima
  2. con la virgola finale invece risultano divise le due liste

ps ovviamente += ha uno scopo diverso da \
essendo che il primo comunque nella stessa riga si deve inserire una stringa di codice completa
nel secondo caso quindi con \ serve proprio per spezzettare anche una sola riga di codice lunga

Ciao Salvio

Non so quale sia la regola ufficiale, ma a occhio dire che, dato che ‘a’ e’ una sequenza, tutto cio’ che gli aggiungi viene prima trasformato in sequenza.
Non credo che il ‘+’ sia definito per due dati di tipo diverso, quindi Python converte, in modo da avere dati omogenei.

Per aggiungere semplicemente dei dati a una lista c’e’ il metodo append()

Negli esempi postati concateni due sequenze all’interno di una singola istruzione,
non concateni due istruzioni Python.

EDIT:
Scusa, volevo dire … “non concateni due linee di codice in una singola istruzione”
/ EDIT

Rhino 6 fa la stessa cosa

image

Ho provato su Rhino 6 e non coinvolge oggetti … :confused:
Sara’ una cosa che succede su Rhino 7 …

Emilio mi sa che hai trovato l’arcano: all’uscita prova a collegare il componente Geometry invece del panel
quindi non dovrebbe essere un problema di Py ma di Geometry che con un valore nullo si collega a oggetti.
anzi per essere preciso all’ultimo oggetto in creato Rhino infatti nella mia foto Py non era colorato di rosso

non credo sia una cosa voluta, essendo che ho inserito altri doppi apici ed creato altre curve in Rh
ipotizzando che ad ogni “empty” si collegasse ad un oggetto diverso, ed invece si ri-collega all’ultimo
infatti se vado a cuocere gli oggetti in Geometry per ogni empty viene ricreato l’ultima curva fatta in Rhino.

ps credo che dovrebbe succedere la stessa cosa anche con la V6 nel caso provi, fammi sapere :wink:

Hai ragione Salvio, funziona anche sul 6

image

… Anche se non ho capito come … :confused:

Potrebbe essere una specie di aiuto per il debugging … mah …

O forse un easter egg di David. :wink:

EDIT

Funziona solo su GH
Non funziona per gli script di Rhino

EDIT 2

Funziona anche con una sequenza di spazi:

"     "

Emilio infatti il concatenamento con += non centra nulla

Immagine

quindi come avevo ipotizzato il tutto succede nel componente Geometry

certo che è abbastanza contorta la cosa, essendo che, è vero che esiste il componente per gestire valori nulli/vuoti ma nel caso in una definizione dove il risultato siano 100, 1000 o più valori capitasse un valore nullo/vuoto “non previsto” ci si ritroverebbe selezionati oggetto che non dovrebbe centrare proprio nulla.

1 Mi Piace

Il trucchetto funziona solo con stringhe vuote o contenenti caratteri ‘whitespace’.
Mi sembra difficile che in una lista di oggetti o Guid compaia per caso una stringa simile se non ce la metti apposta.
Con null/None non funziona.

Oppure negli input di componente che si aspettano della geometria,
almeno, io ho provato con Move e funziona

Pare sia/fosse un bug:

Brian dice che dalla 7.8 e’ stato corretto.
Non so che versione avete voi … :grinning:

EDIT

… Pero’ a me pare/pareva comodo per il debugging:
Basta disegnare un oggetto in Rhino e testi la definizione senza ammattire cliccando e ricliccando come un pazzo …
:wink: :smile:

1 Mi Piace

ok ottimo allora era già stato segnalato :+1:

Emilio ma in che senso come debugging :thinking:
se in un componente ci sono in input valori non consoni ? ? ?

SI’, forse e’ un’idea un po’ bislacca … :smile:
Diciamo piu’ per provare velocemente la stessa operazione con oggetti diversi.

Esempio stupido: Array

Imposti la definizione
poi disegni un cerchio

Poi disegni un cerchio piu’ grande …
E non succede niente … :smile:
Va be’ … bisogna convinvere GH a ricalcolare, qui per esempio ho messo un altro testo di input,
cosi’ linkando uno o l’altro GH ricalcola …
Suppongo ci siano anche altri modi …
Ma non sembra immediato come credevo … pazienza.

Ah, nel testo c’e’ semplicemente uno spazio

Pero’ … che versione hai di Rhino ?
E’ vero che dalla 7.8. il bug e’ risolto ?