Skip to content

Commit 171c4c6

Browse files
committed
force
1 parent e354ba4 commit 171c4c6

File tree

2 files changed

+56
-39
lines changed

2 files changed

+56
-39
lines changed

plugin/RV_force.py

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,60 +8,49 @@
88
from compas.geometry import Box
99
from compas.geometry import bounding_box
1010
from compas_rv.datastructures import ForceDiagram
11-
from compas_rv.datastructures import FormDiagram
12-
from compas_rv.scene import RhinoForceObject
13-
from compas_rv.scene import RhinoFormObject
1411
from compas_rv.session import RVSession
1512

1613

1714
def RunCommand():
1815
session = RVSession()
1916

20-
formobj: RhinoFormObject = session.scene.find_by_itemtype(FormDiagram)
21-
if not formobj:
17+
form = session.find_formdiagram()
18+
if not form:
2219
return
2320

24-
forceobj: RhinoForceObject = session.scene.find_by_itemtype(ForceDiagram)
25-
if forceobj:
26-
session.scene.remove(forceobj)
27-
session.scene.redraw()
28-
rs.Redraw()
21+
session.clear_all_forcediagrams()
2922

3023
# =============================================================================
3124
# Init the force diagram
3225
# =============================================================================
3326

34-
force: ForceDiagram = ForceDiagram.from_formdiagram(formobj.mesh)
35-
force.update_default_edge_attributes(lmin=0.1)
27+
forcediagram: ForceDiagram = ForceDiagram.from_formdiagram(form.diagram)
28+
forcediagram.update_default_edge_attributes(lmin=0.1)
3629

37-
bbox_form = Box.from_bounding_box(bounding_box(formobj.mesh.vertices_attributes("xyz")))
38-
bbox_force = Box.from_bounding_box(bounding_box(force.vertices_attributes("xyz")))
30+
bbox_form = Box.from_bounding_box(bounding_box(form.diagram.vertices_attributes("xyz")))
31+
bbox_force = Box.from_bounding_box(bounding_box(forcediagram.vertices_attributes("xyz")))
3932

4033
y_form = bbox_form.ymin + 0.5 * (bbox_form.ymax - bbox_form.ymin)
4134
y_force = bbox_force.ymin + 0.5 * (bbox_force.ymax - bbox_force.ymin)
4235
dx = 1.3 * (bbox_form.xmax - bbox_form.xmin) + (bbox_form.xmin - bbox_force.xmin)
4336
dy = y_form - y_force
4437

45-
force.translate([dx, dy, 0])
46-
force.update_angle_deviations()
38+
forcediagram.translate([dx, dy, 0])
39+
forcediagram.update_angle_deviations()
4740

4841
# =============================================================================
4942
# Update scene
5043
# =============================================================================
5144

5245
rs.UnselectAllObjects()
5346

54-
session.scene.add(force, name=force.name)
47+
session.scene.add(forcediagram, name=forcediagram.name)
5548
session.scene.redraw()
5649

5750
rs.Redraw()
5851

59-
# =============================================================================
60-
# Save session
61-
# =============================================================================
62-
6352
if session.settings.autosave:
64-
session.record(name="Init Force Diagram")
53+
session.record(name="Create Force Diagram")
6554

6655

6756
# =============================================================================

plugin/RV_force_modify.py

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,81 @@
22
# venv: rhinovault
33
# r: compas>=2.5, compas_rui>=0.3.1, compas_session>=0.4.1, compas_tna>=0.5
44

5-
65
import rhinoscriptsyntax as rs # type: ignore
76

8-
from compas_rv.datastructures import ForceDiagram
9-
from compas_rv.scene import RhinoForceObject
107
from compas_rv.session import RVSession
118

129

1310
def RunCommand():
1411
session = RVSession()
1512

16-
force: RhinoForceObject = session.scene.find_by_itemtype(ForceDiagram)
13+
form = session.find_formdiagram()
14+
if not form:
15+
return
16+
17+
force = session.find_forcediagram()
1718
if not force:
1819
return
1920

2021
# =============================================================================
21-
# Modify pattern vertices
22+
# Modify force vertices
2223
# =============================================================================
2324

2425
rs.UnselectAllObjects()
2526

26-
options = ["VertexAttributes", "EdgeAttributes"]
27+
options = ["VertexAttributes", "EdgeAttributes", "MoveVertices"]
2728
option = rs.GetString("Modify the Force Diagram", strings=options)
29+
2830
if not option:
2931
return
3032

3133
if option == "VertexAttributes":
32-
selectable = list(force.mesh.vertices())
33-
selected = force.select_vertices(selectable)
34+
force.show_vertices = list(force.diagram.vertices())
35+
force.redraw_vertices()
36+
37+
selected = force.select_vertices()
38+
3439
if selected:
3540
force.update_vertex_attributes(selected)
3641

3742
elif option == "EdgeAttributes":
38-
selectable = list(force.mesh.edges_where(_is_edge=True))
39-
selected = force.select_edges(selectable)
43+
force.show_edges = list(force.diagram.edges())
44+
force.redraw_edges()
45+
46+
selected = force.select_edges()
47+
4048
if selected:
4149
force.update_edge_attributes(selected)
4250

51+
elif option == "MoveVertices":
52+
force.show_vertices = list(force.diagram.vertices())
53+
force.redraw_vertices()
54+
55+
selected = force.select_vertices()
56+
57+
if not selected:
58+
return
59+
60+
directions = ["X", "Y", "XY", "Free"]
61+
direction = rs.GetString(message="", strings=directions)
62+
63+
if not direction:
64+
return
65+
66+
if direction in ("X", "Y", "XY"):
67+
force.move_vertices_direction(selected, direction=direction)
68+
69+
else:
70+
force.move_vertices(selected)
71+
72+
# update angle deviations
73+
4374
else:
4475
raise NotImplementedError
4576

77+
if session.settings.autoupdate:
78+
rs.MessageBox("Automatic equilibrium updates are not available yet.", title="Info")
79+
4680
# =============================================================================
4781
# Update scene
4882
# =============================================================================
@@ -54,14 +88,8 @@ def RunCommand():
5488
force.show_fixed = True
5589
force.show_supports = True
5690
force.show_edges = True
57-
force.clear()
58-
force.draw()
59-
60-
rs.Redraw()
6191

62-
# =============================================================================
63-
# Save session
64-
# =============================================================================
92+
force.redraw()
6593

6694
if session.settings.autosave:
6795
session.record(name="Modify Force Diagram")

0 commit comments

Comments
 (0)