Close

Showing results 1 to 9 of 9

Thread: Wish#4

  1. #1

    Default Wish#4

    Con riferimento a questo post si parla di estrazione delle coordinate del baricentro (geometrico) degli oggetti e scrittura in un parametro.

    Vediamo come strutturare un algoritmo per ottenere questa informazione e come renderla esplicita all'utente.
    Cerca di non essere un uomo di successo, ma un uomo di valore

    http://www.revitlandia.com
    http://puntorevit.blogspot.com

  2. #2

    Default

    Attraverso le API e Dynamo è possibile accedere ai solidi che costituiscono la parte geometrica degli oggetti che risulta visibile all'utente. In particolare è possibile ricavare le coordinate del baricentro geometrico (senza considerare quindi la densità dei materiali), questa proprietà è detta Centroid.

    Purtroppo questa proprietà non è esplicita quando si accede a RevitLookUp, che è un supporto fondamentale anche se non perfetto.
    Quando non dovesse bastare possiamo sempre consultare il file .chm del Revit SDK (Software Development Kit) oppure la sezione "Developers" della guida in linea di Revit (in inglese).

    Questa è la pagina on-line che fa riferimento ai solidi.

    Le guide in questione sono utilissime perché sono un compendio completo ed esaustivo delle librerie API, vengono riportate le classi di oggetti disponibili, le proprietà di questi (si può capire inoltre quali sono in sola lettura e quali no), i metodi associati e ancora più importante ci sono degli esempi molto preziosi da prendere a riferimento quando si comincia a scrivere codici, i linguaggi scelti sono C++,C# e VB.NET (Python si può usare ma non è documentato, gli esempi sono molto pochi in confronto a C#, l'ambiente di sviluppo integrato lascia molto a desiderare per questo linguaggio, io consiglio C# a priori per non farsi troppo male all'inizio e non sentirsi troppo soli).

    Tornando al problema del baricentro, se poi tutti gli oggetti avessero dei parametri lunghezza d'istanza (chiamati X, Y, Z) basterebbe associare le coordinate del Centroid a questi parametri.

    Ma di quali coordinate si tratta? Dipende, approfondiremo meglio la questione in un post dedicato ai sistemi di coordinate in Revit.
    Cerca di non essere un uomo di successo, ma un uomo di valore

    http://www.revitlandia.com
    http://puntorevit.blogspot.com

  3. #3
    Benutzer/Junior
    Join Date
    03.12.2009
    Posts
    49

    Default

    ...in questo caso specifico (per valutazione sismica di un edificio) servono le coordinate del centro xy dei muri, delle varie aperture (finestre, porte...). 'Basterebbe' avere un parametro che identifichi le coordinate rispetto ad un origine relativa.
    Ho trovato questa app per pilastri e fondazioni


    https://apps.exchange.autodesk.com/R...ws32and64%3aen

  4. #4

    Default

    Vediamo come si può ottenere questa informazione con Dynamo, è doverosa qualche breve nozione a riguardo.

    Dynamo si trova dalla ribbon nelle add-in, quando viene attivato si può scegliere di aprire una definizione esistente o crearne di nuove; è molto importante notare che Dynamo si "allaccia" al database del documento corrente per cui c'è molta differenza se si attiva in un ambiente di progetto o nell'editor delle famiglie come ad esempio le masse, infatti alcune funzionalità potrebbero non essere presenti (ad esempio i punti riferimento sono disabilitati nel progetto).

    L'interfaccia è molto semplice, c'è una grande area di lavoro dove si possono trascinare gli elementi che troviamo nella libreria di sinistra detta shelf, in più la solita barra dei menù.
    Il riquadro di lavoro può passare ad una modalità (Geom) che permette di visualizzare le geometrie che derivano dalla definizione di Dynamo.

    La struttura del codice è costituita da nodi collegati tra loro, ogni nodo ha un nome, una o più porte di input e una o più porte di output.

    La tipologia dei dati in ingresso deve essere coerente con le richieste delle porte di input.

    Ogni nodo può rappresentare fondamentalmente 3 cose:
    • un nuovo oggetto (nello shelf si trova raggruppato sotto Create)
    • un metodo associato agli oggetti (nello shelf si trova raggruppato sotto Actions)
    • una proprietà degli oggetti (nello shelf a sinistra si trova raggruppata sotto Query)

    Combinando i nodi tra loro quindi si riproducono gli effetti di un codice di tipo tradizionale, viene chiamata programmazione visuale, ma sempre di programmazione si tratta dato che ha a che fare con oggetti, metodi e proprietà.

    Alcune caratteristiche restano nascoste all'utente finale (ad esempio il concetto di Transaction esiste ma viene praticamente sempre celato all'utente); facile da usare ma sacrifica il controllo completo di quello che sta effettivamente succedendo "nel motore" di Revit da parte dell'utente, quando dovete mettere mano ad una definizione invece volete essere sicuri di quello che andrà a fare.
    Last edited by paolocasa1 : 20.02.2015 at 21:33
    Cerca di non essere un uomo di successo, ma un uomo di valore

    http://www.revitlandia.com
    http://puntorevit.blogspot.com

  5. #5

    Default

    Il cuore della definizione sarà quindi il nodo Solid.Centroid che accetta come input un solido che possiamo ottenere dal nodo Element.Solid e ha per output un punto che è quello che a noi interessa.

    Qui di seguito l'intera definizione che è anche disponibile su uploadingit nella cartella Wishlist al numero #4


    Quando Dynamo estrai i solidi e i Centroid corrispondenti può restituire più di un punto per oggetto (dipende da come è realizzato l'oggetto), il nodo List.Map semplicemente applica una funzione a ciascuno degli elementi di una lista, in questo caso prende in considerazione il primo punto (indice 0) restituito per ogni elemento (si noti che come nella maggior parte delle situazioni in programmazione si parte a contare dal numero 0 e non da 1 per numerare le posizioni degli elementi in una lista/array).

    Con i nodi successivi vengono estratte le componenti XYZ dei punti e in particolare vengono realizzate delle liste di numeri con precisione a virgola mobile, chiamati double, diversi ad esempio dai numeri interi.

    Nel caso di Dynamo (almeno nelle ultime release) questi valori sono già nelle unità di misura impostate dall'utente nel documento cui Dynamo si allaccia al suo avvio.

    Quello che viene dopo è solo un esercizio per vedere qualche altra funzionalità di Dynamo.
    Si hanno una lista contenente tutte le coordinate X, una con tutte le Y e una con tutte le Z; le si raggruppa in una macro lista.

    Questo processo di nidificazione delle liste è piuttosto comune in Dynamo perché consente di utilizzare meno nodi per raggiungere lo stesso scopo e graficamente rappresenta una struttura più elegante, e quindi più semplice da capire e modificare, del codice.

    La lista delle coordinate viene convertita in testo (string) usando un solo nodo, viene usato il nodo Transpose per fare una sorta di "pivot" delle liste e ottenere le tre coordinate di un punto appartenenti ad una stessa lista; usando un nodo String.Join è possibile specificare quale carattere utilizzare per combinare le stringhe (in questo caso la virgola). Il risultato è una lista di liste e quindi è necessario applicare un nodo Flatten per ottenere direttamente gli elementi che saranno del tipo X,Y,Z e scriverli nel campo Comments di ogni oggetto selezionato (io ho la versione in inglese di Revit e quindi prima di poter utilizzare la definizione si deve fare attenzione ai nomi dei parametri e tradurli opportunamente).

    Per farlo si deve ricorrere al nodo Element.SetParameterByName che di nascosto apre una transazione, modifica il parametro specificato per ciascun elemento, chiude e valida la transazione. Lo faccio notare perché con un Undo tutti gli oggetti processati tornano allo stato precedente (la transazione ha un nome che viene visualizzato nel menù a discesa del comando Undo e purtroppo in questo caso comparirà un generico Dynamo Script... capite che quando ne avete parecchi e diversi tra loro diventa difficile orientarsi).

    Una cosa molto importante: l'ordine con cui vengono modificati gli oggetti e i punti ricavati è fondamentale che coincida, in questo caso è molto semplice ma con definizioni più complesse può essere meno immediato, è bene tenerlo presente.

    I valori così ottenuti possono anche essere scritti in un file CSV o Excel.
    Last edited by paolocasa1 : 20.02.2015 at 18:29
    Cerca di non essere un uomo di successo, ma un uomo di valore

    http://www.revitlandia.com
    http://puntorevit.blogspot.com

  6. #6
    Benutzer/Junior
    Join Date
    03.12.2009
    Posts
    49

    Default

    ...oltre le coordinate xy serve anche l'angolo!

  7. #7

    Default

    prego game, non c'è di che...

    abbi pazienza ma non ho letto questo requisito nella tua richiesta
    parametro per coordinate automatiche baricentro xy finestre, muri, ecc, molto utile per verifica sismica
    magari poi vorresti anche l'area della sezione resistente in pianta...prova a farlo tu
    Cerca di non essere un uomo di successo, ma un uomo di valore

    http://www.revitlandia.com
    http://puntorevit.blogspot.com

  8. #8
    Moderator rafdeban's Avatar
    Join Date
    19.05.2009
    Posts
    1.810

    Default

    Quote Originally Posted by paolocasa1 View Post
    prego game, non c'è di che...

    abbi pazienza ma non ho letto questo requisito nella tua richiesta
    magari poi vorresti anche l'area della sezione resistente in pianta...prova a farlo tu
    Ah Ah Ah Ah ........ a me anche un cappuccio tiepido ma non troppo con molta schiuma e abbondante cacao ...........

    Scuste, non ho resistito.......sei un grande Paolo

  9. #9
    Benutzer/Junior
    Join Date
    03.12.2009
    Posts
    49

    Default

    ...non e' certo il mio mestiere, ahime ma penso che se ci riesce autocad a maggior ragione si deve trovare il modo per farlo fare a revit, ...non so se hai visto l'app che ti da le coordinate xyz dei pilastri, lo stesso concetto si dovrebbe trovare per le finestre, le porte, muri...

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •