I am publishing a new simple Macro, very similar to the previous one, also developed by Gian Marco Todesco during our work session. It uses the same base family of the previous one. This time the object is copied on the Z axis and the parameter driving the angle is variated through a sin-based rule.
As usual, you need the family "PilastroFascia" in the same folder of the RVT file. Following is the copied script, the Visual Basic (vb) file is attached.
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
' inizio della funzione
Public Sub SenoCopia()
'Rendiamo localizzabile il file della famiglia (stessa cartella del modello)
Dim fullPath As String = "pilastroFascia.rfa"
If (Not LoadFamily(fullPath)) Then
MsgBox("Loaded a family nono")
Return
End If
'non specifichiamo un tipo (symbol) - funziona ma va un pò chiarito
Dim fs As Symbols.FamilySymbol = Nothing
'Vogliamo caricare una famiglia e un tipo, se non lo carica ce lo dice,
'altrimenti carica il tipo pilastroFascia della famiglia PilastroFascia
If (Not LoadFamilySymbol("pilastroFascia.rfa", "pilastroFascia", fs)) Then
MsgBox("Non riesco a caricare il family symbol, cioè il tipo. ciao ciao")
Return
End If
'definiamo n e i
Dim n As Integer = 50
Dim i As Integer
'il ciclo si ripete da 1 a 50 - numeri interi
For i = 0 To n
'imposto che scrivo "fi" invece che "FamilyInstance"
Dim fi As FamilyInstance
'la posizione è un valore che varia la z (altezza) di un valore pari a i moltiplicato per 10
Dim pos As Geometry.XYZ = Application.Create.NewXYZ(0.0, 0.0, i * 10)
'facciamo una istanza nella posizione "pos"
'senza specificare un tipo ("fs" è pari a nothing, cioè zero, perché è solo un tipo)
'la famiglia è non strutturale
fi = Create.NewFamilyInstance(pos, fs, Structural.Enums.StructuralType.NonStuctural)
' questa è la funzione mediante la quale sono legati i valori
' "i" (variabile da 1 a 50, interi),
' "n" (fisso pari a 50)
'definizamo un "t" pari a 1 diviso n
Dim t As Double = i / n
'definiamo un angolo pari a pigreco per quattro per "t"
Dim theta As Double = t * 4 * Math.PI
'definiamo un "s" che è pari alla metà di 1 + seno di teta
Dim s As Double = 0.5 * (1 + Math.Sin(theta))
'per ogni "i", infine, settiamo il parametro "pippo" della famiglia
'al valore pari a metà di pigreco moltiplicato per "s"
fi.ParametersMap("pippo").Set(Math.PI * 0.5 * s)
'la variazione del parametro (larghezza dell'angolo)
'è ora legata a una funzione seno
'passiamo al prossimo "i"
Next i
End Sub
End Class
commenti
admin
30 Maggio, 2009 - 15:17
Collegamento permanente
API e scripting per le strutture di aste e nodi di revit 2010
un sito statunitense ha postato un interessante post sull'uso dello scripting all'interno delle nuove funzionalità di pannellizzazione di Revit 2010:
http://buildz.blogspot.com/
Questo è il post:
http://buildz.blogspot.com/2009/05/api-yi-yi.html
Stefano
admin
17 Settembre, 2009 - 17:58
Collegamento permanente
online Script editor for the web
Stylianos Dritsas developed in 2005 this nice
online tool:
It's called jeneratiff and if formats a given script with colors.
It saves a lot of time, and make your work more readable!
Use it before posting!
MarcoMondello
3 Luglio, 2009 - 21:33
Collegamento permanente
R2010 scripting_from R2009 to R2010
I'm trying to use scripting in R2010. This complex topic will be studied with the aid of Prof. Todesco, whom i would like to thank.
At first, i've tried to use this post script (enhanced for R2009) in the new release.
It works pretty well, there are just a few notes to underline. For the most, nothing changed in the format.
'R2010 does not include following strings automatically...
'without them, it is not possible to import families
Imports System
Imports Autodesk
Imports Autodesk.Revit
Imports Autodesk.Revit.Elements
<System.AddIn.AddIn("AppAddIn", Version:="1.0", Publisher:="", Description:="")> _
Partial Class ThisDocument
Private Sub Module_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
End Sub
Private Sub Module_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
End Sub
Public Sub insert()
' the same
Dim fullPath As String = "cubo.rfa"
If (Not LoadFamily(fullPath)) Then
MsgBox("Loaded a family nono")
Return
End If
'the same
Dim fs As Symbols.FamilySymbol = Nothing
'the same
If (Not LoadFamilySymbol("cubo.rfa", "cubo.rfa", fs)) Then
MsgBox("Non riesco a caricare il family symbol, cioè il tipo. ciao ciao")
Return
End If
'the same
Dim n As Integer = 50
Dim i As Integer
For i = 0 To n
Dim fi As FamilyInstance
Dim pos As Geometry.XYZ = Application.Create.NewXYZ(0.0, 0.0, i * 10)
' it exits several way of creating an instance. we're usign the same one
fi = Create.NewFamilyInstance(pos, fs, Structural.Enums.StructuralType.NonStructural)
Dim t As Double = i / n
Dim theta As Double = t * 4 * Math.PI
Dim s As Double = 0.5 * (1 + Math.Sin(theta))
fi.ParametersMap("l").Set(Math.PI * 0.5 * s)
Next i
End Sub
End Class
marco.mondello@gmail.com