Lezione Scripting Visual Basic | VBA Macro for Revit - esempio

A seguito della lezione di Gian Marco Todesco  di martedì scorso, pubblichiamo un esempio di Macro molto semplice, costruita durante una prima sessione di lavoro e perfettibile.

 

Click su "leggi tutto" per saperne di più e scaricarlo!

 

This quick Macro covers importing a family and loading an instance of a family symbol. This to build up a cycle that copies the instance along the Z-axis and at the same time modifies a family parameter of every instance.

Alla base dello script c'è una famiglia "PilastroFascia.rfa" con un solo parametro (di famiglia, che si chiama "pippo" ed è l'angolo tra due profili) e un solo tipo (che si chiama "PilastroFascia", uguale alla famiglia, come nella maggior parte delle vostre famiglie)

Lo script:

- carica la famiglia

- ne costruisce una istanza

attraverso un ciclo, ripete per nove volte  delle operazioni:

- copia l'istanza (nel nostro caso lungo l'asse Z)

- varia il parametro "pippo" (che è l'angolo)

Il risultato è quello che vedete nell'immagine.

 

Per usarla e modificarla, dovete scaricare RVT e RFA, metterli nella stessa cartella, poi:

Per trovare la Macro nel file RVT

(dopo averlo installato come detto a lezione a partire dal file di installazione di Revit 2009)

 

nella lista delle Macro "del file", cioè a livello documento

dovreste trovare una con scritto "CopiaConParametro".

 

 

Se non ci fosse, potete sempre farla come "nuova",

trovate il testo qui sotto, in una versione non commentata, nella giornata di domani ne mando una migliore:

 

Imports System
Imports Autodesk
Imports Autodesk.Revit
Imports Autodesk.Revit.Elements

<CLSCompliant(False)> _
Partial Class ThisDocument

    Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

    End Sub

    Private Sub ThisDocument_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown

    End Sub

    Public Sub CopiaConParametro()

        Dim fullPath As String = "pilastroFascia.rfa"

        If (Not LoadFamily(fullPath)) Then
            MsgBox("Loaded a family nono")
            Return
        End If

        Dim fs As Symbols.FamilySymbol = Nothing
        If (Not LoadFamilySymbol("pilastroFascia.rfa", "pilastroFascia", fs)) Then
            MsgBox("Non riesco a caricare il family symbol. ciao ciao")
            Return
        End If

        Dim phi As Double
        phi = 10

        Dim i As Integer

        For i = 0 To 9

            Dim fi As FamilyInstance

            Dim p2 As Geometry.XYZ = Application.Create.NewXYZ(0.0, 0.0, i * 10)

            fi = Create.NewFamilyInstance(p2, fs, Structural.Enums.StructuralType.NonStuctural)

            Dim param As Parameter = fi.ParametersMap("pippo")
            param.Set(Math.PI * 0.5 * i / 10)

        Next

    End Sub

End Class

AllegatoDimensione
Binary Data pilastroFascia.rfa196 KB
Binary Data CopiaconParametro.rvt1.07 MB

commenti

CIAO STEFANO,qui ho provato a lanciare la macro e funziona, ma quando ci ho messo la mia famiglia mi dice " e stato associato un handle di file non valido". non riesco a sbloccare la situazione che devo fare?Marco

Credo dipenda dal percorso di ricerca. Prova a caricare la famiglia manualmente nel progetto (ho avuto il tuo stesso problema e questa pare essere una soluzione). Il paradosso: ho provato l'assemblaggio del tuo progetto partendo dalla famiglia RIBs+SPINEs (non caricata manualmente, non aperta in Revit contemporaneamente al progetto, salvata sul desktop) e funziona perfettamente.

grazie stefano...sto pubblicando il post dei miei progressi, non è che poi puoi scaricare il materiale e vedere se a te funge in questa maniera? ti ringrazioMArco

tutto ok la macro works

riporto alcuni metodi pratici che aggirano l'ostacolo di avvio della macro (chiedo conferma a chiunque abbia risolto il problema seguendo procedure analoghe) e propongo di postarne altri:

  • HANDLE DI FILE NON VALIDO: conviene aprire un nuovo progetto, salvarlo nella cartella contenente la famiglia e copiare lo script (questo metodo ha dato sempre esito positivo); quando si crea una nuova macro o se ne modifica una esistente è necessario generarla nella finestra dell'IDE (Revit Macros) per poi avviarla (esegui) dal progetto.
  • Difficoltà nel caricare il familysymbol (ossia il tipo di famiglia): provare a nominare il tipo di famiglia nell' rfa con il nome della famiglia(come indica lo script e come dovrebbe essere in automatico se il file ne contiene un solo tipo). Due tipi di famiglia possono differire per i valori dei parametri, non per il numero o il nome di questi; caricare un tipo di famiglia significa quindi caricare un'istanza dell' rfa.

Aggiungo a quanto detto da Stefano che quando modifichi una macro:1. non vengono soppressi gli elementi generati dalla macro precedente2. per farla ripartire bene non basta salvare ,almeno non a me: devo pure fare e interrompere il debug