sabato, dicembre 21, 2013

Revit Add Ons

Tim Grimm di Revit Add-ons mi ha fatto una bella sorpresa offrendosi di ospitare gratuitamente un banner che rimanda al mio blog per darmi più visibilità.


Revit Add-ons è letteralmente una miniera di strumenti per Revit, sia a pagamento sia gratuiti, che permettono di migliorare il nostro flusso di lavoro con il software. Le recensioni sono essenziali e ben fatte e contribuiscono molto a sensibilizzare e guidare gli utenti alla scelta degli strumenti migliori per il loro lavoro senza troppi giri di parole.

Thanks Tim!

venerdì, dicembre 20, 2013

View Depth Override - Alcune considerazioni



Il grande Jeremy Tammik di The Building Coder mi ha fatto l'onore di pubblicare sul suo blog il mio codice relativo al View Depth Override sia per viste 2D sia per viste 3D.
Nei commenti, un lettore di nome Ning, ha delle perplessità riguardo alle coordinate che ho utilizzato nel codice, questa la mia risposta nel tentativo di dipanare i suoi dubbi.
E' una breve storia (ancora non conclusa per altro) del processo che mi ha condotto a determinate scelte per impostare il codice, la scrivo in inglese (perdonate gli erroracci) ma se qualcuno non capisse posso tradurla in italiano nei commenti... ogni aiuto o suggerimento in tal senso è ben accetto!

Questo quanto chiede Ning:

"hi Paolo and Jeremy,

i'm trying to understand that 3DView Depth Override stuff, by using my own simplified code, works OK for plan / section / elevation views, but i have trouble to understand the coordinate system in terms of relationship between 3DView's Cropbox and Outline used in BoundingBoxIntersectsFilter, i assume the followings:
1) Boundingbox of 3DView's Cropbox is in coordinate system on top of the computer screen in which Z is perpendicular to the computer screen
2) Outline used in BoundingBoxIntersectsFilter is in Revit coordinate system

a bit description in your blog will be great, perhaps Jeremy can give a more technical detailed explanation in the future"

Questa la mia risposta:

Hi Ning,
sorry for the late reply, I'll try to make myself clear about what you're asking.
When I tried to code this macro I was at the beginning of my "API journey" and I'm sure I wouldn't be making the same choices if I had to do it again from scratch.
You're assumptions are correct: View BoundingBox has to be transformed into absolute coordinates to work properly as an Outline.
All started with 2D views: view coordinates are realtive to each view and there are three vectors defining the space: the RightDirection (let's say local x axis), the UpDirection (local y axis) and ViewDirection (local z axis, which is orthogonal to the screen as you mentioned).
That said, I guess one can obtain the Outline necessary to the BoundingBoxFilter from here, taking a shortcut and simplyfing the code a bit, but still, you need to convert from local to absolute coordinates to build a proper Outline.
This is also important to implement the subfunction called "Integral", which collects all ElementIds in a series of smaller BoundingBoxes (200 subdivisions for each one of the three segments of the main BoundingBox), because in case of views that are not parallel to the edges of the screen, a single BoundingBox would generate errors in the selection.
When I began to study a macro for 3D views I decided to restrict the code only for perspective views because that made more sense to me; I tried to reuse as much as possible the code I had for 2D views, but I took a different approach to determine the Bounding Box: I choosed to consider the entire Bounding Box of the model (this is the part where Jeremy's blog comes in), then I rotated (it's better say projected, transformed) this overall BoundingBox "parellel" to the perspective view (but keeping the top and the bottom faces parallel to the ground) and then execute the same code for 2D Views.
It's a work in progress though, I couldn't find the Bounding Box of a perspective view as I did before for a 2D view, and that's an issue still opened since I hadn't look into it since I published the code. I'm open to all the help I can get :)
I hope this helped you in a better understanding of what's behind the code.

Cheers


-Paolo


If you are happy with my code you can show me some gratitude paying what you want on PayPal:

puntorevit@gmail.com

mercoledì, dicembre 18, 2013

External Command: Site XYZ Family In & Out



Questo external command esporta le coordinate delle famiglie riferite alle coordinate del Survey Base Point e per differenziarlo da quello precedente il file CSV ha un suffisso "-Site" ma viene sempre salvato sul desktop con il nome del progetto.

Ovviamente il comando considera la project location corrente e non tutte le altre che possono essere presenti.

Qui si trova il codice, qui la DLL, e qui l'ADDIN, i file sono da copaire qui:

C:\ProgramData\Autodesk\Revit\Addins\2014\

Potrebbe essere utile anche consultare questo articolo per sbloccare i file .dll

If you are happy with my code you can show me some gratitude paying what you want on PayPal:

puntorevit@gmail.com

External command: XYZ Family In & Out - Update






Ho apportato qualche modifica al codice del post precedente, la versione aggiornata si può trovare qui ed ora consente di aggiornare la posizione delle famiglie modificando il file CSV associato al progetto.
Ho corretto l'esportazione che ora utilizza il punto come separatore decimale così non si confonde con la "," del CSV.
Quando si vuole modificare una famiglia su host da CSV potrebbero verificarsi risultati inattesi poichè prevale la relazione che intercorre tra host e famiglia (quindi lo spostamento c'è ma avviene lungo l'host).

Qui invece l'external command con DLL e ADDIN che vanno copiati in questa directory:

C:\ProgramData\Autodesk\Revit\Addins\2014\

Potrebbe essere utile anche consultare questo articolo per sbloccare i file .dll
If you are happy with my code you can show me some gratitude paying what you want on PayPal:

puntorevit@gmail.com

lunedì, dicembre 16, 2013

External Command: Family XYZ Location Point to CSV


Questo comando esterno permette di ricavare un file CSV contenente per ciascuna riga le informazioni relative alle sole famiglie con un singolo punto di inserimento che vengono selezionate:

[Category] , [Family Name] , [ID] , [X] , [Y] , [Z]

Il file CSV viene salvato sul desktop con il nome del file del progetto. Con qualche modifica si può fare per tutte le famiglie di questo tipo senza intervenire con la selezione manuale.

Qui si può leggere il codice sorgente, da qui si può scaricare il file DLL e il relativo ADDIN che vanno copiati in questa directory:

C:\ProgramData\Autodesk\Revit\Addins\2014\

Potrebbe essere utile anche consultare questo articolo per sbloccare i file .dll
If you are happy with my code you can show me some gratitude paying what you want on PayPal:

puntorevit@gmail.com

mercoledì, dicembre 11, 2013

External Commands: Miter Joint By Picking - Lines Chain Total Length






Su richiesta ecco gli external commands di queste due macro che avevo pubblicato in precedenza qui e qui.

Lines Chain Total Length (addin) (dll)

Wall Miter Joint by Picking: (addin) (dll)

Tutti i file sono da copiare in questa directory:

C:\ProgramData\Autodesk\Revit\Addins\2014\

Potrebbe essere utile anche consultare questo articolo per sbloccare i file .dll

lunedì, dicembre 09, 2013

Formule utili per parametrizzare una tangente a due archi


Può tornare utile per parametrizzare dei profili o dei tracciati.

Update:

Nel caso si volesse trovare l'altra tangente non speculare a quella precedente, il metodo grafico da utilizzare è lo stesso ma le formule cambiano leggermente:



Chain Dimension

Per oggetti modello (muri e linee) esiste la possibilità di restituire la lunghezza totale di una concatenazione di elementi.
Questa funzionalità però non esiste per le linee di dettaglio, con questa macro è possibile ottenere la lunghezza delle linee selezionate (sia di modello sia di dettaglio), sia concatenate sia separate.
La macro tiene conto dell'unità di misura del progetto e restituisce il valore in metri se il sistema utilizzato è quello metrico e in piedi se è imperiale. Se serve posso fare l'external command.

Filled region on 3D Views - My EUR RTC 2013 Trick



Durante il Revit Technology Conference 2013 a Delft c'è stata una sessione di "Tips and Tricks", e alla fine ognuno poteva contribuire con un proprio suggerimento se lo desiderava.
Io ho descritto la procedura per inserire una filled region in tavola, ma senza Revit sotto mano, solo raccontadolo a parole, questo il vecchio post a cui facevo riferimento.
Sono stato deriso, preso per pazzo, criticato... io però credo sia worthsharing, meritevole di essere condiviso.

Un piccolo video per dimostrare un'applicazione possibile, come ad esempio creare delle filled region per delle viste 3D, senza ricorrere a stratagemmi più complessi.

giovedì, dicembre 05, 2013

Miter joint by picking






In questo video si vede come si possa cambiare il tipo di join terminali dei muri semplicemente cliccandoci sopra. Credit a Harry Mattison di Boost Your BIM da cui ho preso spunto.

WallJoinMiterByPick source code

mercoledì, dicembre 04, 2013

View Depth Override - the CAD side of the moon



Qualche tempo fa mi è stato chiesto nei commenti come poter unificare le linee delle diverse tonalità di grigio una volta esportate da Revit dopo avere utilizzato il View Depth Override.
Per prima cosa si deve impostare l'esportazione dei formati CAD da Revit su TrueColour e utilizzare le impostazioni byLayer e le sostituzioni byEntity.
Una volta in AutoCAD si deve caricare il GreyMerge.lsp alla riga di comando digitando "appload".
Digitando poi GREYMERGE si richiama il comando che inserisce i due layer "_Grey-1" e "_Grey-2" attribuendo loro rispettivamente i colori RGB 128,128,128 e 192,192,192.
Successivamente gli oggetti vengono spostati di layer concordemente al loro colore, si potrà quindi impostare tutto su byLayer.

GreyMerge.lsp

Trovare il raggio di un arco ribassato



Qualche volta capita di dover realizzare dei componenti parametrici con la forma in figura di cui però non si conosce esattamente il valore del raggio dell'arco, come ad esempio da un rilievo.
Mentre la costruzione geometrica è abbastanza semplice, la parametrizzazione può essere più complessa se non si tengono presente alcune proprietà geometriche dei triangoli e delle circonferenze.
Sapendo che l'angolo alla circonferenza del diametro di un cerchio è sempre a 90°, usando il teorema di Pitagora e le proporzioni tra triangoli simili è possibile ricavare in modo abbastanza semplice i parametri che servono a definire il componente come da formula riportata in figura.