Cose che si possono fare con i DWG (e Dynamo)

Sia ben chiara una cosa: non approvo i workflow misti. La vecchia PAS 1192-2 ci raccontava che il livello minimo in cui è possibile fare BIM è quello in cui tutte le parti in causa usano uno strumento di BIM authoring e che le deroghe possibili sono sull’analisi, al limite, e non potrei essere più […]

Sia ben chiara una cosa: non approvo i workflow misti. La vecchia PAS 1192-2 ci raccontava che il livello minimo in cui è possibile fare BIM è quello in cui tutte le parti in causa usano uno strumento di BIM authoring e che le deroghe possibili sono sull’analisi, al limite, e non potrei essere più d’accordo. Non tanto perché non sia possibile integrare dei file CAD in un flusso collaborativo solido, soprattutto dal punto di vista della gestione documentale, ma perché credo che chiunque stia ancora usando AutoCAD, nel 2021, semplicemente non abbia la mentalità per lavorare in ambiente collaborativo. Ma purtroppo non viviamo in un mondo perfetto e la coltivazione della mediocrità come valore è qualcosa con cui spesso ci troviamo a fare i conti. Quindi gestire dei file DWG potrebbe rendersi necessario.

In più, esistono rari casi in cui AutoCAD viene usato come strumento di progettazione parametrica e vi è quindi un livello di intelligenza, codificato nei blocchi dinamici e nelle routine lisp, che deve essere trasferito al software di BIM authoring.

Questo caso, parlando di infrastrutture, diventa molto meno raro. Civil3d è un software di disegno parametrico, pesantemente rule-based, e per i progetti infrastrutturali non abbiamo, in ambiente Autodesk, un trasferimento totale del suo livello di codifica delle regole, di quello che potremmo chiamare il suo livello di intelligenza, all’interno di altri software. Perché Infraworks è lo SketchUp delle infrastrutture ed è ridicolo pensare di poterlo usare seriamente. Un po’ come è impensabile usare seriamente SketchUp per l’architettura, insomma.

Esattamente come ho fatto per Excel, quindi, vi propongo qualche workflow di base (e un po’ meno di base) per incorporare feed DWG all’interno di un workflow di modellazione informativa per le infrastrutture.

Package essenziali

Come sempre, uso l’estensione Monocle, sempre di John Pierson, per annotare i nodi custom e per il color coding degli script.

1. Analizzare un DWG

Inizio da workflow in lettura, decisamente una delle posizioni più scomode in cui ci si può trovare. Anche l’esportazione può essere dolorosa, ma basterebbe accettare il fatto che comunque chi lavorerà in AutoCAD lavorerà male, altrimenti non starebbe ancora lavorando in AutoCAD.

1.1. Andare a pesca del DWG

Prima di analizzare un DWG bisogna leggere cosa c’è dentro e prima di leggere cosa c’è dentro bisogna trovarlo. Purtroppo esistono diversi modi di perdere un DWG all’interno di un modello: il DWG può essere linkato o importato (c’è un girone dell’inferno apposta per chi importa in DWG anziché linkarli, ed è straordinariamente gremito) e in entrambi i casi può essere inserito in una sola vista anziché in tutto il modello, cosa che spesso ha addirittura senso. Dov’è quindi il nostro cad? Ce lo trova il nodo CAD.ReportInstances di Bimorph.

Gli input al nodo sono semplicemente il file Path e due booleane per sapere se rilanciare un refresh del nodo e se si vuole chiudere il file RVT in cui si trovano i DWG e che si sta analizzando.

Il report ci fornisce:

  • l’id dell’istanza (che viene chiamata ImportInstance sia se è un file importato sia se è linkato)
  • il nome del file;
  • un booleano che ci indica se si tratta di un link o meno;
  • lo status (loaded vs. unloaded);
  • un booleano per dirci se è stato inserito solo in una vista o meno;
  • un parametro che fa riferimento all’orientamento nella vista;
  • il workset su cui è inserito (visibile anche se non si tratta di un file centrale);
  • il percorso completo del file;
  • il livello su cui il cad è posizionato, se non si tratta di un cad inserito solo nella vista.

Troveremo le istanze linkate come output a CADLinks[], mentre quelle importate si trovano nella lista in output a CADImports[].

1.2. Analizzare i layer (e il loro contenuto)

Se si desidera solo una lista dei layer contenuti nel DWG, sempre Bimorph ci fornisce il nodo CAD.LayerNames, che in output ci fornisce un semplice elenco dei nomi dei layer. Importante notare che questo prescinde dal loro effettivo utilizzo per elementi del DWG.

Molto più utile, il nodo CAD.LayerNamesInUse, che porta avanti il corposo lavoro di estrarre tutti i layer e fornirci un report circa il loro utilizzo, con particolare attenzione al fatto che i layer contengano punti, curve o testi. I punti come sappiamo, avranno bisogno di una cura particolare: si tratta di un concetto, infatti, che non trova riscontro nell’ambiente di modellazione tradizionale di Revit.

Ciò che esce da layerNames è una lista analoga a quella che ci restituiva il nodo precedente. Gli altri output sono impostati come una lista di valori booleani e sono pronti pronti per essere usati in una maschera.

Ipotizzando di voler verificare se ci sono layer non in uso, per cominciare, una delle cose possibili è raggruppare le tre risposte per ogni layer e contare il numero di risposte positive nella sottolista. Per risposte maggiori di zero, significa che il layer contiene almeno una delle tre cose che ci interessano: curve, punti o testo. Bisogna “solo” unire le tre booleane in una lista, dare un’appiattita e trasponendo ci troviamo con una lista per ogni layer, ciascuna contenente un gruppo di tre risposte alle tre domande. ll nodo per contare quanti veri si trovano in una lista di booleane si chiama List.CountTrue. Ci è sufficiente che il valore sia maggiore di zero: significa che il layer contiene almeno uno dei tre elementi.

I valori in uscita costituiscono una specie di super-maschera booleana, con la quale possiamo verificare se esistono layer vuoti.

Il risultato finale dovrebbe essere qualcosa del genere. Ma siamo ancora agli inizi.

2. Impostazioni di visibilità

Come è accaduto nel caso dei filtri, l’unico modo per salvare le impostazioni di visibilità di un CAD è inserirle all’interno di un View Template e potrebbe esserci necessità di conservarne l’utilizzo per faccende più serie.

I tipi di impostazione che si possono fare su un CAD sono fondamentalmente due:

  • spegnere un layer;
  • alterarne le proprietà di linea nella specifica vista.

2.1. Spegnere un layer

Per quest’operazione, è il nodo CAD.SetLayerVisibility che fa al caso nostro e che richiede nello specifico solo una booleana.

Ipotizziamo di voler fare questa operazione per tutta una serie di viste, ad esempio per tutte quelle viste che hanno associati view template con una specifica naming convention.

In Revit, il View Template è a tutti gli effetti una vista. Un’altra magagna che emerge alzando il cofano del nostro software di authoring preferito. La cosa è abbastanza evidente, pensandoci, quando ci troviamo a creare un view template per una schedule.

Una volta impostata la grafica di una schedule…
…non sembra sia possibile registrarla né richiamarla come View Template.

Quel piccolo pulsante “Show Views” in basso, nell’assegnazione di un View Template, consente di utilizzare una vista già esistente e di applicare quelle impostazioni alla vista corrente.

Ecco la mia vista, elencata lì, insieme ai View Template.

Duplicando la vista da questa schermata, si ottiene effettivamente un View Template.

Ecco la vista duplicata…
…ed ecco che è un View Template.

Sembra quindi che l’essere o meno un View Template sia una sorta di proprietà di cui gode (o meno) una vista. E infatti è esattamente così.

La cosa è facilmente riscontrabile vedendo ciò che viene elencato davvero nel nodo Views cui, se ricordate, preferisco nodi più specifici.

Eccola lì, sia la mia schedule che il suo template.

Esistono un paio di nodi utili per suddividere questo gran casino. Il primo, Views.ViewTemplate, ci restituisce il view template associato a una vista (oppure null, nel caso non sia associato alcun View Template).

Se vogliamo aggiungere un View Template ad una vista o rimuovere il View Template associato, i due nodi che stiamo cercando sono Views.SetViewTemplate e il suo gemello malvagio, Views.RemoveViewTemplate.

Nel nostro caso però non stiamo cercando di aggiungere un View Template (non questa volta): stiamo solo cercando di capire se il View Template comprende degli override ai DWG.

Esattamente come nel pannello di controllo manuale, gli override ai DWG si trovano sotto VG Overrides Imports: si tratta di un parametro del view template, di cui bisogna verificare l’inclusione. La cosa si fa facilmente con il nodo ViewTemplates.IsIncluded, che restituisce una booleana.

Ora dobbiamo solo provare ad applicare il principio non ad una sola vista, ma a tutte le viste. Il primo passo è estrarle, cosa che si può facilmente fare ricordandosi che anche le viste sono un tipo e che possiamo estrarle tutte semplicemente con All Elements of Type.

Sulla base di quello che abbiamo visto in precedenza, però, in questa lista ci troviamo non solo le viste, ma anche i maledetti View Template. Ciò che non abbiamo ancora visto, però, è che insieme alle viste e ai view template c’è anche altro. Lo scopriamo immediatamente quando proviamo a usare l’innocente View.IsViewTemplate.

Yellow alert.

Null? In che senso null?

Ora, non abbiamo tempo di entrare nel dettaglio su cosa siano quei misteriosi oggetti e sicuramente esiste un modo per filtrare la lista in partenza ed evitare il nodo giallo, ma in questo momento non ci è utile per imparare qualcosa di nuovo. Viceversa, cercherò di farmi andare bene quel nodo giallo e lo userò per filtrare via gli elementi nulli dalla lista di viste.

Sì, è una booleana su una booleana

Posso usare la risposta alla domanda “sei nullo?” per filtrare via quelle viste buffe dalla prima lista di viste.

Il risultato finale, lungo e certamente ottimizzabile, è questo.

Le viste su cui possiamo pasticciare per quanto riguarda i DWG potrebbero essere quelle i cui view template non contengono un override degli oggetti importati e/o quelli senza view template associato: a voi la scelta.

2.2. Impostare la grafica di un layer

Oltre a spegnere un layer, possiamo anche impostarne la visibilità, sempre nel pannello VG Import Overrides, per la sola vista, oppure impostarne le proprietà in tutto il progetto, cercandoli sotto a Manage -> Object Styles. La stessa cosa può essere fatta in Dynamo usando il package SetObjectStyle di Bimorph. Trovate la documentazione ufficiale qui.

 

One Comment

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.