Skip to content

Commit 7311720

Browse files
committed
update examples
1 parent f722ebe commit 7311720

File tree

5 files changed

+90
-122
lines changed

5 files changed

+90
-122
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
### Changed
1313

14+
* Updated examples to use `compas_viewer`.
15+
1416
### Removed
1517

1618

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# COMPAS Bender
22

3-
COMPAS extension package for form finding of bending active structures
3+
Form finding of bending active structures using the dynamic relaxation method.

docs/examples/example_arch.py

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
import os
22
from math import fabs
3-
from typing import List
43

5-
from compas_view2.app import App
6-
from compas_view2.objects import Collection
7-
from compas_view2.shapes import Arrow
4+
from compas_viewer import Viewer
85

96
import compas
107
from compas.colors import Color
118
from compas.geometry import Cylinder
9+
from compas.geometry import Line
1210
from compas.geometry import Polygon
1311
from compas.geometry import Vector
1412
from compas.geometry import sum_vectors
15-
from compas.utilities import remap_values
13+
from compas.itertools import remap_values
1614
from compas_bender.bend import bend_splines
1715
from compas_bender.datastructures import BendNetwork
1816

@@ -65,44 +63,38 @@
6563
radii = [fabs(f) for f in network.edges_attribute("f")]
6664
radii = remap_values(radii, 0.01, 0.2)
6765

68-
viewer = App()
66+
viewer = Viewer()
6967

7068
anchors = []
71-
anchor_properties = []
7269
for node in network.nodes_where(is_anchor=True):
7370
anchors.append(network.node_point(node))
74-
anchor_properties.append({"pointcolor": Color.black(), "pointsize": 50})
75-
viewer.add(Collection(anchors, anchor_properties), pointsize=20)
71+
viewer.scene.add(anchors, pointsize=20)
7672

73+
reactions = []
7774
for node in network.nodes_where(is_anchor=True):
7875
point = network.node_point(node)
7976
nbrs = network.neighbors(node)
8077
edges = [(node, nbr) if network.has_edge((node, nbr)) else (nbr, node) for nbr in nbrs]
8178
forces = network.edges_attribute("f", keys=edges)
82-
edgevectors: List[Vector] = [network.node_point(nbr) - point for nbr in nbrs]
79+
edgevectors: list[Vector] = [network.node_point(nbr) - point for nbr in nbrs]
8380
edgevector = Vector(*sum_vectors(edgevectors))
8481
forcevectors = [vector.scaled(force) for force, vector in zip(forces, edgevectors)]
8582
forcevector = Vector(*sum_vectors(forcevectors))
8683
color = Color.green().darkened(50)
8784
vector = network.node_reaction(node)
8885
vector.scale(0.2)
89-
if vector.length > 0.1:
90-
if edgevector.dot(forcevector) > 0:
91-
position = point
92-
else:
93-
position = point - vector
94-
arrow = Arrow(
95-
position,
96-
vector,
97-
head_portion=0.2,
98-
head_width=0.07,
99-
body_width=0.02,
100-
)
101-
viewer.add(arrow, u=16, facecolor=color)
86+
if edgevector.dot(forcevector) > 0:
87+
position = point
88+
else:
89+
position = point - vector
90+
line = Line.from_point_and_vector(position, vector)
91+
reactions.append((line, {"linecolor": color, "linewidth": 3}))
92+
viewer.scene.add(reactions)
10293

10394
for spline in splines:
10495
pipes = []
105-
pipe_properties = []
96+
polygons = []
97+
10698
for u, v in spline["edges"]:
10799
edge = (u, v) if network.has_edge((u, v)) else (v, u)
108100
index = edge_index[edge]
@@ -113,30 +105,28 @@
113105
b = network.node_point(v)
114106
aa = a + ma * 0.03
115107
bb = b + mb * 0.03
116-
viewer.add(Polygon([a, b, bb, aa]), facecolor=(1, 1, 0))
108+
polygons.append((Polygon([a, b, bb, aa]), {"color": Color.yellow()}))
117109
# axial force
118110
force = network.edge_attribute(edge, "f")
119111
line = network.edge_line((u, v))
120-
radius = radii[index]
112+
radius = radii[index] * 0.5
121113
color = Color.red() if force > 0 else Color.blue()
122114
pipe = Cylinder.from_line_and_radius(line, radius)
123-
pipes.append(pipe)
124-
pipe_properties.append({"facecolor": color})
125-
viewer.add(Collection(pipes, pipe_properties))
115+
pipes.append((pipe, {"color": color}))
116+
viewer.scene.add(pipes)
117+
viewer.scene.add(polygons)
126118

127119
for cable in cables:
128120
pipes = []
129-
pipe_properties = []
130121
for edge in cable["edges"]:
131122
index = edge_index[edge]
132123
force = network.edge_attribute(edge, "f")
133124
line = network.edge_line((u, v))
134125
radius = radii[index]
135126
color = Color.red() if force > 0 else Color.blue()
136127
pipe = Cylinder.from_line_and_radius(line, radius)
137-
pipes.append(pipe)
138-
pipe_properties.append({"facecolor": color})
139-
viewer.add(Collection(pipes, pipe_properties))
128+
pipes.append((pipe, {"color": color}))
129+
viewer.scene.add(pipes)
140130

141-
viewer.add(network, show_points=False, linewidth=2)
131+
viewer.scene.add(network, show_points=False, linewidth=2)
142132
viewer.show()

docs/examples/example_cantilever.py

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
import os
22
from math import fabs
33
from turtle import position
4-
from typing import List
54

6-
from compas_view2.app import App
7-
from compas_view2.objects import Collection
8-
from compas_view2.shapes import Arrow
5+
from compas_viewer import Viewer
96

107
import compas
118
from compas.colors import Color
129
from compas.geometry import Cylinder
13-
14-
# from compas.geometry import Line
10+
from compas.geometry import Line
1511
from compas.geometry import Polygon
1612
from compas.geometry import Vector
1713
from compas.geometry import sum_vectors
@@ -89,91 +85,82 @@
8985
radii = [fabs(f) for f in network.edges_attribute("f")]
9086
radii = remap_values(radii, 0.01, 0.2)
9187

92-
viewer = App()
88+
viewer = Viewer()
9389

9490
anchors = []
95-
anchor_properties = []
9691
for node in network.nodes_where(is_anchor=True):
9792
anchors.append(network.node_point(node))
98-
anchor_properties.append({"pointcolor": Color.black(), "pointsize": 50})
99-
viewer.add(Collection(anchors, anchor_properties), pointsize=20)
93+
viewer.scene.add(anchors, pointsize=20)
10094

95+
reactions = []
10196
for node in network.nodes_where(is_anchor=True):
10297
point = network.node_point(node)
10398
nbrs = network.neighbors(node)
10499
edges = [(node, nbr) if network.has_edge((node, nbr)) else (nbr, node) for nbr in nbrs]
105100
forces = network.edges_attribute("f", keys=edges)
106-
edgevectors: List[Vector] = [network.node_point(nbr) - point for nbr in nbrs]
101+
edgevectors: list[Vector] = [network.node_point(nbr) - point for nbr in nbrs]
107102
edgevector = Vector(*sum_vectors(edgevectors))
108103
forcevectors = [vector.scaled(force) for force, vector in zip(forces, edgevectors)]
109104
forcevector = Vector(*sum_vectors(forcevectors))
110105
color = Color.green().darkened(50)
111106
vector = network.node_reaction(node)
112-
vector.scale(0.0005)
113-
if vector.length > 0.1:
114-
if edgevector.dot(forcevector) > 0:
115-
position = point
116-
else:
117-
position = point - vector
118-
arrow = Arrow(
119-
position,
120-
vector,
121-
head_portion=0.2,
122-
head_width=0.07,
123-
body_width=0.02,
124-
)
125-
viewer.add(arrow, u=16, facecolor=color)
107+
vector.scale(0.2)
108+
if edgevector.dot(forcevector) > 0:
109+
position = point
110+
else:
111+
position = point - vector
112+
line = Line.from_point_and_vector(position, vector)
113+
reactions.append((line, {"linecolor": color, "linewidth": 3}))
114+
viewer.scene.add(reactions)
126115

127116
for spline in splines:
128117
pipes = []
129-
pipe_properties = []
118+
polygons = []
119+
130120
for u, v in spline["edges"]:
131121
edge = (u, v) if network.has_edge((u, v)) else (v, u)
132122
index = edge_index[edge]
133123
# bending moment
134124
ma = Vector(*network.node_attributes(u, ["mx", "my", "mz"]))
135125
mb = Vector(*network.node_attributes(v, ["mx", "my", "mz"]))
136-
a = network.node_point(u)
137-
b = network.node_point(v)
138-
aa = a + ma * 0.001
139-
bb = b + mb * 0.001
140-
viewer.add(Polygon([a, b, bb, aa]), facecolor=(1, 1, 0))
126+
if ma and mb:
127+
a = network.node_point(u)
128+
b = network.node_point(v)
129+
aa = a + ma * 0.001
130+
bb = b + mb * 0.001
131+
polygons.append((Polygon([a, b, bb, aa]), {"color": Color.yellow()}))
141132
# axial force
142133
force = network.edge_attribute(edge, "f")
143134
line = network.edge_line((u, v))
144-
radius = radii[index]
135+
radius = radii[index] * 0.5
145136
color = Color.red() if force > 0 else Color.blue()
146137
pipe = Cylinder.from_line_and_radius(line, radius)
147-
pipes.append(pipe)
148-
pipe_properties.append({"facecolor": color})
149-
viewer.add(Collection(pipes, pipe_properties))
138+
pipes.append((pipe, {"color": color}))
139+
viewer.scene.add(pipes)
140+
viewer.scene.add(polygons)
150141

151142
for cable in cables:
152143
pipes = []
153-
pipe_properties = []
154144
for edge in cable["edges"]:
155145
index = edge_index[edge]
156146
force = network.edge_attribute(edge, "f")
157147
line = network.edge_line((u, v))
158148
radius = radii[index]
159149
color = Color.red() if force > 0 else Color.blue()
160150
pipe = Cylinder.from_line_and_radius(line, radius)
161-
pipes.append(pipe)
162-
pipe_properties.append({"facecolor": color})
163-
viewer.add(Collection(pipes, pipe_properties))
151+
pipes.append((pipe, {"color": color}))
152+
viewer.scene.add(pipes)
164153

165154
pipes = []
166-
pipe_properties = []
167155
for edge in ties:
168156
index = edge_index[edge]
169157
force = network.edge_attribute(edge, "f")
170158
line = network.edge_line(edge)
171159
radius = radii[index]
172160
color = Color.red() if force > 0 else Color.blue()
173161
pipe = Cylinder.from_line_and_radius(line, radius)
174-
pipes.append(pipe)
175-
pipe_properties.append({"facecolor": color})
176-
viewer.add(Collection(pipes, pipe_properties))
162+
pipes.append((pipe, {"color": color}))
163+
viewer.scene.add(pipes)
177164

178-
viewer.add(network, show_points=False, linewidth=2)
165+
viewer.scene.add(network, show_points=False, linewidth=2)
179166
viewer.show()

0 commit comments

Comments
 (0)