Close

Page 2 of 4 FirstFirst 1234 LastLast
Showing results 11 to 20 of 34

Thread: Wish #3

  1. #11
    Posting Freak Tristan's Avatar
    Join Date
    02.06.2010
    Location
    Pergine Valsugana (TN)
    Posts
    1.403

    Default

    Quote Originally Posted by Gjiom View Post
    Stai svelando tutti i segreti
    Vediamo quanta polvere c'è sotto il tappeto...

  2. #12
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194

    Default

    Se si analizza l'immagine del post precedente si possono notare i dettagli di un oggetto linea.

    Innanzitutto le linee sono genericamente delle "curve", nel senso geometrico del termine e quindi non necessariamente hanno un raggio.
    Nel raggruppamento "Curve" possiamo renderci conto che è una linea senza un periodo (non è ciclica come un arco di circonferenza), ha un inizio e una fine (is bound è vero), e in particolare conosciamo le coordinate dei punti di inizio e fine (sono in piedi decimali come anticipavo precedentemente - visto che varia la coordinata in Z si tratta di una linea verticale).

    Analizzando ulteriormente quello che abbiamo fatto fin'ora abbiamo cliccato su un gruppo di barre e ci vengono restituite le informazioni geometriche della prima barra appartenente al gruppo.

    Selezionando un arco questo elenco di parametri necessari per la descrizione interna degli oggetti sarà leggermente diverso ma concettualmente è lo stesso.

    In linea di principio quindi per fare l'esploso quello che sarà necessario è prendere queste curve, spostarle verso l'alto di una certa quantità, supponiamo che sia l'utente stesso ad indicarlo con due click del mouse, e tracciarle nella vista corrente purché sia una vista bidimensionale.

    Per "spingere" un oggetto possiamo seguire strade diverse, vorrei parlare di un concetto il più generico possibile, la traslazione definita da un vettore.
    Last edited by paolocasa1 : 22.02.2015 at 09:04
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

  3. #13
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194

    Default

    Quando schematicamente ci si trova a tracciare una freccia si sta rappresentando in modo grafico il concetto di vettore.
    Le caratteristiche di un vettore, come da qualsiasi testo scolastico, sono la direzione, il verso e l'intensità.
    Non voglio scendere troppo nell'accademico per ora, il concetto di vettore poi verrà utile in molte altre situazioni, apparentemente molto distanti tra loro, nello specifico ci serve un vettore che definisca uno spostamento.

    Prima di tutto vediamo come possiamo descrivere un vettore di spostamento nello spazio tridimensionale:

    v=(1,3,-2)

    Assomiglia moltissimo ad un punto (coordinate x, y, z) ma concettualmente è un oggetto diverso.
    In particolare se applicassimo il vettore di cui sopra ad un punto ne otterremmo un altro come risultato, che potremmo dire essere la traslazione del punto di partenza, ad esempio il punto (1,0,0) verrebbe traslato in (2,3,-2).

    Molto semplicemente "la matematica dei vettori" somma la componente x del punto con quella del vettore, e così via.

    Ora, considerando il nostro obiettivo, possiamo ottenere un vettore procedendo all'inverso: con il primo click del mouse si definisce il punto di partenza, con il secondo il punto di arrivo, il vettore è quindi la differenza di coordinate tra punto di arrivo e punto di partenza.
    Last edited by paolocasa1 : 12.02.2015 at 18:39
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

  4. #14
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194

    Default

    Disponendo di un vettore è possibile traslare un punto o un qualsiasi altro oggetto geometrico nello spazio creando un oggetto nuovo.

    In particolare poi andremo a tracciare delle linee di dettaglio utilizzando le linee traslate della medesima quantità.

    A questo punto dovrebbe essere chiaro quanto sia importante memorizzare da qualche parte questo vettore visto che verrà riutilizzato per un certo numero di oggetti: in programmazione quando si vuole riutilizzare una determinata grandezza si ricorre a degli oggetti che chiamiamo variabili, questo approccio ricorda molto quello che in matematica è rappresentato dalle equazioni letterali, ossia scritture del tipo:

    4a-2b=0

    Sappiamo che in questo caso le lettere sono certamente dei valori numerici per avere senso, quello che conta non è il loro effettivo valore ma la relazione che intercorre tra queste grandezze.
    Last edited by paolocasa1 : 14.02.2015 at 15:37
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

  5. #15
    Posting Freak uaifestival's Avatar
    Join Date
    28.12.2012
    Location
    Tokyo
    Posts
    1.025

    Unglücklich

    ho letto con ritardo il post...ma mi interessa (vedi il mio quesito di spostamento nella sezione di programmazione)
    tuttavia non riesco a partire se non trovo il lookup per Revit2014...
    Interessante .Smanettone pragmatista, se ascolto mi faccio un trip, se guardo mi distraggo, se faccio imparo.
    Blog

  6. #16
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

  7. #17
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194

    Default

    Giusto per mantenere vivo l'interesse vi faccio vedere un'anteprima di quello che sto cercando di spiegare in questo post con questo video, il codice non è importante per ora il concetto è la fluidità di utilizzo che stiamo cercando di definire.

    Il vero cuore della programmazione a mio modo di vedere è proprio qui: non conta il linguaggio utilizzato ma il processo che si intende seguire.
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

  8. #18
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194

    Default

    Il passo successivo sarà quello di estrarre le informazioni che ci servono dagli oggetti, arrangiarle come più ci è comodo e scriverle nella vista come note di testo.

    Attraverso il RevitLookUp possiamo andare ad interrogare gli oggetti in modo preciso e sapere come questi vengono chiamati internamente e che tipo di valori restituiscono.


    Per ogni tratto lineare del gruppo di barre selezionato deve essere riportato il valore della lunghezza in millimetri e deve essere scritto a lato della linea all'incirca a metà della linea stessa.

    Per ogni gruppo di barre invece vogliamo che siano riportate altre informazioni come il numero di barre nel gruppo, il diametro della barra, la lunghezza della barra in millimetri, il passo delle barre in millimetri (specie nel caso delle staffe).

    Nell'immagine sono evidenziati i parametri che contengono le informazioni che ci servono, prima di poterli utilizzare dovranno eventualmente essere trasformati da piedi a millimetri e opportunamente arrotondati a zero cifre decimali.

    Volevo sottolineare come i parametri abbiano poi una definizione interna, un nome nel linguaggio interno di Revit, diverso da quello che l'utente vede a monitor. Questo consente ai programmatori di realizzare dei codici che possano essere indipendenti dalla lingua di installazione di Revit, mentre invece in Dynamo questo ragionamento non si può fare: i nomi dei parametri che devono essere impiegati in una definizione sono esattamente gli stessi che vede l'utente finale.
    Da un lato semplifica notevolmente le cose ma dall'altro una definizione di Dynamo resterà legata alla lingua di installazione e non potrà circolare con la stessa facilità tra gli utenti, è anche vero però che attraverso i nodi Python è possibile accedere allo stesso livello di linguaggio interno e quindi aggirare il problema.
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

  9. #19
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194

    Default

    Facendo riferimento all'immagine precedente volevo far notare una caratteristica ben visibile nella finestra di sinistra, in particolare i raggruppamenti che ci propone RevitLookUp per l'oggetto selezionato sono 2: Element e Rebar.

    L'oggetto che abbiamo selezionato è uno solo ma possiede sia caratteristiche derivate dalla "categoria" (per dirla in terminologia di Revit) degli Elementi, sia caratteristiche derivate dalla "categoria" Barre di armatura.

    Questo particolare aspetto deriva dal linguaggio di programmazione con cui è stato scritto il software, che è un linguaggio di programmazione orientato agli oggetti (OOP, per chi volesse approfondire) e in particolare prende il nome di ereditarietà.

    In Revit esistono molte classi di oggetti diverse che hanno dei parametri in comune tra loro, questi parametri in comune sono ereditati da una classe (Elemento) e vengono ampliati con parametri specifici della nuova classe (in questo caso barre di armatura).

    Per fare un paragone con il mondo Revit che conosciamo già, quando vogliamo creare una nuova famiglia stiamo scegliendo una super-classe, la famiglia appunto, dalla quale derivano i parametri identità per esempio, che andiamo a specificare meglio selezionando il template di una categoria, una sotto-classe, per avere un comportamento specifico che ci interessa.

    L'altra caratteristica importante di un linguaggio OOP è l'incapsulamento, per rimanere in tema di creazione delle famiglie e semplificando al massimo, sappiamo che esistono oggetti che si comportano diversamente (un arredo è ben diverso da una finestra) e sappiamo anche usarli correttamente, ma non sappiamo come sono fatti. Quello che a noi interessa è la struttura dei dati (ad esempio che in una finestra ci siano larghezza e altezza) e i "metodi" associati (ad esempio che una finestra buchi un muro mentre invece un arredo non ha questo metodo associato).

    L'altro aspetto che contraddistingue un linguaggio OOP è il polimorfismo, posso partire da un oggetto con determinate caratteristiche e farlo poi usare in un modo diverso, ad esempio in Revit creo una famiglia partendo dal template modello generico e prima di caricarla nel progetto cambio categoria, ad esempio arredo: la struttura dei dati e i metodi che ho utilizzato per crearla vengono nascosti all'utente perché si troverà di fronte la struttura dei dati e i metodi di una famiglia differente.

    Con Dynamo, programmazione visuale, questi concetti sono meno espliciti mentre lo sono molto di più con gli altri linguaggi di programmazione più classici ("classi-C" per ribadire il concetto ). Per ampliare le potenzialità di Dynamo si deve ricorrere a Python e in quel caso questi temi devono essere chiari.
    Last edited by paolocasa1 : 15.02.2015 at 09:29
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

  10. #20
    Moderator paolocasa1's Avatar
    Join Date
    04.05.2007
    Posts
    1.194

    Default

    Per quanto possa sembrare comoda un'applicazione di questo tipo ha delle evidenti limitazioni, ad esempio:
    • non si aggiorna automaticamente al variare delle informazioni del modello
    • gli oggetti sono linee e testi indipendenti
    • non si possono usare delle etichette


    Per quanto riguarda il primo punto si dovrebbe ricorrere all'aggiornamento dinamico (dynamic update), la cui implementazione è possibile quando ad esempio non si sta facendo nulla in Revit, ma a quel punto sarebbe più congeniale un'applicazione esterna per consentire di eseguire il controllo di aggiornamento all'avvio di Revit, insomma un po' più complesso.

    L'altra possibilità è quella di ricorrere a Dynamo che ha il vantaggio di "allacciarsi" al database di un documento e reagire ad eventuali cambiamenti.

    Per i due punti successivi una soluzione è quella di creare dei componenti di dettaglio corredate di annotazioni generiche e utilizzare quelle per esplicitare i valori che interessano.

    Introducendo questo metodo si può decidere di utilizzare indifferentemente sia le API sia Dynamo.
    Fino ad ora i migliori risultati si sarebbero ottenuti con le API perché molte delle assunzioni che sono state fatte non sarebbero possibili con Dynamo o almeno non con lo stesso grado di flessibilità senza intervenire via Python, ad esempio lasciare all'utente la possibilità di specificare con due click la distanza di spostamento.

    L'add-in di Sofistik che ho segnalato all'inizio di questo thread sfrutta proprio dei componenti di dettaglio e il risultato finale è sicuramente migliore.

    In questo video mostro come utilizzare i componenti di dettaglio con dei custom node in Dynamo.
    Last edited by paolocasa1 : 16.02.2015 at 08:47
    Cerca di non essere un uomo di successo, ma un uomo di valore

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

Posting Rules

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