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?
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
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)
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?