From aa182df8ef686d8c85a6190c02163e24361173c3 Mon Sep 17 00:00:00 2001 From: Ricardo Maia Avelino Date: Tue, 9 Sep 2025 15:18:22 +0200 Subject: [PATCH 1/2] Add formdiagram from meshes --- commands/TNA_envelope.py | 16 ++++++++++------ commands/TNA_formdiagram.py | 26 ++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/commands/TNA_envelope.py b/commands/TNA_envelope.py index dd7125d..cf9e5c4 100644 --- a/commands/TNA_envelope.py +++ b/commands/TNA_envelope.py @@ -9,6 +9,7 @@ import compas_rhino import compas_rhino.conversions import compas_rhino.objects +from compas.datastructures import Mesh from compas_masonry.session import MasonrySession as Session from compas_tna.diagrams import FormDiagram @@ -267,24 +268,27 @@ def RunCommand(): elif option == "FromBounds": guid = compas_rhino.objects.select_mesh("Select intrados") + rs.UnselectAllObjects() if not guid: return - mesh_intrados = compas_rhino.conversions.meshobject_to_compas(guid) - rs.UnselectAllObjects() + obj = compas_rhino.objects.find_object(guid) + mesh_intrados = compas_rhino.conversions.mesh_to_compas(obj.Geometry, cls=Mesh) guid = compas_rhino.objects.select_mesh("Select extrados") + rs.UnselectAllObjects() if not guid: return - mesh_extrados = compas_rhino.conversions.meshobject_to_compas(guid) - rs.UnselectAllObjects() + obj = compas_rhino.objects.find_object(guid) + mesh_extrados = compas_rhino.conversions.mesh_to_compas(obj.Geometry, cls=Mesh) guid = compas_rhino.objects.select_mesh("Select middle (Optional)") + rs.UnselectAllObjects() if not guid: mesh_middle = None pass else: - mesh_middle = compas_rhino.conversions.meshobject_to_compas(guid) - rs.UnselectAllObjects() + obj = compas_rhino.objects.find_object(guid) + mesh_middle = compas_rhino.conversions.mesh_to_compas(obj.Geometry, cls=Mesh) envelope = MeshEnvelope.from_meshes(mesh_intrados, mesh_extrados, mesh_middle) diff --git a/commands/TNA_formdiagram.py b/commands/TNA_formdiagram.py index cef3304..707dfcc 100644 --- a/commands/TNA_formdiagram.py +++ b/commands/TNA_formdiagram.py @@ -6,6 +6,8 @@ import rhinoscriptsyntax as rs # type: ignore +import compas_rhino +from compas.datastructures import Mesh from compas_masonry.session import MasonrySession as Session from compas_rui import feedback from compas_tna.diagrams import FormDiagram @@ -79,6 +81,7 @@ def RunCommand(): # ============================================================================= formdiagram = None + rs.UnselectAllObjects() option = rs.GetString(message="FormDiagram", strings=["FromPattern", "FromLines", "FromRhinoMesh"]) if not option: @@ -89,14 +92,33 @@ def RunCommand(): # ============================================================================= if option == "FromLines": - pass + guids = compas_rhino.objects.select_lines("Select lines") + if not guids: + return + + lines = compas_rhino.objects.get_line_coordinates(guids) + if not lines: + return + + mesh_formdiagram = Mesh.from_lines(lines, delete_boundary_face=True) # type: ignore + formdiagram = FormDiagram.from_mesh(mesh_formdiagram) + + rs.HideObjects(guids) # ============================================================================= # From a Rhino mesh # ============================================================================= elif option == "FromRhinoMesh": - pass + guid = compas_rhino.objects.select_mesh("Select FormDiagram Mesh") + rs.UnselectAllObjects() + if not guid: + return + obj = compas_rhino.objects.find_object(guid) + mesh_formdiagram = compas_rhino.conversions.mesh_to_compas(obj.Geometry, cls=Mesh) + formdiagram = FormDiagram.from_mesh(mesh_formdiagram) + + rs.HideObjects(guid) # ============================================================================= # From a predefined pattern From a896c13fd1c1c14ed9d6cbcf83594b114c0666f3 Mon Sep 17 00:00:00 2001 From: Ricardo Maia Avelino Date: Tue, 9 Sep 2025 15:22:56 +0200 Subject: [PATCH 2/2] hide objects --- commands/TNA_envelope.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/commands/TNA_envelope.py b/commands/TNA_envelope.py index cf9e5c4..236031c 100644 --- a/commands/TNA_envelope.py +++ b/commands/TNA_envelope.py @@ -250,6 +250,8 @@ def RunCommand(): if not thickness: return + rs.HideObject(guid) + envelope = MeshEnvelope.from_middle_mesh(mesh_middle, thickness) # # ============================================================================= @@ -267,10 +269,13 @@ def RunCommand(): # ============================================================================= elif option == "FromBounds": + guids_bounds = [] + guid = compas_rhino.objects.select_mesh("Select intrados") rs.UnselectAllObjects() if not guid: return + guids_bounds.append(guid) obj = compas_rhino.objects.find_object(guid) mesh_intrados = compas_rhino.conversions.mesh_to_compas(obj.Geometry, cls=Mesh) @@ -278,6 +283,7 @@ def RunCommand(): rs.UnselectAllObjects() if not guid: return + guids_bounds.append(guid) obj = compas_rhino.objects.find_object(guid) mesh_extrados = compas_rhino.conversions.mesh_to_compas(obj.Geometry, cls=Mesh) @@ -287,9 +293,12 @@ def RunCommand(): mesh_middle = None pass else: + guids_bounds.append(guid) obj = compas_rhino.objects.find_object(guid) mesh_middle = compas_rhino.conversions.mesh_to_compas(obj.Geometry, cls=Mesh) + rs.HideObjects(guids_bounds) + envelope = MeshEnvelope.from_meshes(mesh_intrados, mesh_extrados, mesh_middle) # =============================================================================