Utilizzo Blocchi

premessa: sul forum int. avevo chiesto se fosse possibile avere una conferma di cancellazione degli oggetti originali come accade su molti comandi, ma mi è stato risposto che quello non fosse un modo appropriato.

volevo chiedere quale sia il corretto uso/scopo nel creare i blocchi?
nel senso: dopo aver creato il blocco, per un giusto utilizzo come si dovrebbe procedere?

Ciao Salvio,
il blocco è semplicemente un modo per inserire lo stesso “oggetto” o “gruppo di oggetti” all’interno di un progetto.
I vantaggi principali che mi vengono in mente sono:

  • file più leggeri
  • possibilità di modificare in contemporanea tutte le istanze dello stesso blocco

Come svantaggio abbiamo che bisogna entrare in modalità editing blocco per fare delle modifiche (in alcuni casi potrebbe risultare complesso se i blocchi sono annidati) e che a volte sia necessario fare pulizia delle definizioni rimaste orfane in quanto non hanno nessuna istanza collegata.

Non comprendo la tua domanda… gli oggetti originali di un blocco diventano un’istanza nel momento in cui il blocco viene definito; anche se li cancelli la definizione del blocco è presente nel file e può essere richiamata tramite il comando INSERT.
Se nel block manager chiedi di eliminare una definizione che ha delle istanze inserite, vieni avvisato con un messaggio di conferma.
Quindi, per eliminare un blocco senza finestre di avviso, devi prima eliminare tutte le istanze e poi andare nel block manager ed eliminare la definizione (oppure eliminare tutto con purge) ma nulla ti vieta di ritornare indietro con UNDO…
Se poi uno riesce comunque a perdere per sbaglio la definizione perchè pigia a caso sulla tastiera e sul mouse, allora è cosa buona e giusta che venga castigato dalla giustizia divina.

2 Mi Piace

ancora. . . :smile: :smile: (pensa che al momento quando premo i due punti per far comparire la lista delle
emoticons quando clicco su altro mi scompare del tutto la lista senza poter fare nessuna scelta)

non intendevo il blocco che si crea nel manager, ma gli oggetti che si usano con la selezione per creare il blocco. appunto come hai detto, quando si crea un blocco, gli oggetti selezionati, diventano istanza stessa.

il ragionamento che faccio, se ho 100 oggetti e creo n blocchi utilizzando per ogni blocco n oggetti mi
ritrovo con n blocchi ma senza oggetti. a meno che non mi faccio una copia prima o esplodo dopo.

mentre per come la vedo io, gli oggetti dovrebbero sempre rimanere a disposizione dell’utente, i blocchi
mi dovrebbero servire come contenitore apposito dove il quale come hai detto per modificarli bisogna
procedere di proposito con editing. mi sfugge il senso per il quale funziona in questo modo.

o meglio, quale vantaggio sia, il non avere a disposizione gli oggetti inseriti in un blocco. . . unica
cosa che mi viene in mente, e che dopo aver creato il blocco quei oggetti non si debbano modificare.

Ah ok, adesso ho capito cosa intendi.

Io invece mi domando il contrario: quale vantaggio avrei nel creare un blocco mantenendo comunque una copia degli oggetti?
Sarebbe come se, raggruppando degli oggetti con group, volessi mantenere una copia degli oggetti non raggruppati o se, facendo un join di due superfici, volessi mantenere una copia delle superfici singole…
In ogni momento posso prendere un oggetto, farne una copia ed esploderlo oppure estrapolarlo da un gruppo…
Il fatto di mantenere una copia dell’originale va bene per comandi come Rebuild, mesh oppure SubD dove l’oggetto viene trasformato perdendo la possibilità di tornare indietro…
Forse, se il tuo scopo è quello di preservare gli oggetti da modifiche involontarie, il comando che ti serve è Lock (l’icona con il lucchetto) che puoi applicare sia ai layer che ai singoli oggetti…

proprio l’incontrario, avere modo di modificare oggetto origine (curva ecc) in qualsiasi momento,
e quindi poter modificare velocemente istanza sostituendo oggetto modificato con quello precedente.

(come anche, avere sempre a disposizione l’oggetto X per combinarlo con un blocco diverso)

ripeto, la mia idea di blocchi, è avere un contenitore degli oggetti* visibili nella vista, e veloce da editare.
(*oggetti singoli e non istanze e gruppi o cose simili dove per modificare oggetto dovrei prima estrapolarlo)

ps Lucio ricordo che per te i blocchi sono un argomento di forte interesse,
secondo il tuo pensiero, come dovrebbero funzionare efficientemente i blocchi?

Quello che stai descrivendo è proprio come funzionano i blocchi: doppio click su una istanza per entrare in modalità edit, fai le modifiche e quando chiudi l’edit tutte le istanze vengono aggiornate.
Ci sono anche comandi per aggiungere e togliere oggetti da un blocco senza star li ad esploderlo e ricostruirlo.
Puoi anche fare una copia di un oggetto, entrare in editing di un blocco e incollare l’oggetto dagli appunti…
L’unica cosa che non esiste è il fatto di avere degli oggetti “padre” da qualche parte in giro (non so dove dovrebbero essere posizionati o identificati) che comandano sugli altri… sarebbe ingestibile…

Esistono anche i blocchi linkati che sono dei collegamenti a file esterni; apri il file del blocco e fai le modifiche → tutti i file che contengono istanze collegate a quel file vengono aggiornate.
Altro metodo è il worksession manager con il quale puoi collegare vari pezzi di progetto (vari files) senza che tutte le geometrie siano all’interno dello stesso file (puoi lavorare contemporaneamente in più persone allo stesso progetto ognuno da un file diverso).

Io sono abbastanza contento con il sistema attuale… non mi pare ci siano problemi.
Avevo chiesto di poter avere il block manager sempre visibile nei panel e adesso nella V8 c’è il pannello “Block Definitions”… mi pare che ci siano degli ottimi passi in avanti.
Poi sta all’utente creare una gestione del progetto che sia efficiente.
Se uno fa un oggetto singolo e lo trasforma in blocco senza la necessità di replicarlo allora si sta complicando la vita per nulla.
Se invece ti serve fare una libreria di oggetti standard e li importi nel progetto come blocchi collegati allora stai facendo una cosa sensata.
Per esempio, l’altro giorno un cliente mi ha chiesto di modellare velocemente una seduta con due montanti e un centinaio di tondini tutti della stessa lunghezza; ho fatto il montante e trasformato in blocco, disegnato il tondino e trasformato in blocco.
Copiato il secondo montante e replicato i tondini dove servivano e in due secondi ho fatto un modello che potevo modificare con un paio di click.
Vuoi allungare i tondini? Doppio click su una istanza, subselezionato la testa del tondino e spostata → tutti i tondini aggiornati.
Serve un raggio? Doppio click, aggiunto il raggio e tutte le istanze aggiornate…
Mi pare che il sistema sia buono…

concordo :+1:
Rh8 ha fatto grandi passi in avanti in tante cose, e la gestione dei blocchi fa perte di queste migliorie

sono molto contento delle ultime realese, ovviamente si cerca sempre di fare uno step in più
per quanto mi riguarda, tutto questo è per ottemperare alla mancanza della parametrizzazione

basterebbero un paio di piccole cose, come un comando elimina oggetto da un blocco
immagine
come appunto esiste già il comando Aggiungi oggetto in un blocco esistente

2788ea415062be218bbe7edc4de7d427963da3bb

anzi avevo proprio suggerito di poter aggiungere i 3 pulsanti Add / Remove / Set
nel menù quando si clicca col tasto destro del mouse di un blocco
proprio per evitare di dover fare il doppio click su una istanza
essendo che per praticità resterebbero solo nel manager

ovviamente ognuno ha le proprie esigenze, ma credo che queste modifiche da me citate non comportino
un problema per chi come nel caso che hai descritto abbia la necessità di avere fisicamente le istanze.

in Rh5 tramite script, mi ero fatto un codice per gestire velocemente i blocchi, e ti dico che era non era stato proprio facile, fu una delle cose più contorte da fare, anzi ci avrei dovuto rimettere mano per migliorarlo.

ps converrai che senza avere le istanze nelle viste, diventa più contorta la modifica di un blocco.

Ma lo si può fare con il doppio click, come ben diceva Lucio.

si ma bisogna avere le istanze,
invece come dicevo, io le istanze non le uso.
(interesse è solo quello di avere n oggetti in un blocco)

Lo fai da script:

Esempio di script che definisce un nuovo blocco senza cancellare gli oggetti e senza disegnare istanze


import Rhino
import scriptcontext

def main():
  res, refs = Rhino.Input.RhinoGet.GetMultipleObjects( 
      'Objects ?', True, Rhino.DocObjects.ObjectType.AnyObject )
  atts = [ ref.Object().Attributes for ref in refs ]
  geos = [ ref.Object().Geometry for ref in refs ]
  tabl = scriptcontext.doc.InstanceDefinitions
  indx = tabl.Add( 
      'name', 'description', Rhino.Geometry.Point3d.Origin, geos, atts )
  print( 'Index = ' + str( indx ) )

main()

Esempio di script che disegna istanza del blocco con indice 0 nel punto 250,0,0

import Rhino
import scriptcontext

def main():
  xfo = Rhino.Geometry.Transform.Translation( 250, 0, 0 )
  indx = 0;
  scriptcontext.doc.Objects.AddInstanceObject( 0, xfo )
  scriptcontext.doc.Views.Redraw()

main()

I blocchi di Rhino non funzionano cosi’
Gli oggetti che usi per definire il blocco non sono collegati al blocco in nessun modo.
Se li sposti il blocco non cambia.

si infatti per anche questo avevo chiesto, un messaggio/opzione per far scegliere se cancellare o meno.

eeee lo avevo pensato, se fossero collegati sarebbe proprio ideale

con n oggetti crei un blocco scegliendo di creare o meno istanza e se cancellare o meno le basi
poi se modifichi uno degli oggetti di origine si modifica di conseguenza anche il blocco corrispondente.

ma questo solo in un mondo perfetto ahahahah

Che è esattamente quello che succede generando il blocco (che diventa una singola istanza) ma che tu, non ho capito per quale motivo, vuoi evitare…
Cioè vuoi avere una definizione di un blocco senza che ci sia un’istanza ma che, comunque, sia collegato a degli oggetti (che sarebbero identici ad un’istanza) che puoi editare come se non fossero un blocco… perchè è fastidioso dover fare doppio click…
Definire una cosa per non utilizzarla e continuare a modellare come se questa cosa non esistesse… per il gusto di avere un collegamento a qualcosa che non serve… è diabolico… Salvio, tu vuoi far impazzire gli sviluppatori di McNeel, di la verità, sei un anarchico caddista :rofl:
Cioè, seriamente, fammi un piacere non chiedere nulla alla McNeel che dopo non gli venga l’idea di fare qualche modifica che rimango a piedi e non posso più lavorare :pray:
Poi mi tocca venire a trovarti a casa… ma non per fare festa… ti porto il conto dei danni!!! :sweat_smile:

1 Mi Piace

ahahahah ahahahah
:rofl: :rofl: :joy:

grande Lucio, mi mancava la tua ironia ahahahah :rofl: :rofl:

vabbe comunque per non farla troppo tragica, il senso delle mie intenzioni sarebbe semplicemente
quello di avere n oggetti in vari blocchi, per poi inserire in schede e successivamente esportarli.

forse spiegato così si trova il senso per lo scopo che intendo io, ovviamente potendo modificare il blocco.

Ok, adesso ho capito, sarebbero dei blocchi annidati: definisci gli oggetti che devono appartenere a più blocchi come blocco e poi li aggiungi nelle definizioni dei blocchi finali; in questo modo si annidano uno all’interno dell’altro e, nel caso tu modifichi uno degli oggetti “comuni” tutti i gruppi di blocchi verrebbero aggiornati a cascata…
In questo caso la gestione diventa un pò più complessa, ma comunque molto più gestibile in Rhino 8.0 rispetto alla 7.0.
Però devi cercare di adattarti alla struttura ad albero proposta da Rhino se vuoi venirne a capo, farlo con comandi pastrocciati ho paura diventi un’arma a doppio taglio (rischi di ritrovarti blocchi annidati N volte che poi non riesci più ad estrapolare).
Allego un esempio di blocchi annidati
Prova_Blocchi.zip (279,6 KB)

sorry meglio se avessi scritto: n oggetti nei rispettivi blocchi :pray:

ps comunque ho aperto il tuo file, ed ho iniziato a giocarci un po, ed ho notato una cosa nuova,
se si elimina un blocco intero per sbaglio, con undo lo puoi recuperare
mentre se elimini un oggetto all’interno del blocco è perso per sempre.

credo che questo sia pericoloso!