# Problemino con gli Array "credo"

**URL:** <https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249>\
**Category:** Scripting e Programmazione\
**Created:** [6 Agosto 2017, 10:45am UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249 "2017-08-06T10:45:37Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [6 Agosto 2017, 10:45am UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/1 "2017-08-06T10:45:37Z")

</div>

una buona domenica a tutti

mi serve proprio un aiuto per risolvere questo intoppo in RhinoScript:

1. ho associato una variabile indicizzata ad un tot di oggetti curva
2. ogni oggetto curva ovviamente ha una determinata lunghezza
3. in pratica dovrei recuperare la variabile filtrandola dalla lunghezza

inizialmente avevo tentato con Max e Ubound ma poi mi sono reso conto che mi serviva lavorare sul secondo parametro da usare come filtro per recuperare il primo, non sò se ci sia un Metodo specifico che possa fare ciò o bisogna lavorare con i Vettori degli Array? (spero di aver usato i termini giusti) mi auguro che sia chiaro 🙂

un grazie a tutti per l’aiuto

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [6 Agosto 2017, 1:03pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/2 "2017-08-06T13:03:53Z")

</div>

Ciao

Sarebbe possibile vedere la parte di script in questione ?  
… Cosi’ ragioniamo direttamente con i nomi delle variabili,  
mi sembra piu’ semplice. 😕😉

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [6 Agosto 2017, 3:27pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/3 "2017-08-06T15:27:14Z")

</div>

ciao emilio

questo è il codice intermedio dopo aver scartato i Metodi "Max e Ubound"  
funziona tranne il fatto che mi salta un confronto tra il primo è l’ultimo

```
Dim strObject, pippa, pippo(2), j
j = 0
For Each strObject In Rhino.SelectedObjects
	Rhino.Print Rhino.CurveLength(strObject)
	pippo(j) = strObject
	If j > 0 Then 'Questo If serve per non dare errore If successivo
		If Rhino.CurveLength(pippo(j - 1)) > Rhino.CurveLength(pippo(j)) Then
			pippa = pippo(j - 1)	
		Else
			pippa = pippo(j)
		End If
	End If
	j = j + 1
Next
Rhino.Print Rhino.CurveLength(pippa) & " " & pippa

```

NB ovviamente come è scritto il codice bisogna avere già le tre curve selezionate  
dopodiché ero arrivato alla conclusione che bisognasse usare gli Array bidimensionali

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [6 Agosto 2017, 4:06pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/4 "2017-08-06T16:06:14Z")

</div>

nel frattempo posto una tabella di esempio di ciò che  
dovrebbe fare il codice se si usasse gli Array bidimensionali

pippo(0) = oggeto1  
pippo(1) = oggeto2  
pippo(2) = oggeto3

Vettore Indice0, Indice1  
Array1(pippo(0),lunghezza(pippo(0)))  
Array2(pippo(1),lunghezza(pippo(1)))  
Array3(pippo(2),lunghezza(pippo(2)))

Array(Array1,Array2,Array3)

quindi a questo punto ci vorrebbe un Metodo per riuscire a lavorare sui valori di  
confronto che devono essere eseguiti sull’indice1 ma il risultato da estrapolare deve essere  
dell’indice0 e questo che non riesco a fare essendo che questo tipo di operazione non le ho mai fatte

spero di non aver scritto troppi errori di termini e di  
impostazione codici ovviamente sono ben accette  
tutte le opportune correzioni e grazie ancora . . . .

PS ovviamente tutto questo se ho compreso bene che con gli Array sia una cosa fattibile da fare

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [6 Agosto 2017, 5:10pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/5 "2017-08-06T17:10:15Z")

</div>

> [@0904](#):
>
> quindi a questo punto ci vorrebbe un Metodo per riuscire a lavorare sui valori di
> 
> confronto che devono essere eseguiti sull’indice1 ma il risultato da estrapolare deve essere
> 
> dell’indice0

OK, abbiamo 3 curve con le relative lunghezze.  
Che operazione deve fare lo script, partendo da questi valori ?

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [6 Agosto 2017, 5:23pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/6 "2017-08-06T17:23:03Z")

</div>

confrontare le lunghezze delle 3 curve e trovata quella più lunga mi deve dire di quale oggetto si tratta  
un esempio di ciò che dovrebbe fare in modo grezzo ma giusto per dare l’idea:

```
Dim a, b, c, risultato
a = oggetto1
b = oggetto2
c = oggetto3

If lunghezza(a) > lunghezza(b) Then
	risultato = a
Else
	risultato = b
End If

```

ovviamente si dovrebbe scrivere ogni possibile combinazione nel caso di 3 curve si potrebbe anche fare ma lo reputo un modo poco ortodosso in ambito di programmazione essendo che di sicuro c’è un modo più corretto.

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [6 Agosto 2017, 9:33pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/7 "2017-08-06T21:33:57Z")

</div>

Ah, si’. Capito.

Diciamo che abbiamo una array “curva” con indice da 0 a N contenente le curve  
e un’altra array “lunghezza” contenete le lunghezze delle curve.  
Possiamo fare un ciclo utilizzando due variabili per conservare i valori di curva e lunghezza, per la curva piu’ lunga trovata durante il ciclo.  
Piu’ o meno una cosa del genere:  
( Scusa, sono piuttosto arrugginito con il VBScript,  
per cui considera quanto segue niente piu’ che pseudo-codice )

```auto
dim curva( N ), lunghezza( N )
` ...
lungmax = lunghezza( 0 )
curlunga = curva( 0 )
for i=1 to N
  if lunghezza( i ) > lungmax then
    curlunga = curva( i )
    lungmax = lunghezza( i )
  end if
next

```

alla fine del ciclio avrai la curva piu’ lunga in “curlunga”  
( e la relativa lunghezza in “lungmax” )

… sempre se non ho fatto pasticci …

EDIT: aggiunti “end if” e “next” … credo ci vogliano …

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Agosto 2017, 10:47am UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/8 "2017-08-07T10:47:44Z")

</div>

ciao emilio grazie del codice funziona benissimo non c’e stato nemmeno bisogno dell’aggiunta 🙂

sei stato grande 🤗

PS come mai questa soluzione non funziona?

```
Dim n
n = UBound(Rhino.SelectedObjects)
Msgbox n
Dim curva(n), lunghezza(n), i

```

la Msgbox mi dà il totale delle curve selezionate ma poi mi dà l’errore quando si inserisce “n” come indice

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [7 Agosto 2017, 12:30pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/9 "2017-08-07T12:30:33Z")

</div>

Come ho gia’ detto, e’ un po’ che non uso VBScript …  
Ma mi sembra di ricordare che Dim vuole un numero come lunghezza della array  
Per usare una variabile credo si debba usare ReDim, cioe’ prima usi Dim con un valore fisso e dopo con ReDim puoi variare la lunghezza usando anche variabili …  
Ma e’ meglio se controlli la sitassi VBScript sulla documentazione … 😉

P.S. … E’ per cose come questa che non uso piu’ VBS … 🕶

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Agosto 2017, 3:23pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/10 "2017-08-07T15:23:53Z")

</div>

ho provato e funziona ottima soluzione

ho visto un pochino la guida di RhinoScript e ho letto che ha delle differenze nel dichiarare i tipi di variabili del tipo che bisogna scriverli in MAIUSCOLO e legati con il simbolo “\_” anche se poi nell’indice della guida cercando “External Access” porta un esempio che a me mi da errore proprio alla prima riga “Dim objRhino as Object”. ho anche cercato altri esempi in rete tipo “Dim i as Integer” e anche questo mi da errore mah . . . .

adesso mi viene un dubbio, forse è una questione di librerie da richiamare in Rhino?

nel frattempo uso il metodo che mi hai consigliato con ReDim grazie ancora

> [@emilio](#):
>
> P.S. … E’ per cose come questa che non uso piu’ VBS … 🕶

e adesso cosa usi?

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [7 Agosto 2017, 4:26pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/11 "2017-08-07T16:26:44Z")

</div>

> [@0904](#):
>
> e adesso cosa usi?

Python

Per essere precisi IronPython, cosa che e’ possibile solo a partire da Rhino 5 ( grazie RMA ! 😃 )  
Fino a Rhino 4 c’era solo il VBScript

Per i vari problemi specifici del VBScript … mi spiace, ma ormai sono fuori dal giro 😉  
Nessun problema invece per i metodi RhinoScript, che sono disponibili in forma molto simile anche con Python … 🙂

Ma certo sono molti coloro che continuano ad usare VBScript ( tra cui il mio amico Lucio ) … anche se adesso qui non si vede nessuno ( a parte l’intervento dell’altro amico Vittorio, certo ) … mah … saranno tutti in spiagga … 😄

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Agosto 2017, 4:38pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/12 "2017-08-07T16:38:24Z")

</div>

fanno bene in questi giorni sarebbe l’unica cosa da fare per tutti 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Agosto 2017, 5:08pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/13 "2017-08-07T17:08:56Z")

</div>

mi sa che debbo mandare in spiaggia il mio PC essendo che adesso mi sta facendo proprio 🤬

il codice che mi hai corretto viene dopo altri codici e per avere le ultime curve create selezionate avevo in mente di usare Rhino.Command("! \_SelLast") per selezionare le tre curve generate beh non ci crederai ma non mi seleziona nulla e quindi il codice appena fatto mi da errore 😡  
la cosa che mi fa inbufalire se inserisco Rhino.Command("! \_SelLast") in una nuova pagina di RhinoScript funziona e funziona anche se richiamo il comando \_SelLast dalla riga di comando

c’è una spiegazione per tutto questo o sono i capricci del momento del mio PC . . . .  
PS in altri codici ho usato combinazioni tra Metodi e comandi inseriti in Rhino.Command

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Agosto 2017, 8:14pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/14 "2017-08-07T20:14:02Z")

</div>

Risolto

non so se sia normale o per quale motivo cmq ho dovuto scrivere il Metodo Rhino.Command("! \_SelLast") due volte

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [7 Agosto 2017, 9:15pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/15 "2017-08-07T21:15:11Z")

</div>

Mah … hai provato a togliere il punto esclamativo ?  
Credo che qui non serva comunque …

Scusa, le curve vengono selezionate nello script ?  
Se e’ cosi puoi recuperare i guid ( objectid ) e usare Rhino.SelectObjects(), no ?  
( … dopo un bel Rhino.UnselectAllObjects() )

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Agosto 2017, 9:46pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/16 "2017-08-07T21:46:07Z")

</div>

eeeee purtroppo non erano selezionate, anzi erano selezionate poi viene eseguito un’altro Metodo e perdo la selezione se no avrei usato il Metodo che hai suggerito anzi mi costa usare i Comandi nello Script.

il fatto e che sono più oggetti se no usavo FirstObject. in un codice per selezionare più oggetti creati nello Script ho usato FirstObject in un ciclo con NextObject per il tot di numero di oggetti creati da selezionare.

infatti proprio per questo mi sono chiesto il Metodo “LastCreatedObjects” che io traduto “Ultimi Oggetti Creati” ma nella selezione ha lo stesso effetto del Metodo “FirstObject” mi seleziona solo ultimo “chi ci capisce nulla”

ps cmq avevo provato anche senza punto esclamativo

---

<div class="post-metadata">

**Author:** ![lucio\_zadra](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/lucio_zadra/32/16361_2.png) [@lucio\_zadra](https://it.discourse.mcneel.com/u/lucio_zadra)\
**Post date:** [7 Agosto 2017, 10:47pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/17 "2017-08-07T22:47:13Z")

</div>

Ciao,  
se devo essere sincero, non riesco a capire perchè ti stai complicando la vita con metodi di selezione “pericolosi” quando potresti salvarti semplicemente in un array le curve create in precedenza.  
Il modus operandi classico dovrebbe essere:

- dichiaro le variabili
- chiedo i dati o la selezione degli oggetti all’utente (o uso la selezione già attiva)
- genero i nuovi oggetti  
Ogni volta che generi un oggetto, il comando ti restituisce il suo ID.  
Basta collezionare in un array gli ID degli oggetti che ti serviranno successivamente e il resto risulterà più semplice.

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [7 Agosto 2017, 10:58pm UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/18 "2017-08-07T22:58:02Z")

</div>

grazie lucio per la risposta

ciò che hai detto mi risolverebbe un bel problema solo che non so come fare a ricavare ID degli oggetti creati  
come ho scritto prima riesco a farlo solo con l’ultimo oggetto creato con FirstObject  
se mi potresti dare qualche indicazione ti sarei veramente grato.

---

<div class="post-metadata">

**Author:** ![lucio\_zadra](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/lucio_zadra/32/16361_2.png) [@lucio\_zadra](https://it.discourse.mcneel.com/u/lucio_zadra)\
**Post date:** [8 Agosto 2017, 5:12am UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/19 "2017-08-08T05:12:19Z")

</div>

Ok, appena arrivo davanti al computer ti giro un paio di esempi (ieri sera ero capottato dal sonno…).

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [8 Agosto 2017, 5:17am UTC](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249/20 "2017-08-08T05:17:48Z")

</div>

Bene, vediamo se ora che c’e’ anche Lucio (fresco di VBScript 🙂 ) riusciamo a venire a capo di qualcosa … 😉

( Ciao Lucio ! )

Ma questi oggetti che devi selezionare (per fare cosa ?), da dove vengono ?

1. Sono gia’ selezionati quando lanci lo script ?
2. Sono creati dallo script via Rhino.Command() ?
3. Sono creati dallo script con un altro metodo RhinoScript ?

Meglio ancora …  
… se lo script non e’ riservato, puoi postarlo ? 🙂

[Pagina seguente](https://it.discourse.mcneel.com/t/problemino-con-gli-array-credo/1249.md?page=2)
