sabato, maggio 03, 2014

Hatch to Room Macro 2014





Con questa macro è possibile ricavare delle linee di delimitazione dei locali direttamente dagli hatch in un file CAD collegato nel progetto di Revit.
Il piano di tracciamento coincide con il livello della vista in cui si esegue il comando.
Può essere utile per quei progetti di rinnovo dell'esistente che hanno per base dei rilievi fatti in CAD per cui si renda necessario evidenziare i locali dello stato di fatto direttamente da Revit.

Questo il codice sorgente della macro (it works for Revit 2015 too).

If you're happy with my code, please Pay What You Want via PayPal to:

puntorevit@gmail.com

giovedì, maggio 01, 2014

Fire Rating Stripes+Tags macro 2014 - Update



Grazie al feedback di un lettore ho potuto sistemare un  paio di inconsistenze nel codice sin qui sviluppato:
Quando sono presenti sia linee di dettaglio sia linee di modello la macro dava un messaggio di errore, è bastato aggiungere un filtro per gli elementi curva specificando che il tipo di oggetto che interessa per far funzionare la macro sono solo le linee di dettaglio:

CurveElementFilter detline =new CurveElementFilter(CurveElementType.DetailCurve,false);

Successivamente quando si va a comporre la lista delle linee di dettaglio da eliminare si deve aggiungere questa condizione di filtro, pertanto il blocco relativo diventa:

IList OldLines = new FilteredElementCollector(doc).
OfCategory(BuiltInCategory.OST_Lines).
WherePasses(detline).
Cast().
Where(x=> x.LineStyle.Name.StartsWith("Fire Rating - ")
                                                         && 
                                                         x.OwnerViewId.IntegerValue==doc.ActiveView.Id.IntegerValue)
.ToList();

La seconda revisione invece riguarda i muri creati da superficie (come le masse), perché non hanno la proprietà di LocationCurve che serve per creare la linea di dettaglio e ricavare poi il posizionamento delle etichette.
Per il momento questo tipo di muri vengono esclusi dalla macro, ho quindi inserito un blocco try/catch che verifica appunto se il muro è da tracciamento oppure no:

foreach (Reference r in Walls)
{
Wall e = doc.GetElement(r) as Wall;
try {
lc = e.Location as LocationCurve;
} catch (Exception) {

continue;
}
......

Qui il codice aggiornato.

If you're happy with my code, please Pay What You Want via PayPal to:

puntorevit@gmail.com