55import rhinoscriptsyntax as rs # type: ignore
66
77from compas_masonry .session import MasonrySession as Session
8+ from compas_rui import feedback
89from compas_tna .diagrams import FormDiagram
10+ from compas_tna .envelope import Envelope
911
1012# Would be better to differentiate between an analysis using a known typology,
1113# for which both form diagram and envelope can be auto-generated based on a few params,
2123def RunCommand ():
2224 session = Session ()
2325
26+ # =============================================================================
27+ # Remove existing form diagram
28+ # =============================================================================
29+
2430 session .delete ("formdiagram" )
2531
2632 for obj in session .scene .find_all_by_itemtype (FormDiagram ):
2733 obj .clear ()
2834 session .scene .remove (obj )
2935
3036 # =============================================================================
31- # Create a form diagram
37+ # Check for existing envelope
38+ # =============================================================================
39+
40+ envelope : Envelope = session ["envelope" ]
41+ if not envelope :
42+ feedback .warn ("There is no Envelope. Please create one first." )
43+ return
44+
45+ # =============================================================================
46+ # Create a (new) form diagram
3247 # =============================================================================
3348
3449 formdiagram = None
@@ -37,12 +52,24 @@ def RunCommand():
3752 if not option :
3853 return
3954
55+ # =============================================================================
56+ # From Rhino lines
57+ # =============================================================================
58+
4059 if option == "FromLines" :
4160 pass
4261
62+ # =============================================================================
63+ # From a Rhino mesh
64+ # =============================================================================
65+
4366 elif option == "FromRhinoMesh" :
4467 pass
4568
69+ # =============================================================================
70+ # From a predefined pattern
71+ # =============================================================================
72+
4673 elif option == "FromPattern" :
4774 option = rs .GetString (message = "From Pattern" , strings = ["Circular" , "Cross" , "Fan" , "Ortho" ])
4875 if not option :
@@ -212,6 +239,8 @@ def RunCommand():
212239
213240 session ["formdiagram" ] = formdiagram
214241
242+ envelope .apply_bounds_to_formdiagram (formdiagram )
243+
215244 session .scene .add (formdiagram , name = "FormDiagram" , layer = "Masonry::TNA::FormDiagram" ) # type: ignore
216245 session .scene .redraw ()
217246
0 commit comments