Skip to content

Commit 98a6eaf

Browse files
committed
draw in layers
1 parent c65a86d commit 98a6eaf

File tree

11 files changed

+116
-30
lines changed

11 files changed

+116
-30
lines changed

commands/RV_dem_blocks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ def RunCommand():
4444
# Scene
4545
# =============================================================================
4646

47-
compas_rhino.layers.clear_layer("RV::DEM")
47+
compas_rhino.layers.clear_layer("RhinoVAULT::DEM")
4848

4949
scene = Scene()
5050

5151
for block in model.blocks():
52-
scene.add(block.modelgeometry, layer="RV::DEM", disjoint=True) # type: ignore
52+
scene.add(block.modelgeometry, layer="RhinoVAULT::DEM", disjoint=True) # type: ignore
5353

5454
scene.draw()
5555

commands/RV_force.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def RunCommand():
4141

4242
rs.UnselectAllObjects()
4343

44-
session.scene.add(forcediagram, name=forcediagram.name) # type: ignore
44+
session.scene.add(forcediagram, name=forcediagram.name, layer="RhinoVAULT::ForceDiagram") # type: ignore
4545
session.scene.redraw()
4646

4747
rs.Redraw()

commands/RV_form.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ def RunCommand():
5454

5555
pattern.show = False
5656

57-
session.scene.add(formdiagram, name=formdiagram.name) # type: ignore
58-
session.scene.add(thrustdiagram, name=thrustdiagram.name, show=False) # type: ignore
57+
session.scene.add(formdiagram, name=formdiagram.name, layer="RhinoVAULT::FormDiagram") # type: ignore
58+
session.scene.add(thrustdiagram, name=thrustdiagram.name, show=False, layer="RhinoVAULT::ThrustDiagram") # type: ignore
5959
session.scene.redraw()
6060
rs.Redraw()
6161

commands/RV_pattern.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def RunCommand():
111111
# Update scene
112112
# =============================================================================
113113

114-
session.scene.add(pattern, name=pattern.name) # type: ignore
114+
session.scene.add(pattern, name=pattern.name, layer="RhinoVAULT::Pattern") # type: ignore
115115
session.scene.draw()
116116

117117
print("Pattern successfully created.")

commands/RV_session_open.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,22 @@ def RunCommand():
1919
session.scene.clear()
2020
session.load(filepath)
2121

22+
pattern = session.find_pattern(warn=False)
2223
form = session.find_formdiagram(warn=False)
2324
force = session.find_forcediagram(warn=False)
25+
thrust = session.find_thrustdiagram(warn=False)
26+
27+
if pattern:
28+
pattern.layer = "RhinoVAULT::Pattern"
29+
30+
if form:
31+
form.layer = "RhinoVAULT::FormDiagram"
32+
33+
if force:
34+
force.layer = "RhinoVAULT::ForceDiagram"
35+
36+
if thrust:
37+
thrust.layer = "RhinoVAULT::ThrustDiagram"
2438

2539
if form and force:
2640
form.diagram.dual = force.diagram

commands/RV_session_redo.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,22 @@ def RunCommand():
1313
if not session.redo():
1414
return
1515

16+
pattern = session.find_pattern(warn=False)
1617
form = session.find_formdiagram(warn=False)
1718
force = session.find_forcediagram(warn=False)
19+
thrust = session.find_thrustdiagram(warn=False)
20+
21+
if pattern:
22+
pattern.layer = "RhinoVAULT::Pattern"
23+
24+
if form:
25+
form.layer = "RhinoVAULT::FormDiagram"
26+
27+
if force:
28+
force.layer = "RhinoVAULT::ForceDiagram"
29+
30+
if thrust:
31+
thrust.layer = "RhinoVAULT::ThrustDiagram"
1832

1933
if form and force:
2034
form.diagram.dual = force.diagram

commands/RV_session_undo.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,22 @@ def RunCommand():
1313
if not session.undo():
1414
return
1515

16+
pattern = session.find_pattern(warn=False)
1617
form = session.find_formdiagram(warn=False)
1718
force = session.find_forcediagram(warn=False)
19+
thrust = session.find_thrustdiagram(warn=False)
20+
21+
if pattern:
22+
pattern.layer = "RhinoVAULT::Pattern"
23+
24+
if form:
25+
form.layer = "RhinoVAULT::FormDiagram"
26+
27+
if force:
28+
force.layer = "RhinoVAULT::ForceDiagram"
29+
30+
if thrust:
31+
thrust.layer = "RhinoVAULT::ThrustDiagram"
1832

1933
if form and force:
2034
form.diagram.dual = force.diagram

commands/RV_thrust_modify.py

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import rhinoscriptsyntax as rs # type: ignore
66

77
from compas_rv.session import RVSession
8-
from compas_rv.solvers import InteractiveScaleHorizontal
8+
from compas_rv.solvers import update_force_from_form
9+
from compas_tna.equilibrium import vertical_from_zmax
910

1011

1112
def RunCommand():
@@ -30,9 +31,12 @@ def RunCommand():
3031
# Modify pattern vertices
3132
# =============================================================================
3233

34+
kmax = session.settings.tna.vertical_kmax
35+
zmax = session.settings.tna.vertical_zmax
36+
3337
rs.UnselectAllObjects()
3438

35-
options = ["VertexAttributes", "EdgeAttributes", "FaceAttributes", "MoveSupports", "ScaleForces"]
39+
options = ["VertexAttributes", "EdgeAttributes", "FaceAttributes", "MoveSupports", "ScaleForceDensities"]
3640
option = rs.GetString("Modify the Thrust Diagram", strings=options)
3741
if not option:
3842
return
@@ -60,22 +64,37 @@ def RunCommand():
6064
if selected:
6165
thrust.move_vertices_direction(selected, direction="Z")
6266

63-
# interactively change the scale of the force diagram
64-
# recompute vertical equilibrium accordingly
65-
# use vertical_from_q
67+
elif option == "ScaleForceDensities":
68+
thrust.show_edges = list(thrust.diagram.edges_where(_is_edge=True))
69+
thrust.redraw_edges()
70+
selected = thrust.select_edges()
71+
if selected:
72+
selected = list(set(selected))
73+
factor = rs.GetReal("Scale factor", number=1.0, minimum=0)
74+
if not factor:
75+
return
76+
for edge in selected:
77+
q = factor * thrust.diagram.edge_attribute(edge, "q")
78+
79+
form.diagram.edge_attribute(edge, "q", q)
6680

67-
elif option == "ScaleForces":
68-
scalehorizontal = InteractiveScaleHorizontal(thrust.diagram)
69-
if scalehorizontal():
70-
force.diagram.attributes["scale"] = scalehorizontal.scale
81+
form.diagram.solve_fd()
82+
update_force_from_form(force.diagram, form.diagram)
83+
_, scale = vertical_from_zmax(form.diagram, zmax, kmax=kmax)
84+
force.diagram.attributes["scale"] = scale
85+
force.diagram.update_position()
7186

72-
for index, vertex in enumerate(thrust.diagram.vertices()):
73-
thrust.diagram.vertex_attribute(vertex, "z", scalehorizontal.numdata.xyz[index, 2]) # type: ignore
87+
for vertex in form.diagram.vertices():
88+
form_attr = form.diagram.vertex_attributes(vertex)
89+
thrust_attr = thrust.diagram.vertex_attributes(vertex)
90+
thrust_attr.update(form_attr) # type: ignore
7491

75-
for index, edge in enumerate(thrust.diagram.edges_where(_is_edge=True)):
76-
q = scalehorizontal.scale * scalehorizontal.numdata.q[index, 0] # type: ignore
77-
form.diagram.edge_attribute(edge, "q", q)
78-
thrust.diagram.edge_attribute(edge, "q", q)
92+
for edge in form.diagram.edges():
93+
form_attr = form.diagram.edge_attributes(edge)
94+
thrust_attr = thrust.diagram.edge_attributes(edge)
95+
thrust_attr.update(form_attr) # type: ignore
96+
97+
form.diagram.vertices_attribute(name="z", value=0)
7998

8099
else:
81100
raise NotImplementedError
@@ -90,15 +109,24 @@ def RunCommand():
90109
rs.UnselectAllObjects()
91110

92111
form.show_vertices = True
93-
form.redraw_vertices()
112+
form.show_free = False
113+
form.show_fixed = True
114+
form.show_supports = True
115+
form.show_edges = True
116+
117+
force.show_vertices = True
118+
force.show_free = False
119+
force.show_fixed = True
120+
force.show_supports = True
121+
force.show_edges = True
94122

95123
thrust.show_vertices = True # type: ignore
96124
thrust.show_free = False
97125
thrust.show_fixed = True
98126
thrust.show_supports = True
99127
thrust.show_edges = False
100128

101-
thrust.redraw()
129+
session.scene.redraw()
102130

103131
if session.settings.autosave:
104132
session.record(name="Modify Thrust Diagram")

commands/RV_tna_horizontal.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,18 @@ def redraw(k, xy, edges):
9898

9999
conduit = HorizontalConduit([], refreshrate=refresh)
100100
with conduit.enabled():
101-
horizontal_nodal(form.diagram, force.diagram, kmax=kmax, alpha=alpha, callback=redraw)
101+
horizontal_nodal(form.diagram, force.diagram, kmax=kmax, alpha=alpha, callback=redraw) # type: ignore
102102
else:
103-
horizontal_nodal(form.diagram, force.diagram, kmax=kmax, alpha=alpha)
103+
horizontal_nodal(form.diagram, force.diagram, kmax=kmax, alpha=alpha) # type: ignore
104104

105105
force.diagram.update_position()
106106

107107
# =============================================================================
108108
# Update scene
109109
# =============================================================================
110110

111-
max_angle = max(form.diagram.edges_attribute("_a"))
111+
angles: list[float] = form.diagram.edges_attribute("_a") # type: ignore
112+
max_angle = max(angles)
112113
tol_angles = session.settings.tna.horizontal_max_angle
113114

114115
if max_angle < tol_angles:

commands/RV_tna_vertical.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,15 @@ def RunCommand():
5454

5555
force.diagram.attributes["scale"] = scale
5656

57-
thrustdiagram: ThrustDiagram = form.diagram.copy(cls=ThrustDiagram)
58-
thrustdiagram.name = "ThrustDiagram"
57+
for vertex in form.diagram.vertices():
58+
form_attr = form.diagram.vertex_attributes(vertex)
59+
thrust_attr = thrust.diagram.vertex_attributes(vertex)
60+
thrust_attr.update(form_attr) # type: ignore
61+
62+
for edge in form.diagram.edges():
63+
form_attr = form.diagram.edge_attributes(edge)
64+
thrust_attr = thrust.diagram.edge_attributes(edge)
65+
thrust_attr.update(form_attr) # type: ignore
5966

6067
# flatten the formdiagram again
6168
form.diagram.vertices_attribute(name="z", value=0)
@@ -69,7 +76,6 @@ def RunCommand():
6976

7077
rs.UnselectAllObjects()
7178

72-
thrust.diagram = thrustdiagram
7379
thrust.redraw()
7480

7581
print("Vertical equilibrium found!")

0 commit comments

Comments
 (0)