Test Codice Py Common

from Rhino import *
from Rhino.Commands import *
from Rhino.DocObjects import *
from Rhino.Input import *
from scriptcontext import doc
 
def RunCommand():
    rs, obj_ref = RhinoGet.GetOneObject("Select object", False, ObjectType.AnyObject)
    if rs != Result.Success:
        return rs
    rhino_object = obj_ref.Object() #da cambiare con <rhino_object = obj_ref>
    if rhino_object == None:
        return Result.Failure

provando questo script ho notato che se durante la selezione annullo il comando premendo il tasto Dx
del mouse non mi viene annullato il codice ma prosegue fino a dare l’errore
facendo dei test ho provato a togliere .Object() da obj_ref.Object()
ed in questo modo si esce dallo script senza il ritorno di errori.

è corretta la modica fatta, oppure quel .Object() è necessario ma mi sfugge per che cosa?

Non so niente di python.
Ma, con:
rs, obj_ref = RhinoGet.GetOneObject(“Select object”, False, ObjectType.AnyObject)

Definisci sia rs che obj_ref nella stessa riga.
Non puoi, invece, definirli uno alla volta?

Poi, il check “.Success” secondo me dovresti farlo su obj_ref.

Però magari sto sparando boiate, mai usato python.

ciao Riccardo,
non’é un mio codice ma un esempio della documentazione ufficiale c’é anche in C#:

un’altra cosa che non mi quadra e che se ci sono anche altri oggetti in Rhino il comando fallisce
se invece ci sono solo gli oggetti inerenti ad un gruppo selezionandone uno vengono selezionati tutti
(che dovrebbe essere risultato corretto anche nel caso ci siano altri oggetti, selezionare quelli del gruppo)

edit:

questo è un sistema che sto scoprendo ultimamente io prima conoscevo solo il metodo classico cioè:

variabile = comando/metodo (il risultato è una lista)
e quindi usavo variabile[index] per indicare quale risultato della lista volessi utilizzare

se ho controllato bene: indice [0] di RhinoGet.GetOneObject riporta se il metodo ha avuto successo
mentre indice [1] equivarrebbe agli oggetti stessi quindi proseguendo con il codice come hai notato c’é un doppio controllo, anch’io ero perplesso su questa cosa ma magari è necessaria nel caso il metodo è andato a buon fine quindi Success ma contemporaneamente non ha nessun oggetto? (forse. . .)

ho notato che negli esempi vine riportato spesso questo doppio controllo con duplice assegnazione

ps ma in altri post ho visto utenti che dividono i messaggi con delle linee orizzontali, come funziona?

a quanto pare è proprio quello il funzionamento
seleziona oggetti di un determinato gruppo
da una serie di gruppi, mentre se ci sono
oggetti singoli il codice si blocca

def RunCommand():
    rs, obj_ref = RhinoGet.GetOneObject("Select object", False, ObjectType.AnyObject)
    if rs != Result.Success:
        return rs
    rhino_object = obj_ref.Object()
    if rhino_object == None:
        return Result.Failure
 
    rhino_object_groups = [group for group in rhino_object.Attributes.GetGroupList()]
 
    selectable_objects= [
        obj for obj in doc.Objects.GetObjectList(ObjectType.AnyObject)
        if obj.IsSelectable(True, False, False, False)]
 
    for selectable_object in selectable_objects:
        if selectable_object.Attributes.GetGroupList() == rhino_object.Attributes.GetGroupList():
            selectable_object.Select(True)
 
    doc.Views.Redraw()
    return Result.Success

con questa modifica sembra che selezioni solo il gruppo dell’oggetto selezionato (quello che volevo)

1 Mi Piace

Scusami mi ero dimenticato di tornare nel forum ita…
Bene che te la sei cavata… io con python non so nemmeno dove cominciare…

fai tre trattini di seguito “—” dopo una riga vuota

1 Mi Piace

:+1:

eeee ci metto un po di tempo ma alla fine porto a casa il risultato
peccato che per una cosa semplice bisogna sudare 7 camice. . .

per fortuna che mi ero copiato tutti gli esempi di codici della guida online (C# / Py)
e quindi se riesco a capire cosa debbo utilizzare, faccio una ricerca interna dei file
per lo meno sto cercando di capire come muovermi per trovare le risposte giuste

gli esempi online delle API di RCommon mi confondono parecchio
sai per caso se viene riportato come usare metodi / proprietĂ  ecc
per avere uno schema guida prestabilito su cui fare riferimento?