Forse non avevo capito la domanda …
Era per sapere come usarlo ?
O ti interessa una spiegazione delle varie istruzioni ?
Se era la seconda, dimmelo e provo a spiegare
Ho trovato un vecchio script che serviva per ‘misurare’ al volo tubi e profilati, insomma roba di carpenteria.
( Se interessasse a qualcuno, e’ qui … a me sembra carino … va be’.
c5-guessbb1.py (7,0 KB) )
Dicevo, dal vecchio script ho ricavato una cosa piu’ semplice, che si limita a mostrare la bounding box di un oggetto.
E’ solo un esercizio con il DisplayConduit
… Ho provato a metterci qualche commento …
import Rhino
import scriptcontext
import System
# deriviamo una classe dalla classe DisplayConduit
# per poter settare quello che ci serve
class conduit( Rhino.Display.DisplayConduit ):
# riscriviamo il costruttore
# richiedendo colore, spessore linee e linee da disegnare
def __init__( self, colr, thik, lins ):
Rhino.Display.DisplayConduit.__init__( self )
# definiamo dei campi per salvare i dati
self.lins = lins
self.colr = colr
self.thik = thik
# riscriviamo il metodo PostDrawObject per disegnare cosa serve a noi
def PostDrawObjects( self, eventargs ):
# ricaviamo i dati dai campi e disegniamo le linee
for lin in self.lins:
eventargs.Display.DrawLine( lin, self.colr, self.thik )
# elenco linee da disegnare, data una boundng box
def bblines( box ):
co = list( box.GetCorners() )
lins = ( ( 0, 1 ), ( 1, 2 ), ( 2, 3 ), ( 3, 0 ),
( 4, 5 ), ( 5, 6 ), ( 6, 7 ), ( 7, 4 ),
( 0, 4 ), ( 1, 5 ), ( 2, 6 ), ( 3, 7 ) )
return [ Rhino.Geometry.Line( co[ li[ 0 ] ], co[ li[ 1 ] ] ) for li in lins ]
def main():
colr = System.Drawing.Color.FromArgb( 0, 255, 255 )
thik = 4
# input oggetto
obref = Rhino.Input.RhinoGet.GetOneObject(
'Object for bounding box ?', True,
Rhino.DocObjects.ObjectType.AnyObject )[ 1 ]
scriptcontext.doc.Objects.UnselectAll()
# ricaviamo la bounding box
pla = Rhino.Geometry.Plane.WorldXY
geom = obref.Geometry()
box = geom.GetBoundingBox( pla )
# ricaviamo le linee da disegnare
lins = bblines( box )
# costruiamo il conduit
con = conduit( colr, thik, lins )
# abilitiamo il conduit
con.Enabled = True
scriptcontext.doc.Views.Redraw()
# input dall'utilizzatore per terminare la visualizzazione
Rhino.Input.RhinoGet.GetString( 'Enter to exit', True, '' )
# disabilitiamo il conduit
con.Enabled = False
scriptcontext.doc.Views.Redraw()
main()
EDIT
Il calcolo della bounding box si puo’ semplificare, senza usare piani:
# ricaviamo la bounding box
geom = obref.Geometry()
box = geom.GetBoundingBox( True )