|
8 | 8 | from compas_tno.diagrams import FormDiagram |
9 | 9 | from compas_tno.shapes import Shape |
10 | 10 |
|
| 11 | +# ---------------------------------------- |
| 12 | +# 0. Vizualization function |
| 13 | +# ---------------------------------------- |
| 14 | + |
| 15 | +def visualization(vault, form): |
| 16 | + viewer = Viewer() |
| 17 | + |
| 18 | + # viewer.scene.add(vault.middle, show_lines=False, name="Middle") |
| 19 | + viewer.scene.add(vault.intrados, show_lines=False, name="Intrados", opacity=0.5) |
| 20 | + viewer.scene.add(vault.extrados, show_lines=False, name="Extrados", opacity=0.5) |
| 21 | + |
| 22 | + edges = list(form.edges_where({"_is_edge": True})) |
| 23 | + |
| 24 | + max_thick = 0.1 |
| 25 | + forces = [form.edge_attribute(edge, "q") * form.edge_length(edge) for edge in edges] |
| 26 | + fmax = math.sqrt(max(abs(max(forces)), abs(min(forces)))) |
| 27 | + |
| 28 | + pipes = [] |
| 29 | + for edge in edges: |
| 30 | + qi = form.edge_attribute(edge, "q") |
| 31 | + line = form.edge_line(edge) |
| 32 | + length = line.length |
| 33 | + force = math.sqrt(abs(qi * length)) |
| 34 | + radius = force / fmax * max_thick |
| 35 | + pipe = Cylinder.from_line_and_radius(line, radius) |
| 36 | + if force > 1e-3: |
| 37 | + pipes.append(pipe) |
| 38 | + viewer.scene.add(pipe, color=Color.red()) |
| 39 | + |
| 40 | + # viewer.scene.add(pipes, name="Pipes", color=Color.red()) |
| 41 | + |
| 42 | + viewer.show() |
| 43 | + |
11 | 44 | # ---------------------------------------- |
12 | 45 | # 1. Shape geometric definition |
13 | 46 | # ---------------------------------------- |
|
20 | 53 | # ---------------------------------------- |
21 | 54 | # 2. Form diagram geometric definition |
22 | 55 | # ---------------------------------------- |
23 | | -discretisation = 10 |
| 56 | +discretisation = 14 |
24 | 57 | form = FormDiagram.create_cross_form(xy_span=xy_span, discretisation=discretisation) |
25 | 58 |
|
26 | 59 | # -------------------------------------------- |
|
32 | 65 | analysis.set_up_optimiser() |
33 | 66 | analysis.run() |
34 | 67 |
|
35 | | -# view = Viewer(form) |
36 | | -# view.show_solution() |
| 68 | +visualization(vault, form) |
37 | 69 |
|
38 | 70 | # -------------------------------------------- |
39 | 71 | # 4. Maximum thurst solution and visualisation |
|
44 | 76 | analysis.set_up_optimiser() |
45 | 77 | analysis.run() |
46 | 78 |
|
47 | | -# view = Viewer(form) |
48 | | -# view.show_solution() |
49 | | - |
50 | | -# ============================================================================= |
51 | | -# Viz |
52 | | -# ============================================================================= |
53 | | - |
54 | | -viewer = Viewer() |
55 | | - |
56 | | -viewer.scene.add(vault.middle, show_lines=False, name="Middle") |
57 | | -viewer.scene.add(vault.intrados, show_lines=False, name="Intrados", opacity=0.5) |
58 | | -viewer.scene.add(vault.extrados, show_lines=False, name="Extrados", opacity=0.5) |
59 | | - |
60 | | -edges = list(form.edges_where({"_is_edge": True})) |
61 | | - |
62 | | -max_thick = 0.1 |
63 | | -forces = [form.edge_attribute(edge, "q") * form.edge_length(edge) for edge in edges] |
64 | | -fmax = math.sqrt(max(abs(max(forces)), abs(min(forces)))) |
65 | | - |
66 | | -pipes = [] |
67 | | -for edge in edges: |
68 | | - q = form.edge_attribute(edge, "q") |
69 | | - line = form.edge_line(edge) |
70 | | - length = line.length |
71 | | - force = math.sqrt(abs(q * length)) |
72 | | - radius = force / fmax * max_thick |
73 | | - pipe = Cylinder.from_line_and_radius(line, radius) |
74 | | - if force > 1e-3: |
75 | | - pipes.append(pipe) |
76 | | - |
77 | | -viewer.scene.add(pipes, name="Pipes", color=Color.red()) |
| 79 | +visualization(vault, form) |
78 | 80 |
|
79 | | -viewer.show() |
|
0 commit comments