Dunque, ragazzi … puf puf …
Dopo parecchio ravanare, grazie alle spiegazioni di Lucio, forse abbiamo lo script che serve.
A me sembra piu’ utile (anche per eventuale uso personale) poter scegliere quali blocchi semplificare.
Quindi lo script consente di selezionare dei blocchi.
Se non si seleziona niente, lui semplifica tutti i blocchi, come richiesto da Andrea.
… Almeno dovrebbe …
import rhinoscriptsyntax as rs
# import scriptcontext
# import Rhino
def flatten( gid ):
nam = rs.BlockInstanceName( gid )
bobs = rs.BlockObjects( nam )
nes = False
for bob in bobs:
if rs.IsBlockInstance( bob ):
nes = True
break
if not nes:
return False
xfo = rs.BlockInstanceXform( gid )
gids = rs.ExplodeBlockInstance( gid, True )
xfi = rs.XformInverse( xfo )
rs.TransformObjects( gids, xfi )
rs.AddBlock( gids, [ 0.0, 0.0, 0.0 ], nam, True )
rs.InsertBlock2( nam, xfo )
return True
def main():
blos = rs.GetObjects( 'Blocks to flatten [Enter => any block] ?',
filter = 4096, preselect = True )
rs.UnselectAllObjects()
if blos:
nams = set( [] )
for blo in blos:
nam = rs.BlockInstanceName( blo )
nams.add( nam )
else:
nams = rs.BlockNames()
fnams = []
rs.EnableRedraw( False )
for nam in nams:
gids = rs.BlockInstances( nam )
if gids:
if flatten( gids[ 0 ] ):
fnams.append( nam )
rs.EnableRedraw( True )
wrd = 'definition' if len( fnams ) < 2 else 'definitions'
txt = '%d %s flattened: ' % ( len( fnams ), wrd )
for fnam in fnams:
txt += ' %s,' % fnam
print( txt[ : -1 ] )
main()
Non so se ho capito bene come funziona … pero’ sembra che funzioni …
Vedete voi …