# Doppio Controllo RCommon

**URL:** <https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127>\
**Category:** Scripting e Programmazione\
**Created:** [26 Aprile 2023, 4:51pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127 "2023-04-26T16:51:21Z")\
**Posts on this page:** 16\
**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:** [26 Aprile 2023, 4:51pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/1 "2023-04-26T16:51:21Z")

</div>

```auto
import Rhino
import scriptcontext
 
def CircleCenter():
    go = Rhino.Input.Custom.GetObject()
    go.SetCommandPrompt("Select objects")
    go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve
    go.GeometryAttributeFilter = Rhino.Input.Custom.GeometryAttributeFilter.ClosedCurve
    go.GetMultiple(1, 0)
    if go.CommandResult()!=Rhino.Commands.Result.Success:
        return go.CommandResult()
 
    objrefs = go.Objects()
    if not objrefs: return Rhino.Commands.Result.Nothing

```

c’é qualche motivo particolare, che nei vari esempi, per lavorare con RCommon  
viene fatto un primo controllo con **Commands.Result** e poi un secondo con **if not objrefs:**  
ma se col primo if il risultato è **Success** conseguenzialmente **objrefs** deve essere per forza **True**  
(considerando anche, che prima del **Get** in genere vengono impostati sia tipo di oggetto che gli attributi)

questo è un’altro esempio:

```auto
import Rhino
import scriptcontext
 
def IntersectLines():
    go = Rhino.Input.Custom.GetObject()
    go.SetCommandPrompt( "Select lines" )
    go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve
    go.GetMultiple( 2, 2)
    if go.CommandResult()!=Rhino.Commands.Result.Success:
        return go.CommandResult()
    if go.ObjectCount!=2: return Rhino.Commands.Result.Failure
 
    crv0 = go.Object(0).Geometry()
    crv1 = go.Object(1).Geometry()
    if not crv0 or not crv1: return Rhino.Commands.Result.Failure

```

---

<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:** [26 Aprile 2023, 5:48pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/2 "2023-04-26T17:48:07Z")

</div>

> [@0904](#):
>
> c’é qualche motivo particolare

Questo non lo so.  
Si potrebbe chiedere a chi ha scritto quelle istruzioni. 🙂

Ma, almeno secondo la mia modesta esperienza, si puo’ fare anche in altri modi.  
Ad esempio:

```python
  # [...]
  gob = Rhino.Input.Custom.GetObject()
  gob.AcceptNothing( True )
  gob.AcceptString( True )
  gob.SetCommandPrompt( 'Objects to move ?' )
  gob.GetMultiple( 0, 0 )
  res = gob.Result()
  if res == Rhino.Input.GetResult.Object:
    obrefs = gob.Objects()
    gids = [obref.Object().Id for obref in obrefs]
  else:
    return
  # [...]

```

---

<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:** [26 Aprile 2023, 10:41pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/3 "2023-04-26T22:41:38Z")

</div>

> [@emilio](#):
>
> Si potrebbe chiedere a chi ha scritto quelle istruzioni.

eeee magari ci provo. . .

Emilio ho notato che ci hai preso gusto con le liste comprehension 😉

---

<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:** [26 Aprile 2023, 11:23pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/4 "2023-04-26T23:23:28Z")

</div>

> [@0904](#):
>
> ci hai preso gusto con le list comprehension

Si’, nei casi semplici lo trovo piu’ comprensibile,  
la funzione risulta piu’ corta/compatta.  
Aiuta ad avere sott’occhio un maggior numero di istruzioni.

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [27 Aprile 2023, 4:27am UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/5 "2023-04-27T04:27:56Z")

</div>

Domanda già trattata. I metodi get possono accettare un input vuoto per vari motivi.

---

<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:** [27 Aprile 2023, 1:19pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/6 "2023-04-27T13:19:06Z")

</div>

ciao Sergio,  
come già accennato, se il risultato è “Success” dovrebbe significare che input è senz’altro “True”?

> [@Sergio\_Alessi](#):
>
> I metodi get possono accettare un input vuoto per vari motivi.

potresti indicare un caso da replicare, in cui il risultato è “Success” ma input invece è “False”?

---

<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:** [27 Aprile 2023, 2:33pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/7 "2023-04-27T14:33:08Z")

</div>

> [@0904](#):
>
> **objrefs** deve essere per forza **True**

Tra parentesi, **objrefs** non e’ un booleano, e’ una array di **ObjRef** , quindi il controllo dovrebbe essere sul fatto che contenga degli elementi o meno.  
( O che eventualmente non sia **None** … Su queste cose la documentazione di RhinoCommon non sempre e’ completa )

Ma a parte questo …  
Volevo fare una considerazione in generale, non specifica per questo caso. 🙂

Nessuno ci vieta di aggiungere un controllo in piu’.  
( Meglio uno in piu’ che uno in meno 😉 )  
Un controllo puo’ anche essere inserito solo per precauzione.  
Un po’ di ridondanza di solito non guasta.  
Inoltre alcune istruzioni, eventualmente comprendenti un controllo, possono essere state copiate da un altro programma.

Riguardo a questi esempi comunque puo’ benissimo esserci un motivo per inserire controlli ulteriori … come gia’ detto, non ho idea … 😊

---

<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:** [27 Aprile 2023, 3:47pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/8 "2023-04-27T15:47:08Z")

</div>

> [@emilio](#):
>
> Inoltre alcune istruzioni, eventualmente comprendenti un controllo, possono essere state copiate da un altro programma.

eeee potrebbe essere un motivo, in effetti io ho sempre il brutto vizio di pensare la programmazione, che serve ad una singola persona sul suo pc in locale, mentre sopratutto oggi è vero l’incontrario;  
programmi che si condividono, file in remoto, dati presi chissà dove o da altri programmi,  
ovviamente possono essere tanti motivi validi. a maggior ragione dopo questo ragionamento,  
sarebbe utile conoscerlo, metterlo così a caso senza cognizione di causa non ha senso. . .

ps comunque pensandoci, e vero che in questo caso ho visto sempre (quasi) questo doppio controllo,  
ma alcune volte già mi è capitato di vedere, parti di codici che non centrano proprio nulla in quel contesto.

edit:

> [@emilio](#):
>
> ( O che eventualmente non sia **None** … Su queste cose la documentazione di RhinoCommon non sempre e’ completa )

chissà forse per chi vuole approfondire il discorso organizzeranno dei corsi specifici. . .

---

<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:** [27 Aprile 2023, 5:56pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/9 "2023-04-27T17:56:32Z")

</div>

> [@0904](#):
>
> chissà forse per chi vuole approfondire il discorso organizzeranno dei corsi specifici. . .

E’ una battuta ? 😄

---

<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:** [27 Aprile 2023, 6:48pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/10 "2023-04-27T18:48:26Z")

</div>

> [@emilio](#):
>
> E’ una battuta ? 😄

non proprio. . . essendo che come si è detto essere una guida carente  
tranne alcune cose che si possono capire/imparare come autodidatti  
avendo ovviamente già esperienze di altri linguaggi, non sono proprio  
convinto che da soli si possa fare cose complesse (magari mi sbaglio)

mi sa un pò di quelle cose che solo poche persone hanno modo di poter accedere  
quindi avevo immaginato una cosa come, corsi che fanno per diventare formatori **ART**  
tipo un corso per developers C# per chi intendesse anche voler fare plug-in da rivendere

quello sopra era il mio pensiero, poi nel caso ho detto una corbelleria, allora si: **era una battuta** 😄 😄

---

<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:** [27 Aprile 2023, 9:21pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/11 "2023-04-27T21:21:54Z")

</div>

> [@0904](#):
>
> si è detto essere una guida carente

Ah, OK. Parlavi delle informazioni su RhinoCommon in generale. Giusto.  
Io mi concentravo solo sul valore restituito, in questo caso dal metodo **Objects()**, quando non viene selezionato nessun oggetto.  
😄  
Si’, certo. Un tutorial sull’utilizzo di RhinoCommon sarebbe utile. 🙂  
Soprattutto perche’ la libreria puo’ essere utilizzata anche per gli script, quindi in genere non da professionisti.

Ma al giorno d’oggi queste cose sono sempre meno comuni.  
Ormai viviamo nell’era dell’approssimazione.  
Non solo per scelta secondo me. Credo c’entri anche il gran numero di strumenti disponibili e la loro sempre maggiore complicazione. ( Nonche’ i prezzi ridotti rispetto al passato )  
Sarebbe impossibile (almeno per quasi tutti) imparare bene come funziona lo strumento che devi usare.  
Allo stesso modo sarebbe un lavoraccio star dietro con la documentazione a tutte le novita’.  
Almeno al nostro livello …

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [27 Aprile 2023, 10:23pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/12 "2023-04-27T22:23:11Z")

</div>

Result non è un boolean.  
All’oggetto Get setta acceptnothing true e prova.  
E comunque una riga di codice non ti cambia la  
vita.

---

<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:** [27 Aprile 2023, 10:49pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/13 "2023-04-27T22:49:53Z")

</div>

> [@Sergio\_Alessi](#):
>
> All’oggetto Get setta acceptnothing true e prova.

eeee una bella differenza:  
se acceptnothing=false e non seleziono nulla il result ritorna cancel  
se acceptnothing=true e non seleziono nulla il result ritorna success  
e quindi in questo caso il secondo controllo non’é necessario ma obbligatorio

Sergio non voglio fare il libro del perché, ma a questo punto la domanda si trasforma in:  
a che scopo avere acceptnothing=true/false che ritorna come risultato success/cancel?

ps una riga di codice in più non cambia la vita, ma credo siano cose comunque importante da conoscere.

edit:  
magari mi sbaglio, ma potrebbe essere acceptnothing=true/false collegato alla preselezione degli oggetti?

---

<div class="post-metadata">

**Author:** ![Sergio\_Alessi](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/sergio_alessi/32/22676_2.png) [@Sergio\_Alessi](https://it.discourse.mcneel.com/u/Sergio_Alessi)\
**Post date:** [28 Aprile 2023, 5:19am UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/14 "2023-04-28T05:19:56Z")

</div>

acceptnothing serve per confermare valori predefiniti e probabilmente anche gli elementi  
preselezionati. Con questa opzione penso che result non restituisce success o cancel ma  
success, nothing o cancel.  
Se per ipotesi hai opzione acceptstring attiva ma il risultato che vuoi è la selezione di oggetti,  
se immetti un testo il comando restituisce success ma il buffer della selezione è vuoto.  
La possibilità di personalizzare l’input offerta da rhino consente di creare comandi iterativi  
molto accattivanti ma richiede un controllo efficiente di result.

---

<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:** [28 Aprile 2023, 8:17am UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/15 "2023-04-28T08:17:57Z")

</div>

> [@Sergio\_Alessi](#):
>
> Se per ipotesi hai opzione acceptstring attiva ma il risultato che vuoi è la selezione di oggetti,  
> se immetti un testo il comando restituisce success ma il buffer della selezione è vuoto.

ottima oddervazione, quindi come quando si va a selezionare un oggetto punto,  
e contemporaneamente nel caso, puoi anche digitare le sue coordinate,  
il comando va a buon fine ma non è stato preso nussun oggetto.

edit:

> [@Sergio\_Alessi](#):
>
> Con questa opzione penso che result non restituisce success o cancel ma  
> success, nothing o cancel.

stavo provando come far ritornare in result **nothing**  
ho visto degli esempi che lavoravano con scritte/testi

e guardando la guida sembra che ci siano anche altri risultati:

 ![immagine](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/2X/9/9d9722e0a037aa51c5f2d7da7db6f08a426c3a3e.png)

---

<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:** [17 Maggio 2023, 11:51pm UTC](https://it.discourse.mcneel.com/t/doppio-controllo-rcommon/5127/16 "2023-05-17T23:51:41Z")

</div>

> [@emilio](#):
>
> Si potrebbe chiedere a chi ha scritto quelle istruzioni.

domandare è lecito, rispondere è cortesia.

> **[Double check RCommon](https://discourse.mcneel.com/t/double-check-rcommon/158978/2?u=0904)**
>
> Old C++ habits die hard…

grazie Dale.
