Skip to content

Commit 1f144d7

Browse files
viewer update
1 parent 70eaf1b commit 1f144d7

10 files changed

Lines changed: 193 additions & 221 deletions

File tree

examples/_tutorial/1_arch.py

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
from compas_tno.diagrams import FormDiagram
33
from compas_tno.shapes import Shape
44

5-
# from compas_tno.viewers import Viewer
6-
# from compas_tno.plotters import TNOPlotter
5+
from compas_tno.viewer import TNOViewer
76

87
from compas_viewer import Viewer
98

9+
from compas.colors import Color
10+
from compas.geometry import Cylinder
11+
import math
12+
1013
# ----------------------------------------
1114
# 1. Geometric definition
1215
# ----------------------------------------
@@ -39,14 +42,8 @@
3942
# 4. Visualise solution
4043
# ----------------------------------------
4144

42-
# view = Viewer(form, arch)
43-
# view.settings['camera.target'] = [0.5, 0, 0]
44-
# view.settings['camera.distance'] = 7.0
45-
# view.settings['camera.rx'] = 60
46-
# view.draw_form()
47-
# view.draw_shape()
48-
# view.draw_cracks()
49-
# view.show()
45+
viewer = TNOViewer(form, arch)
46+
viewer.show()
5047

5148
# ----------------------------------------
5249
# 5. Create analysis for maximum thrust and visualise
@@ -61,18 +58,5 @@
6158
analysis.set_up_optimiser()
6259
analysis.run()
6360

64-
print('Form Diagram:', form)
65-
66-
viewer = Viewer()
67-
viewer.scene.add(form)
61+
viewer = TNOViewer(form, arch)
6862
viewer.show()
69-
70-
# view = Viewer(form, arch)
71-
# view.settings['camera.target'] = [0.5, 0, 0]
72-
# view.settings['camera.distance'] = 7.0
73-
# view.settings['camera.rx'] = 60
74-
# view.draw_form()
75-
# view.draw_shape()
76-
# view.draw_cracks()
77-
# view.draw_reactions(extend_reactions=True)
78-
# view.show()

examples/_tutorial/2_crossvault_minmax.py

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,7 @@
77
from compas_tno.analysis import Analysis
88
from compas_tno.diagrams import FormDiagram
99
from compas_tno.shapes import Shape
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()
10+
from compas_tno.viewer import TNOViewer
4311

4412
# ----------------------------------------
4513
# 1. Shape geometric definition
@@ -65,7 +33,7 @@ def visualization(vault, form):
6533
analysis.set_up_optimiser()
6634
analysis.run()
6735

68-
visualization(vault, form)
36+
TNOViewer(form, vault).show()
6937

7038
# --------------------------------------------
7139
# 4. Maximum thurst solution and visualisation
@@ -76,5 +44,5 @@ def visualization(vault, form):
7644
analysis.set_up_optimiser()
7745
analysis.run()
7846

79-
visualization(vault, form)
47+
TNOViewer(form, vault).show()
8048

examples/_tutorial/3_crossvault_fan.py

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,7 @@
77
from compas_tno.analysis import Analysis
88
from compas_tno.diagrams import FormDiagram
99
from compas_tno.shapes import Shape
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()
10+
from compas_tno.viewer import TNOViewer
4311

4412
# ----------------------------------------
4513
# 1. Shape geometric definition
@@ -65,7 +33,7 @@ def visualization(vault, form):
6533
analysis.set_up_optimiser()
6634
analysis.run()
6735

68-
visualization(vault, form)
36+
TNOViewer(form, vault).show()
6937

7038
# --------------------------------------------
7139
# 4. Maximum thurst solution and visualisation
@@ -76,4 +44,4 @@ def visualization(vault, form):
7644
analysis.set_up_optimiser()
7745
analysis.run()
7846

79-
visualization(vault, form)
47+
TNOViewer(form, vault).show()

examples/_tutorial/4_dome_minthk.py

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,7 @@
77
from compas.colors import Color
88
from compas.geometry import Cylinder
99

10-
# ----------------------------------------
11-
# 0. Vizualization function
12-
# ----------------------------------------
13-
14-
def visualization(vault, form):
15-
viewer = Viewer()
16-
17-
# viewer.scene.add(vault.middle, show_lines=False, name="Middle")
18-
viewer.scene.add(vault.intrados, show_lines=False, name="Intrados", opacity=0.5)
19-
viewer.scene.add(vault.extrados, show_lines=False, name="Extrados", opacity=0.5)
20-
21-
edges = list(form.edges_where({"_is_edge": True}))
22-
23-
max_thick = 0.1
24-
forces = [form.edge_attribute(edge, "q") * form.edge_length(edge) for edge in edges]
25-
fmax = math.sqrt(max(abs(max(forces)), abs(min(forces))))
26-
27-
pipes = []
28-
for edge in edges:
29-
qi = form.edge_attribute(edge, "q")
30-
line = form.edge_line(edge)
31-
length = line.length
32-
force = math.sqrt(abs(qi * length))
33-
radius = force / fmax * max_thick
34-
pipe = Cylinder.from_line_and_radius(line, radius)
35-
if force > 1e-3:
36-
pipes.append(pipe)
37-
viewer.scene.add(pipe, color=Color.red())
38-
39-
# viewer.scene.add(pipes, name="Pipes", color=Color.red())
40-
41-
viewer.show()
10+
from compas_tno.viewer import TNOViewer
4211

4312
# ----------------------------------------
4413
# 1. Shape geometric definition
@@ -69,4 +38,4 @@ def visualization(vault, form):
6938
thk_min = analysis.optimiser.fopt
7039
dome_min = Shape.create_dome(radius=radius, thk=thk_min, center=center)
7140

72-
visualization(dome_min, form)
41+
TNOViewer(form, dome_min).show()

examples/_tutorial/5_dome_settlement.py

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,7 @@
1010
import math
1111
from compas.colors import Color
1212
from compas.geometry import Cylinder
13-
14-
# ----------------------------------------
15-
# 0. Vizualization function
16-
# ----------------------------------------
17-
18-
def visualization(vault, form):
19-
viewer = Viewer()
20-
21-
# viewer.scene.add(vault.middle, show_lines=False, name="Middle")
22-
viewer.scene.add(vault.intrados, show_lines=False, name="Intrados", opacity=0.5)
23-
viewer.scene.add(vault.extrados, show_lines=False, name="Extrados", opacity=0.5)
24-
25-
edges = list(form.edges_where({"_is_edge": True}))
26-
27-
max_thick = 0.1
28-
forces = [form.edge_attribute(edge, "q") * form.edge_length(edge) for edge in edges]
29-
fmax = math.sqrt(max(abs(max(forces)), abs(min(forces))))
30-
31-
pipes = []
32-
for edge in edges:
33-
qi = form.edge_attribute(edge, "q")
34-
line = form.edge_line(edge)
35-
length = line.length
36-
force = math.sqrt(abs(qi * length))
37-
radius = force / fmax * max_thick
38-
pipe = Cylinder.from_line_and_radius(line, radius)
39-
if force > 1e-3:
40-
pipes.append(pipe)
41-
viewer.scene.add(pipe, color=Color.red())
42-
43-
# viewer.scene.add(pipes, name="Pipes", color=Color.red())
44-
45-
viewer.show()
13+
from compas_tno.viewer import TNOViewer
4614

4715
# ----------------------------------------
4816
# 1. Shape geometric definition
@@ -95,4 +63,4 @@ def visualization(vault, form):
9563
analysis.set_up_optimiser()
9664
analysis.run()
9765

98-
visualization(dome, form)
66+
TNOViewer(form, dome).show()

examples/_tutorial/6_crossvault_maxload.py

Lines changed: 11 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,8 @@
1212
from compas.colors import Color
1313
from compas.geometry import Cylinder
1414

15-
# ----------------------------------------
16-
# 0. Vizualization function
17-
# ----------------------------------------
18-
19-
def visualization(vault, form):
20-
viewer = Viewer()
21-
22-
# viewer.scene.add(vault.middle, show_lines=False, name="Middle")
23-
viewer.scene.add(vault.intrados, show_lines=False, name="Intrados", opacity=0.5)
24-
viewer.scene.add(vault.extrados, show_lines=False, name="Extrados", opacity=0.5)
25-
26-
edges = list(form.edges_where({"_is_edge": True}))
27-
28-
max_thick = 0.1
29-
forces = [form.edge_attribute(edge, "q") * form.edge_length(edge) for edge in edges]
30-
fmax = math.sqrt(max(abs(max(forces)), abs(min(forces))))
15+
from compas_tno.viewer import TNOViewer
3116

32-
pipes = []
33-
for edge in edges:
34-
qi = form.edge_attribute(edge, "q")
35-
line = form.edge_line(edge)
36-
length = line.length
37-
force = math.sqrt(abs(qi * length))
38-
radius = force / fmax * max_thick
39-
pipe = Cylinder.from_line_and_radius(line, radius)
40-
if force > 1e-3:
41-
pipes.append(pipe)
42-
viewer.scene.add(pipe, color=Color.red())
43-
44-
# viewer.scene.add(pipes, name="Pipes", color=Color.red())
45-
46-
viewer.show()
4717

4818
# ----------------------------------------
4919
# 1. Shape geometric definition
@@ -60,7 +30,7 @@ def visualization(vault, form):
6030
discretisation = 8
6131
form = FormDiagram.create_cross_form(xy_span=xy_span, discretisation=discretisation)
6232

63-
load_pos = 3
33+
load_pos = 2
6434
xc = yc = L / 2
6535
yp = 2.5
6636
yp = yc - load_pos / (discretisation / 2) * yc
@@ -76,14 +46,15 @@ def visualization(vault, form):
7646
if y < yc:
7747
supports.append(key)
7848

79-
print(loaded_node, supports)
49+
if load_pos != 0:
50+
print(loaded_node, supports)
51+
form, loaded_node = form_add_lines_support(form, loaded_node=loaded_node, supports=supports)
8052

81-
form, loaded_node = form_add_lines_support(form, loaded_node=loaded_node, supports=supports)
53+
# visualization(None, form)
8254

83-
# plotter = TNOPlotter(form)
84-
# plotter.draw_form(scale_width=False, color=Color.black())
85-
# plotter.draw_supports(color=Color.red())
86-
# plotter.show()
55+
viewer = Viewer()
56+
viewer.scene.add(form, name="Form", color=Color.black())
57+
viewer.show()
8758

8859
# ------------------------------------------------------------------------
8960
# 4. Define applied load case
@@ -99,26 +70,11 @@ def visualization(vault, form):
9970
# --------------------------------------------
10071
analysis = Analysis.create_max_load_analysis(form, vault,
10172
load_direction=load_direction,
102-
max_lambd=300,
73+
max_lambd=10000,
10374
printout=True)
10475
analysis.apply_selfweight()
10576
analysis.apply_envelope()
10677
analysis.set_up_optimiser()
10778
analysis.run()
10879

109-
visualization(vault, form)
110-
111-
# viewer = Viewer(form)
112-
# viewer.settings["scale.reactions"] = 0.004
113-
# viewer.draw_thrust()
114-
# viewer.draw_cracks()
115-
# viewer.draw_shape()
116-
# viewer.draw_reactions()
117-
118-
# length = 2.0
119-
# x, y, z = form.vertex_coordinates(loaded_node)
120-
# z += length + 0.1
121-
# arrow = Arrow([x, y, z], [0, 0, -length])
122-
# viewer.app.add(arrow, linecolor=(0, 0, 0), facecolor=(0, 0, 0))
123-
124-
# viewer.show()
80+
TNOViewer(form, vault).show()

examples/_tutorial/7_loadpath.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22
from compas_tno.diagrams import FormDiagram
33
from compas_tno.shapes import Shape
44

5-
form = FormDiagram.create_cross_form()
5+
from compas_viewer import Viewer
6+
import math
7+
from compas.colors import Color
8+
from compas.geometry import Cylinder
9+
from compas_tno.viewer import TNOViewer
10+
11+
form = FormDiagram.create_cross_form(discretisation=20)
612
shape = Shape.create_crossvault(spr_angle=30.0)
713

814
analysis = Analysis.create_lp_analysis(form, shape, solver="CVXPY", printout=True)
915
analysis.apply_selfweight()
1016
analysis.set_up_optimiser()
1117
analysis.run()
1218

13-
# view = Viewer(form)
14-
# view.draw_thrust()
15-
# view.show()
19+
TNOViewer(form).show()

src/compas_tno/diagrams/form.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1509,7 +1509,7 @@ def apply_bounds_on_q(self, qmin=-1e4, qmax=1e-8) -> None:
15091509
self.edge_attribute(edge, "qmin", qmin[i])
15101510
self.edge_attribute(edge, "qmax", qmax[i])
15111511
else:
1512-
for u, v in self.edges_where({"_is_edge": True}):
1512+
for i, edge in enumerate(self.edges_where({"_is_edge": True})):
15131513
self.edge_attribute(edge, "qmin", qmin)
15141514
self.edge_attribute(edge, "qmax", qmax)
15151515

0 commit comments

Comments
 (0)