-
Notifications
You must be signed in to change notification settings - Fork 1
/
exampleLouvreAbuDhabi.fsx
73 lines (55 loc) · 2.51 KB
/
exampleLouvreAbuDhabi.fsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#r @"C:\Program Files\Autodesk\Revit 2019\RevitAPIUI.dll"
#r @"C:\Program Files\Autodesk\Revit 2019\RevitAPI.dll"
open Autodesk.Revit
open Autodesk.Revit.DB
open Autodesk.Revit.UI
module Louvre =
let pattern =
[| [| 0,3 ; -2,2 ; -3,0 ; -2,-2 ; 0,-3 ; 2,-2 ; 3,0 ; 2,2 |]
[| 0,3 ; 2,2 ; 2,4 |]
[| 2,2 ; 3,0 ; 4,2 |]
[| 2,4 ; 4,4 ; 3,6 |]
[| 4,2 ; 6,3 ; 4,4 |]
[| 2,2 ; 4,2 ; 4,4 ; 2,4 |] |]
let mapN = Array.map >> Array.map
let points = mapN (fun (u,v) -> XYZ(float u, float v, 0.0)) pattern
let edges =
[| for pts in points do
for i = 0 to pts.Length - 2 do
yield Line.CreateBound(pts.[i] , pts.[i+1])
yield Line.CreateBound(pts.[pts.Length-1] , pts.[0] ) |] // connect last to first
// draw grid
let shiftLine (offX, offY) (l:Line) =
let offset = XYZ(offX, offY , 0.0 )
Line.CreateBound (l.GetEndPoint 0 + offset , l.GetEndPoint 1 + offset)
let uvs =
let ext = 6 * 8// step size 6*7, max 19 at 0.013 radians
[| for u in -ext..6..ext do
for v in -ext..6..ext do
yield float u, float v |]
let edgesShifted =
[| for uv in uvs do yield! Array.map (shiftLine uv) edges |]
// draw sphere
let setToSphere (pt:XYZ) =
let uRad = pt.X * 0.014 //to get angle in Radians
let vRad = pt.Y * 0.014
let x = sin uRad / cos uRad
let y = sin vRad / cos vRad
let f = 65. / sqrt (x*x + y*y + 1.) // Radius of sphere // inverse length to get scaling factor for this vector
XYZ(x*f, y*f, f)
let setLineToSphere (l:Line) =
Line.CreateBound (setToSphere (l.GetEndPoint 0) , setToSphere (l.GetEndPoint 1) )
:> GeometryObject // cast so it works with DirectShape.CreateElement
Fesh.Revit.ScriptingSyntax.runApp (fun (app:UIApplication) ->
let doc = app.ActiveUIDocument.Document
let ds = DirectShape.CreateElement(doc, ElementId(BuiltInCategory.OST_GenericModel))//, "ME", "MEo")
Louvre.edgesShifted
|> Array.map Louvre.setLineToSphere
|> ds.SetShape
)
/// Reference the editor to print in color
#r @"D:\Git\_Fesh_\Fesh.Revit\bin\2019\net48\AvalonEditB.dll"
#r @"D:\Git\_Fesh_\Fesh.Revit\bin\2019\net48\Fesh.Revit.dll"
#r @"D:\Git\_Fesh_\Fesh.Revit\bin\2019\net48\Fesh.dll"
Fesh.Model.IFeshLog.printnColor 255 0 0 "Done!" // print in red
Fesh.Model.IFeshLog.printnColor 0 150 0 "go to the 3D view!" // print in green