Skip to content

Commit 7985246

Browse files
committed
form
1 parent 171c4c6 commit 7985246

File tree

4 files changed

+147
-36
lines changed

4 files changed

+147
-36
lines changed

plugin/RV_form.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,60 @@
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

87
from compas.geometry import Box
98
from compas.geometry import bounding_box
109
from compas.geometry import scale_vector
1110
from compas.geometry import sum_vectors
1211
from compas_rv.datastructures import FormDiagram
13-
from compas_rv.datastructures import Pattern
14-
from compas_rv.scene import RhinoPatternObject
12+
from compas_rv.datastructures import ThrustDiagram
1513
from compas_rv.session import RVSession
1614

1715

1816
def RunCommand():
1917
session = RVSession()
2018

21-
pattern: RhinoPatternObject = session.scene.find_by_itemtype(Pattern)
19+
pattern = session.find_pattern()
2220
if not pattern:
2321
return
2422

23+
session.clear_all_diagrams()
24+
2525
# =============================================================================
2626
# Init the form diagram
2727
# =============================================================================
2828

2929
rs.UnselectAllObjects()
3030

31-
form = FormDiagram.from_pattern(pattern.mesh)
32-
form.name = "FormDiagram"
31+
formdiagram = FormDiagram.from_pattern(pattern.mesh)
32+
formdiagram.name = "FormDiagram"
3333

34-
form.vertices_attribute(name="z", value=0)
34+
formdiagram.vertices_attribute(name="z", value=0)
3535

36-
normals = [form.face_normal(face) for face in form.faces_where(_is_loaded=True)]
36+
normals = [formdiagram.face_normal(face) for face in formdiagram.faces_where(_is_loaded=True)]
3737
scale = 1 / len(normals)
3838
normal = scale_vector(sum_vectors(normals), scale)
3939
if normal[2] < 0:
40-
form.flip_cycles()
40+
formdiagram.flip_cycles()
4141

42-
form.vertices_attribute("is_fixed", False)
42+
formdiagram.vertices_attribute("is_fixed", False)
4343

4444
fixed = list(pattern.mesh.vertices_where(is_fixed=True))
4545

4646
if fixed:
4747
for vertex in fixed:
48-
if form.has_vertex(vertex):
49-
form.vertex_attribute(vertex, "is_support", True)
48+
if formdiagram.has_vertex(vertex):
49+
formdiagram.vertex_attribute(vertex, "is_support", True)
5050

51-
bbox = Box.from_bounding_box(bounding_box(form.vertices_attributes("xyz")))
51+
thrustdiagram: ThrustDiagram = formdiagram.copy(cls=ThrustDiagram)
52+
thrustdiagram.name = "ThrustDiagram"
53+
54+
# set an initial value for zmax
55+
bbox = Box.from_bounding_box(bounding_box(formdiagram.vertices_attributes("xyz")))
5256
diagonal = bbox.points[2] - bbox.points[0]
5357
zmax = 0.25 * diagonal.length
54-
55-
session.settings.tna.vertical.zmax = zmax
58+
session.settings.tna.vertical_zmax = zmax
5659

5760
# =============================================================================
5861
# Update scene
@@ -62,15 +65,13 @@ def RunCommand():
6265

6366
pattern.show = False
6467

65-
session.scene.add(form, name=form.name)
68+
session.scene.add(formdiagram, name=formdiagram.name)
69+
session.scene.add(thrustdiagram, name=thrustdiagram.name, show=False)
70+
6671
session.scene.redraw()
6772

6873
rs.Redraw()
6974

70-
# =============================================================================
71-
# Save session
72-
# =============================================================================
73-
7475
if session.settings.autosave:
7576
session.record(name="Init Form Diagram")
7677

plugin/RV_form_modify.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,20 @@
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 FormDiagram
9-
from compas_rv.scene import RhinoFormObject
107
from compas_rv.session import RVSession
118

129

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

16-
form: RhinoFormObject = session.scene.find_by_itemtype(FormDiagram)
13+
form = session.find_formdiagram()
1714
if not form:
1815
return
1916

2017
# =============================================================================
21-
# Modify pattern vertices
18+
# Modify form vertices
2219
# =============================================================================
2320

2421
rs.UnselectAllObjects()
@@ -29,14 +26,20 @@ def RunCommand():
2926
return
3027

3128
if option == "VertexAttributes":
32-
selectable = list(form.mesh.vertices())
33-
selected = form.select_vertices(selectable)
29+
form.show_vertices = list(form.diagram.vertices())
30+
form.redraw_vertices()
31+
32+
selected = form.select_vertices()
33+
3434
if selected:
3535
form.update_vertex_attributes(selected)
3636

3737
elif option == "EdgeAttributes":
38-
selectable = list(form.mesh.edges_where(_is_edge=True))
39-
selected = form.select_edges(selectable)
38+
form.show_edges = list(form.diagram.edges_where(_is_edge=True))
39+
form.redraw_edges()
40+
41+
selected = form.select_edges()
42+
4043
if selected:
4144
form.update_edge_attributes(selected)
4245

@@ -54,14 +57,8 @@ def RunCommand():
5457
form.show_fixed = True
5558
form.show_supports = True
5659
form.show_edges = True
57-
form.clear()
58-
form.draw()
59-
60-
rs.Redraw()
6160

62-
# =============================================================================
63-
# Save session
64-
# =============================================================================
61+
form.redraw()
6562

6663
if session.settings.autosave:
6764
session.record(name="Modify Form Diagram")

plugin/RV_form_relax.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#! python3
2+
# venv: rhinovault
3+
# r: compas>=2.5, compas_rui>=0.3.1, compas_session>=0.4.1, compas_tna>=0.5
4+
5+
import rhinoscriptsyntax as rs # type: ignore
6+
7+
from compas_rv.session import RVSession
8+
9+
10+
def RunCommand():
11+
session = RVSession()
12+
13+
form = session.find_formdiagram()
14+
if not form:
15+
return
16+
17+
# =============================================================================
18+
# Pattern relax
19+
# =============================================================================
20+
21+
rs.UnselectAllObjects()
22+
23+
form.mesh.relax()
24+
25+
# =============================================================================
26+
# Update scene
27+
# =============================================================================
28+
29+
rs.UnselectAllObjects()
30+
31+
form.show_vertices = True
32+
form.show_free = False
33+
form.show_fixed = True
34+
form.show_supports = True
35+
form.show_edges = True
36+
37+
form.redraw()
38+
39+
if session.settings.autosave:
40+
session.record(name="Relax the FormDiagram")
41+
42+
43+
# =============================================================================
44+
# Run as main
45+
# =============================================================================
46+
47+
if __name__ == "__main__":
48+
RunCommand()

plugin/RV_form_smooth.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#! python3
2+
# venv: rhinovault
3+
# r: compas>=2.5, compas_rui>=0.3.1, compas_session>=0.4.1, compas_tna>=0.5
4+
5+
import rhinoscriptsyntax as rs # type: ignore
6+
7+
from compas.itertools import flatten
8+
from compas_rv.session import RVSession
9+
10+
11+
def RunCommand():
12+
session = RVSession()
13+
14+
form = session.find_formdiagram()
15+
if not form:
16+
return
17+
18+
# =============================================================================
19+
# Pattern relax
20+
# =============================================================================
21+
22+
rs.UnselectAllObjects()
23+
24+
anchors = list(form.diagram.vertices_where(is_support=True))
25+
fixed = list(form.diagram.vertices_where(is_fixed=True))
26+
fixed = anchors + fixed
27+
28+
options = ["True", "False"]
29+
option = rs.GetString("Press Enter to smooth or ESC to exit. Keep all boundaries fixed?", strings=options)
30+
if option is None:
31+
return
32+
33+
if option == "True":
34+
# perhaps just redefine "vertices_on_boundaries"?
35+
fixed += list(flatten(form.diagram.vertices_on_boundaries()))
36+
fixed += list(flatten([form.diagram.face_vertices(face) for face in form.diagram.faces_where(_is_loaded=False)]))
37+
38+
fixed = list(set(fixed))
39+
40+
form.diagram.smooth_area(fixed=fixed)
41+
42+
# =============================================================================
43+
# Update scene
44+
# =============================================================================
45+
46+
rs.UnselectAllObjects()
47+
48+
form.show_vertices = True
49+
form.show_free = False
50+
form.show_fixed = True
51+
form.show_supports = True
52+
form.show_edges = True
53+
54+
form.redraw()
55+
56+
if session.settings.autosave:
57+
session.record(name="Smooth the FormDiagram")
58+
59+
60+
# =============================================================================
61+
# Run as main
62+
# =============================================================================
63+
64+
if __name__ == "__main__":
65+
RunCommand()

0 commit comments

Comments
 (0)