Cerchi decrescenti su un percorso

Forse non avevo capito la domanda … :confused:
Era per sapere come usarlo ?
O ti interessa una spiegazione delle varie istruzioni ?

Se era la seconda, dimmelo e provo a spiegare :slight_smile:

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’. :roll_eyes: :smile:
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 )
1 Mi Piace

grande Emilio :clap: :clap:
se riesco ad imparare qualcosina di buono su C# vedrò di riuscire a fare un comando carino :+1:

va bene quella che già hai dato :ok_hand: