RCommon Input Oggetti

import Rhino

rc, obj_ref = Rhino.Input.RhinoGet.GetOneObject("Select curve", True, Rhino.DocObjects.ObjectType.Curve)
print obj_ref

objj = Rhino.Input.Custom.GetObject()
objj.Get()
print objj.Object(0)

in objj.Object(0) ha bisogno di un argomento e di consueto viene usato lo 0
ma anche cambiando lo 0 con un altro valore il risultato è sempre lo stesso.

Non su Rhino 6.
Comunque, dato che Get() seleziona un solo oggetto, non ha senso andare a vedere cosa restituisce Object() con indici maggiori di zero.

torna un errore?

Tu dici che il risultato e’ lo stesso.
Mostralo.

Select object
<Rhino.DocObjects.ObjRef object at 0x000000000000002B [Rhino.DocObjects.ObjRef]>

Select object
<Rhino.DocObjects.ObjRef object at 0x000000000000002C [Rhino.DocObjects.ObjRef]>

Select object
<Rhino.DocObjects.ObjRef object at 0x000000000000002D [Rhino.DocObjects.ObjRef]>
print objj.Object(0)

print objj.Object(1)

print objj.Object(2)

a me sembra lo stesso risultato. . .

Io vedo 3 indirizzi diversi.

questo lo vedo anch’io, ma se è quella la differenza cambiando il valore a cosa serve ciò?

comunque non vedo corrispondenza

<Rhino.DocObjects.ObjRef object at 0x000000000000002E [Rhino.DocObjects.ObjRef]>

sopra il risultato di print objj.Object(12)

quindi sembra che continua la sequenza che precede

Quindi non e’ lo stesso risultato.

Non credo di capire di cosa parli …

Comunque, come sappiamo Object(0) restituisce l’ObjRef dell’oggetto selezionato.
Gli altri valori sono praticamente … “monnezza”.
RhinoCommon non ci dice niente di quei valori, non sappiamo niente di loro, non c’e’ motivo di usarli.

Per passare dal sesso degli angeli alle cose concrete … hai provato, per esempio, a ricavare la geometria da quei 3 valori ?

print objj.Object(0)
print objj.Object(0).Object()
print objj.Object(0).Object().Geometry

se intendi tipo questo sopra si:

<Rhino.DocObjects.ObjRef object at 0x0000000000000043 [Rhino.DocObjects.ObjRef]>
CurveObject: (unnamed) (0)
<Rhino.Geometry.NurbsCurve object at 0x0000000000000044 [Rhino.Geometry.NurbsCurve]>

sopra il risultato ritornato.

dici che è inutile avere la risposta alla domanda che ho posto. . .

OK.
Ma hai provato a fare lo stesso con Object(1) e Object(2) ?

Non ho capito qual e’ la domanda di cui parli.
Puoi ripeterla per favore ?

volevo sapere a cosa servisse

print objj.Object(0)

cambiando il valore dello 0
il risultato è sempre lo stesso:

[Rhino.DocObjects.ObjRef]

ipotizzo: magari cambia con il GetMultiple?

Ripeti tutti e 3 i print che hai scritto per Object(0)
Compresi RhinoObject e Geometry

objj = Rhino.Input.Custom.GetObject()
objj.Get()
print objj.Object(0)
print objj.Object(0).Object()
print objj.Object(0).Object().CurveGeometry
<Rhino.DocObjects.ObjRef object at 0x0000000000000065 [Rhino.DocObjects.ObjRef]>
CurveObject: (unnamed) (0)
<Rhino.Geometry.NurbsCurve object at 0x0000000000000066 [Rhino.Geometry.NurbsCurve]>

sembra come prima cambia sempre indirizzo di memoria dovrebbe essere. . .

sembra proprio questo il punto cardine:

objj = Rhino.Input.Custom.GetObject()
objj.GetMultiple(1,0)
print objj.Object(0).Object()
print objj.Object(1).Object()
CurveObject: (unnamed) (0)
PointObject: (unnamed) (0)

mah, quindi in teoria utilizzando objj.Get() non ci sarebbe bisogno di nessun parametro. . .

ps (magari serve con gli oggetti raggruppati o cose simili)

Salvio, come te lo devo dire ?
Prova a ricavare la geometria da Object(1) e Object(2).

Cosi’ verifichi se danno lo stesso risultato di Object(0)

1 Mi Piace

con la geometria da un errore

print objj.Object(10).Object().CurveGeometry

sopra è esempio che ho fatto, che torna errore

se invece intendi altro, posta la riga che dici di mandare in print

Appunto.
Quindi e’ confermato che, se usiamo Get(), Object(0) fa quello che dice RhinoCommon: ci permette di ottenere l’oggetto selezionato.
Object(1) ecc. non servono a niente … e non e’ scritto da nessuna parte che abbiano un qualche significato o utilizzo.
Non sono per niente la stessa cosa di Object(0).

Ovviamente, se selezioni piu’ di un oggetto, cambia il numero di oggetti che puoi ottenere tramite Object(), usando i vari indici.

Object() funziona sempre allo stesso modo, cambiano l’indice ottieni gli oggetti selezionati.
Certo se selezioni 3 oggetti non puoi ottenerne 4, cosi’ come se selezioni un oggetto non puoi ottenerne 2 o 3.

Poi se Object() ti turba, usa Objects(), cosi’ ottieni direttamente una array con tutti gli oggetti selezionati.

https://developer.rhino3d.com/api/rhinocommon/rhino.input.custom.getobject/objects

ok, era proprio questa prova che volevo ottenere, che non sono la stessa cosa
e per questo, che secondo me errore avrebbe dovuto verificarsi anche con:

print objj.Object(10)

e non solo con:

print objj.Object(10).Object().CurveGeometry

ricapitolando, se queste tre strighe non sono la stessa cosa:

print objj.Object(0)
print objj.Object(1)
print objj.Object(2)

una volta che il valore è diverso da 0 dovrebbe ritornare errore,
per lo meno è quello che seguendo il ragionamento degli indici.

(ma di sicuro manca qualcosa che non so)