From bd9ad5f6e2ead653763636bc4fcc8e5d6b748c1b Mon Sep 17 00:00:00 2001 From: Ricardo Maia Avelino <36137188+ricardoavelino@users.noreply.github.com> Date: Wed, 2 Sep 2026 15:48:01 +0200 Subject: [PATCH 1/3] proper RhinoEnvelopeObject to stop viz errors --- CHANGELOG.md | 3 + commands/RV_envelope.py | 15 +- commands/RV_loads.py | 5 +- commands/RV_session_open.py | 4 + commands/RV_tna_vertical.py | 3 + commands/RV_tno_analysis.py | 6 +- src/compas_rv/scene/__init__.py | 3 + src/compas_rv/scene/envelopeobject.py | 213 ++++++++++++++++++++++++++ src/compas_rv/scene/formobject.py | 115 -------------- src/compas_rv/session.py | 54 ++++--- 10 files changed, 270 insertions(+), 151 deletions(-) create mode 100644 src/compas_rv/scene/envelopeobject.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 43790d1..225ddc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +* Added a proper RhinoEnvelopeObject to treat the Envelope +* Bumped versions at string req and added option to control min_lb in dome + ### Changed ### Removed diff --git a/commands/RV_envelope.py b/commands/RV_envelope.py index 9d8e4f5..eac85dd 100644 --- a/commands/RV_envelope.py +++ b/commands/RV_envelope.py @@ -17,9 +17,6 @@ from compas_tna.envelope import PointedVaultEnvelope -ENVELOPE_LAYER = "RhinoVAULT::Envelope" - - def get_location(): option = rs.GetString("Envelope location", "Origin", ["Origin", "Coordinates", "Point"]) if not option: @@ -237,17 +234,7 @@ def RunCommand(): envelope.rho_fill = rho_fill session.clear_envelope(redraw=False) - session["envelope"] = envelope - - settings = session.settings.envelope - if envelope.intrados: - session.scene.add(envelope.intrados, disjoint=True, show=settings.show_intrados, name="Intrados", layer=ENVELOPE_LAYER) - if envelope.middle: - session.scene.add(envelope.middle, disjoint=True, show=settings.show_middle, name="Middle", layer=ENVELOPE_LAYER) - if envelope.extrados: - session.scene.add(envelope.extrados, disjoint=True, show=settings.show_extrados, name="Extrados", layer=ENVELOPE_LAYER) - if envelope.fill: - session.scene.add(envelope.fill, disjoint=True, show=settings.show_fill, name="Fill", layer=ENVELOPE_LAYER) + session.add_envelope(envelope) session.scene.redraw() rs.Redraw() diff --git a/commands/RV_loads.py b/commands/RV_loads.py index 6818592..3c302bc 100644 --- a/commands/RV_loads.py +++ b/commands/RV_loads.py @@ -42,9 +42,10 @@ def RunCommand(): envelope = None if option in ("FromEnvelope", "FromFill"): - envelope = session.find_envelope() - if not envelope: + envelopeobject = session.find_envelope() + if not envelopeobject: return + envelope = envelopeobject.envelope if option == "FromEnvelope": normalize = rs.GetString("Normalize loads to envelope self-weight", "Yes", ["Yes", "No"]) diff --git a/commands/RV_session_open.py b/commands/RV_session_open.py index b71ed83..292fefe 100644 --- a/commands/RV_session_open.py +++ b/commands/RV_session_open.py @@ -22,6 +22,7 @@ def RunCommand(): pattern = session.find_pattern(warn=False) form = session.find_formdiagram(warn=False) force = session.find_forcediagram(warn=False) + envelope = session.find_envelope(warn=False) if pattern: pattern.layer = "RhinoVAULT::Pattern" @@ -32,6 +33,9 @@ def RunCommand(): if force: force.layer = "RhinoVAULT::ForceDiagram" + if envelope: + envelope.layer = "RhinoVAULT::Envelope" + if form and force: form.diagram.dual = force.diagram force.diagram.primal = form.diagram diff --git a/commands/RV_tna_vertical.py b/commands/RV_tna_vertical.py index c5987b4..492191a 100644 --- a/commands/RV_tna_vertical.py +++ b/commands/RV_tna_vertical.py @@ -52,6 +52,9 @@ def RunCommand(): # Redraw the form diagram to show the updated 3D geometry form.redraw() + envelope = session.find_envelope(warn=False) + if envelope: + envelope.redraw() print("Vertical equilibrium found!") print("FormDiagram object updated with target height of {}.".format(zmax)) diff --git a/commands/RV_tno_analysis.py b/commands/RV_tno_analysis.py index f030bd5..409b383 100644 --- a/commands/RV_tno_analysis.py +++ b/commands/RV_tno_analysis.py @@ -257,9 +257,10 @@ def RunCommand(): if not formobject: return - envelope = session.find_envelope() - if not envelope: + envelopeobject = session.find_envelope() + if not envelopeobject: return + envelope = envelopeobject.envelope objective = rs.GetString("TNO objective", "MinimumThrust", OBJECTIVES) if not objective: @@ -312,6 +313,7 @@ def RunCommand(): rs.UnselectAllObjects() formobject.redraw() + envelopeobject.redraw() if forceobject: forceobject.redraw() diff --git a/src/compas_rv/scene/__init__.py b/src/compas_rv/scene/__init__.py index 71ed7e6..5b2fc78 100644 --- a/src/compas_rv/scene/__init__.py +++ b/src/compas_rv/scene/__init__.py @@ -1,8 +1,10 @@ from compas.plugins import plugin from compas.scene.context import register +from compas_tna.envelope import Envelope from compas_rv.datastructures import ForceDiagram, FormDiagram, Pattern +from .envelopeobject import RhinoEnvelopeObject from .forceobject import RhinoForceObject from .formobject import RhinoFormObject from .patternobject import RhinoPatternObject @@ -13,3 +15,4 @@ def register_scene_objects_rhino(): register(Pattern, RhinoPatternObject, context="Rhino") register(FormDiagram, RhinoFormObject, context="Rhino") register(ForceDiagram, RhinoForceObject, context="Rhino") + register(Envelope, RhinoEnvelopeObject, context="Rhino") diff --git a/src/compas_rv/scene/envelopeobject.py b/src/compas_rv/scene/envelopeobject.py new file mode 100644 index 0000000..4a44fe6 --- /dev/null +++ b/src/compas_rv/scene/envelopeobject.py @@ -0,0 +1,213 @@ +import rhinoscriptsyntax as rs # type: ignore +import scriptcontext as sc # type: ignore + +import compas_rhino.conversions +import compas_rhino.objects +from compas.colors import Color +from compas.geometry import Line +from compas.geometry import Sphere +from compas.scene.descriptors.color import ColorAttribute +from compas_rhino.scene import RhinoSceneObject +from compas_rv.session import RVSession +from compas_tna.envelope import Envelope + + +class RhinoEnvelopeObject(RhinoSceneObject): + """Scene object for drawing a TNA envelope in Rhino.""" + + session = RVSession() + envelope: Envelope # type: ignore + + boundscolor = ColorAttribute(default=Color.magenta()) + extradoscrackcolor = ColorAttribute(default=Color.green()) + intradoscrackcolor = ColorAttribute(default=Color.blue()) + + def __init__( + self, + layer="RhinoVAULT::Envelope", + group=None, + boundsgroup="RhinoVAULT::Envelope::Bounds", + crackgroup="RhinoVAULT::Envelope::Cracks", + disjoint=True, + boundscolor=None, + extradoscrackcolor=None, + intradoscrackcolor=None, + **kwargs, + ): + super().__init__(layer=layer, group=group, **kwargs) + + self.boundsgroup = boundsgroup + self.crackgroup = crackgroup + self.disjoint = disjoint + + self.boundscolor = boundscolor or self.boundscolor + self.extradoscrackcolor = extradoscrackcolor or self.extradoscrackcolor + self.intradoscrackcolor = intradoscrackcolor or self.intradoscrackcolor + + # ============================================================================= + # Properties + # ============================================================================= + + @property + def settings(self): + settings = super().settings + settings["layer"] = self.layer + settings["group"] = self.group + settings["boundsgroup"] = self.boundsgroup + settings["crackgroup"] = self.crackgroup + settings["disjoint"] = self.disjoint + settings["boundscolor"] = self.boundscolor + settings["extradoscrackcolor"] = self.extradoscrackcolor + settings["intradoscrackcolor"] = self.intradoscrackcolor + return settings + + @property + def envelope(self): + return self.item + + @envelope.setter + def envelope(self, envelope): + self._item = envelope + self._transformation = None + + # ============================================================================= + # Clear + # ============================================================================= + + def clear(self): + """Delete all Rhino geometry drawn by this scene object.""" + compas_rhino.objects.delete_objects(self.guids, purge=True) + self._guids = [] + + # ============================================================================= + # Draw + # ============================================================================= + + def draw_mesh(self, mesh, name): + """Draw one of the envelope meshes.""" + if not mesh: + return + + vertices, faces = mesh.to_vertices_and_faces() + geometry = compas_rhino.conversions.vertices_and_faces_to_rhino(vertices, faces, color=self.color, disjoint=self.disjoint) + geometry.Transform(compas_rhino.conversions.transformation_to_rhino(self.worldtransformation)) + + attr = self.compile_attributes(name=name) + guid = sc.doc.Objects.AddMesh(geometry, attr) + + if self.group: + self.add_to_group(self.group, [guid]) + + self._guids.append(guid) + return guid + + def vertex_bound(self, formdiagram, vertex): + ub = formdiagram.vertex_attribute(vertex, "ub") + lb = formdiagram.vertex_attribute(vertex, "lb") + if ub is None or lb is None: + return + + point = formdiagram.vertex_point(vertex) + upper = point.copy() + upper.z = ub + lower = point.copy() + lower.z = lb + return Line(upper, lower) + + def vertex_is_on_upper_bound(self, formdiagram, vertex, tol=1e-6): + ub = formdiagram.vertex_attribute(vertex, "ub") + if ub is None: + return False + return abs(formdiagram.vertex_attribute(vertex, "z") - ub) < tol + + def vertex_is_on_lower_bound(self, formdiagram, vertex, tol=1e-6): + lb = formdiagram.vertex_attribute(vertex, "lb") + if lb is None: + return False + return abs(formdiagram.vertex_attribute(vertex, "z") - lb) < tol + + def draw_bounds(self, formdiagram): + """Draw the lower and upper vertex bounds of a form diagram.""" + guids = [] + + for vertex in formdiagram.vertices(): + bound = self.vertex_bound(formdiagram, vertex) + if not bound: + continue + + name = "{}.vertex.{}.bound".format(formdiagram.name, vertex) + attr = self.compile_attributes(name=name, color=self.boundscolor) + guids.append(sc.doc.Objects.AddLine(compas_rhino.conversions.line_to_rhino(bound), attr)) + guids.append(sc.doc.Objects.AddPoint(compas_rhino.conversions.point_to_rhino(bound.start), attr)) + guids.append(sc.doc.Objects.AddPoint(compas_rhino.conversions.point_to_rhino(bound.end), attr)) + + if guids: + if self.boundsgroup: + self.add_to_group(self.boundsgroup, guids) + elif self.group: + self.add_to_group(self.group, guids) + + self._guids += guids + return guids + + def draw_cracks(self, formdiagram): + """Draw points where the thrust network touches either envelope bound.""" + guids = [] + + for vertex in formdiagram.vertices(): + if self.vertex_is_on_lower_bound(formdiagram, vertex): + color = self.intradoscrackcolor + elif self.vertex_is_on_upper_bound(formdiagram, vertex): + color = self.extradoscrackcolor + else: + continue + + name = "{}.vertex.{}.crack".format(formdiagram.name, vertex) + attr = self.compile_attributes(name=name, color=color) + sphere = Sphere(self.session.settings.envelope.crack_radius, point=formdiagram.vertex_point(vertex)) + guids.append(sc.doc.Objects.AddSphere(compas_rhino.conversions.sphere_to_rhino(sphere), attr)) + + if guids: + if self.crackgroup: + self.add_to_group(self.crackgroup, guids) + elif self.group: + self.add_to_group(self.group, guids) + + self._guids += guids + return guids + + def draw(self): + """Draw the visible envelope meshes, bounds, and cracks.""" + self._guids = [] + settings = self.session.settings.envelope + + if settings.show_intrados: + self.draw_mesh(self.envelope.intrados, "Intrados") + if settings.show_middle: + self.draw_mesh(self.envelope.middle, "Middle") + if settings.show_extrados: + self.draw_mesh(self.envelope.extrados, "Extrados") + if settings.show_fill: + self.draw_mesh(self.envelope.fill, "Fill") + + if settings.show_bounds or settings.show_cracks: + formobject = self.session.find_formdiagram(warn=False) + if formobject: + if settings.show_bounds: + self.draw_bounds(formobject.diagram) + if settings.show_cracks: + self.draw_cracks(formobject.diagram) + + return self.guids + + # ============================================================================= + # Redraw + # ============================================================================= + + def redraw(self): + """Clear and redraw the envelope object.""" + rs.EnableRedraw(False) + self.clear() + self.draw() + rs.EnableRedraw(True) + rs.Redraw() diff --git a/src/compas_rv/scene/formobject.py b/src/compas_rv/scene/formobject.py index 8b10b3b..4131c95 100644 --- a/src/compas_rv/scene/formobject.py +++ b/src/compas_rv/scene/formobject.py @@ -8,7 +8,6 @@ from compas.colors import Color from compas.geometry import Cylinder from compas.geometry import Line -from compas.geometry import Sphere from compas.geometry import Vector from compas.scene.descriptors.color import ColorAttribute from compas.scene.descriptors.colordict import ColorDictAttribute @@ -43,13 +42,9 @@ class RhinoFormObject(RhinoDiagramObject): selfweightcolor = ColorAttribute(default=Color.white()) compressioncolor = ColorAttribute(default=Color.blue()) tensioncolor = ColorAttribute(default=Color.red()) - ecrackcolor = ColorAttribute(default=Color.green()) - icrackcolor = ColorAttribute(default=Color.blue()) - boundscolor = ColorAttribute(default=Color.magenta()) form_layer = "RhinoVAULT::FormDiagram" thrust_layer = "RhinoVAULT::ThrustDiagram" - envelope_layer = "RhinoVAULT::Envelope" def __init__( self, @@ -67,8 +62,6 @@ def __init__( labelgroup="RhinoVAULT::ThrustDiagram::Labels", reactiongroup="RhinoVAULT::ThrustDiagram::Reactions", residualgroup="RhinoVAULT::ThrustDiagram::Residuals", - crackgroup="RhinoVAULT::Envelope::Cracks", - boundsgroup="RhinoVAULT::Envelope::Bounds", show_thrust=False, show_thrust_vertices=True, show_thrust_edges=True, @@ -97,8 +90,6 @@ def __init__( self.labelgroup = labelgroup self.reactiongroup = reactiongroup self.residualgroup = residualgroup - self.crackgroup = crackgroup - self.boundsgroup = boundsgroup self.show_supports = True self.show_fixed = True @@ -132,45 +123,6 @@ def settings(self): settings["show_thrust_free"] = self.show_thrust_free return settings - # ============================================================================= - # Envelope helpers - # ============================================================================= - - def envelope(self): - return self.session.find_envelope(warn=False) - - def vertex_bound(self, vertex): - ub = self.diagram.vertex_attribute(vertex, "ub") - lb = self.diagram.vertex_attribute(vertex, "lb") - if ub is None or lb is None: - return - point = self.diagram.vertex_point(vertex) - a = point.copy() - a.z = ub - b = point.copy() - b.z = lb - return Line(a, b) - - def vertex_is_on_upper_bound(self, vertex, tol=1e-6): - ub = self.diagram.vertex_attribute(vertex, "ub") - if ub is None: - return False - point = self.diagram.vertex_point(vertex) - return abs(point.z - ub) < tol - - def vertex_is_on_lower_bound(self, vertex, tol=1e-6): - lb = self.diagram.vertex_attribute(vertex, "lb") - if lb is None: - return False - point = self.diagram.vertex_point(vertex) - return abs(point.z - lb) < tol - - def vertex_bound_name(self, vertex): - return f"{self.diagram.name}.vertex.{vertex}.bound" - - def vertex_crack_name(self, vertex): - return f"{self.diagram.name}.vertex.{vertex}.crack" - def edges(self, **kwargs): return self.diagram.edges_where(_is_edge=True) @@ -380,11 +332,6 @@ def draw_thrustdiagram(self): self.draw_thrust_pipes() if self.session.settings.drawing.show_force_labels: self.draw_thrust_force_labels() - if self.envelope() and self.session.settings.envelope.show_bounds: - self.draw_bounds() - if self.envelope() and self.session.settings.envelope.show_cracks: - self.draw_cracks() - return self.guids def draw_thrust_vertices(self): @@ -660,68 +607,6 @@ def draw_thrust_force_labels(self): self._guids += guids return guids - def draw_bounds(self): - guids = [] - layer = self.layer - self.layer = self.envelope_layer - - try: - for vertex in self.diagram.vertices(): - bound = self.vertex_bound(vertex) - if bound: - name = self.vertex_bound_name(vertex) - attr = self.compile_attributes(name=name, color=self.boundscolor) - guid = sc.doc.Objects.AddLine(compas_rhino.conversions.line_to_rhino(bound), attr) - guids.append(guid) - guid = sc.doc.Objects.AddPoint(compas_rhino.conversions.point_to_rhino(bound.start), attr) - guids.append(guid) - guid = sc.doc.Objects.AddPoint(compas_rhino.conversions.point_to_rhino(bound.end), attr) - guids.append(guid) - finally: - self.layer = layer - - if guids: - if self.boundsgroup: - self.add_to_group(self.boundsgroup, guids) - elif self.group: - self.add_to_group(self.group, guids) - - self._guids += guids - return guids - - def draw_cracks(self): - guids = [] - layer = self.layer - self.layer = self.envelope_layer - - try: - for vertex in self.diagram.vertices(): - if self.vertex_is_on_lower_bound(vertex): - name = self.vertex_crack_name(vertex) - attr = self.compile_attributes(name=name, color=self.icrackcolor) - elif self.vertex_is_on_upper_bound(vertex): - name = self.vertex_crack_name(vertex) - attr = self.compile_attributes(name=name, color=self.ecrackcolor) - else: - continue - - point = self.diagram.vertex_point(vertex) - radius = self.session.settings.envelope.crack_radius - sphere = Sphere(radius, point=point) - guid = sc.doc.Objects.AddSphere(compas_rhino.conversions.sphere_to_rhino(sphere), attr) - guids.append(guid) - finally: - self.layer = layer - - if guids: - if self.crackgroup: - self.add_to_group(self.crackgroup, guids) - elif self.group: - self.add_to_group(self.group, guids) - - self._guids += guids - return guids - # ============================================================================= # Draw # ============================================================================= diff --git a/src/compas_rv/session.py b/src/compas_rv/session.py index dfc6880..c70aa75 100644 --- a/src/compas_rv/session.py +++ b/src/compas_rv/session.py @@ -14,14 +14,6 @@ def find_all_by_itemtype(scene: Scene, itemtype) -> list[RhinoSceneObject]: return sceneobjects -def find_all_by_items(scene: Scene, items) -> list[RhinoSceneObject]: - sceneobjects = [] - for obj in scene.objects: - if any(obj.item is item for item in items): - sceneobjects.append(obj) - return sceneobjects - - class RVSession(Session): settings: RVSettings # type: ignore @@ -78,12 +70,43 @@ def find_forcediagram(self, warn=True): rs.MessageBox("There is no ForceDiagram.", title="Warning") def find_envelope(self, warn=True): + from compas_tna.envelope import Envelope + + envelopeobject = self.scene.find_by_itemtype(Envelope) + if envelopeobject: + return envelopeobject + + # Migrate sessions created before envelopes became scene objects. envelope = self.get("envelope") if envelope: - return envelope + return self.add_envelope(envelope, remove_legacy=True) + if warn: rs.MessageBox("There is no Envelope.", title="Warning") + def add_envelope(self, envelope, remove_legacy=False): + """Add an envelope to the scene using the current drawing settings.""" + from compas.datastructures import Mesh + + meshes = [envelope.intrados, envelope.middle, envelope.extrados, getattr(envelope, "fill", None)] + mesh_guids = {str(mesh.guid) for mesh in meshes if mesh is not None} + component_names = {"Intrados", "Middle", "Extrados", "Fill"} + for sceneobject in list(self.scene.objects): + item = sceneobject.item + is_legacy_component = remove_legacy and isinstance(item, Mesh) and sceneobject.name in component_names + if item is not None and (str(item.guid) in mesh_guids or is_legacy_component): + sceneobject.clear() + self.scene.remove(sceneobject) + + if "envelope" in self: + del self.data["envelope"] + + return self.scene.add( + envelope, + name="Envelope", + layer="RhinoVAULT::Envelope", + ) + def clear_all_patterns(self, redraw=True): from compas_rv.datastructures import Pattern @@ -126,17 +149,12 @@ def clear_envelope(self, redraw=True): if formobject: formobject.diagram.attributes["loads_from_envelope"] = False - envelope = self.get("envelope") - if not envelope: + envelopeobject = self.find_envelope(warn=False) + if not envelopeobject: return - items = [mesh for mesh in [envelope.intrados, envelope.middle, envelope.extrados, getattr(envelope, "fill", None)] if mesh] - for obj in find_all_by_items(self.scene, items): - obj.clear() - self.scene.remove(obj) - - if "envelope" in self: - del self.data["envelope"] + envelopeobject.clear() + self.scene.remove(envelopeobject) if redraw: self.scene.redraw() From 3b2cce960ab463563dbcc55f1a8392a2dadf22e5 Mon Sep 17 00:00:00 2001 From: Ricardo Maia Avelino <36137188+ricardoavelino@users.noreply.github.com> Date: Wed, 2 Sep 2026 15:52:12 +0200 Subject: [PATCH 2/3] envelope additional dome parameter --- commands/RV_envelope.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/commands/RV_envelope.py b/commands/RV_envelope.py index eac85dd..72aabfe 100644 --- a/commands/RV_envelope.py +++ b/commands/RV_envelope.py @@ -130,8 +130,10 @@ def get_dome(): r_oculus = rs.GetReal("Oculus radius", 0.5, minimum=0.0) if r_oculus is None or r_oculus >= radius: return - return DomeEnvelope(center=center, radius=radius, thickness=thickness, n_hoops=40, n_parallels=40, r_oculus=r_oculus) - + min_lb = rs.GetReal("Minimum z range of supports (positive downwards)", 0.5, minimum=0.0) + if min_lb is None: + return + return DomeEnvelope(center=center, radius=radius, thickness=thickness, n_hoops=40, n_parallels=40, r_oculus=r_oculus, min_lb=min_lb) def get_from_middle(): guid = compas_rhino.objects.select_mesh("Select middle mesh") From a359ec0183807198eabda88d951bc0f556ae53f4 Mon Sep 17 00:00:00 2001 From: Ricardo Maia Avelino <36137188+ricardoavelino@users.noreply.github.com> Date: Wed, 2 Sep 2026 17:03:38 +0200 Subject: [PATCH 3/3] reqs --- commands/RV.py | 2 +- commands/RV_dem_blocks.py | 2 +- commands/RV_envelope.py | 2 +- commands/RV_force.py | 2 +- commands/RV_force_modify.py | 2 +- commands/RV_force_solve.py | 2 +- commands/RV_form.py | 2 +- commands/RV_form_modify.py | 2 +- commands/RV_loads.py | 2 +- commands/RV_pattern.py | 2 +- commands/RV_pattern_boundaries.py | 2 +- commands/RV_pattern_modify.py | 2 +- commands/RV_pattern_relax.py | 2 +- commands/RV_pattern_supports.py | 2 +- commands/RV_scene_clear.py | 2 +- commands/RV_scene_redraw.py | 2 +- commands/RV_session_export.py | 2 +- commands/RV_session_open.py | 2 +- commands/RV_session_redo.py | 2 +- commands/RV_session_save.py | 2 +- commands/RV_session_undo.py | 2 +- commands/RV_settings.py | 2 +- commands/RV_thrust_info.py | 2 +- commands/RV_thrust_modify.py | 2 +- commands/RV_tna_horizontal.py | 2 +- commands/RV_tna_vertical.py | 2 +- commands/RV_tno_analysis.py | 2 +- requirements.txt | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/commands/RV.py b/commands/RV.py index 576403d..997fe76 100644 --- a/commands/RV.py +++ b/commands/RV.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import pathlib diff --git a/commands/RV_dem_blocks.py b/commands/RV_dem_blocks.py index 1cd6e94..0b51ef2 100644 --- a/commands/RV_dem_blocks.py +++ b/commands/RV_dem_blocks.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore from compas_dem.models import BlockModel diff --git a/commands/RV_envelope.py b/commands/RV_envelope.py index e3faa60..c6b7b0c 100644 --- a/commands/RV_envelope.py +++ b/commands/RV_envelope.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_force.py b/commands/RV_force.py index 8b3e50e..a5bf364 100644 --- a/commands/RV_force.py +++ b/commands/RV_force.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_force_modify.py b/commands/RV_force_modify.py index c05405f..0b8efc6 100644 --- a/commands/RV_force_modify.py +++ b/commands/RV_force_modify.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_force_solve.py b/commands/RV_force_solve.py index e38f0b1..b774193 100644 --- a/commands/RV_force_solve.py +++ b/commands/RV_force_solve.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_form.py b/commands/RV_form.py index 96c04b1..04e68e6 100644 --- a/commands/RV_form.py +++ b/commands/RV_form.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_form_modify.py b/commands/RV_form_modify.py index cbbb152..8c0e9b1 100644 --- a/commands/RV_form_modify.py +++ b/commands/RV_form_modify.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_loads.py b/commands/RV_loads.py index 17cb40a..a2188a4 100644 --- a/commands/RV_loads.py +++ b/commands/RV_loads.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_pattern.py b/commands/RV_pattern.py index e317492..c2e8124 100644 --- a/commands/RV_pattern.py +++ b/commands/RV_pattern.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_pattern_boundaries.py b/commands/RV_pattern_boundaries.py index 8821289..2dbbbd9 100644 --- a/commands/RV_pattern_boundaries.py +++ b/commands/RV_pattern_boundaries.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_pattern_modify.py b/commands/RV_pattern_modify.py index 8c328e1..f8a733c 100644 --- a/commands/RV_pattern_modify.py +++ b/commands/RV_pattern_modify.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_pattern_relax.py b/commands/RV_pattern_relax.py index bd46fcb..b8d2c91 100644 --- a/commands/RV_pattern_relax.py +++ b/commands/RV_pattern_relax.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_pattern_supports.py b/commands/RV_pattern_supports.py index cef4727..08dfd31 100644 --- a/commands/RV_pattern_supports.py +++ b/commands/RV_pattern_supports.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_scene_clear.py b/commands/RV_scene_clear.py index 30c55d7..d42eed1 100644 --- a/commands/RV_scene_clear.py +++ b/commands/RV_scene_clear.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 from compas_rv.session import RVSession diff --git a/commands/RV_scene_redraw.py b/commands/RV_scene_redraw.py index 3d61957..9e1836d 100644 --- a/commands/RV_scene_redraw.py +++ b/commands/RV_scene_redraw.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_session_export.py b/commands/RV_session_export.py index 49febb3..9abb860 100644 --- a/commands/RV_session_export.py +++ b/commands/RV_session_export.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import pathlib diff --git a/commands/RV_session_open.py b/commands/RV_session_open.py index cc7c57e..0ea2385 100644 --- a/commands/RV_session_open.py +++ b/commands/RV_session_open.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import pathlib diff --git a/commands/RV_session_redo.py b/commands/RV_session_redo.py index 8ff9ca3..4869684 100644 --- a/commands/RV_session_redo.py +++ b/commands/RV_session_redo.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 from compas_rv.session import RVSession diff --git a/commands/RV_session_save.py b/commands/RV_session_save.py index 7b07394..d0caf89 100644 --- a/commands/RV_session_save.py +++ b/commands/RV_session_save.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import pathlib diff --git a/commands/RV_session_undo.py b/commands/RV_session_undo.py index 9da5b92..0a06790 100644 --- a/commands/RV_session_undo.py +++ b/commands/RV_session_undo.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 from compas_rv.session import RVSession diff --git a/commands/RV_settings.py b/commands/RV_settings.py index 1d0bb93..8870089 100644 --- a/commands/RV_settings.py +++ b/commands/RV_settings.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore from pydantic import BaseModel diff --git a/commands/RV_thrust_info.py b/commands/RV_thrust_info.py index fc4b05d..7beefe6 100644 --- a/commands/RV_thrust_info.py +++ b/commands/RV_thrust_info.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 from compas_rui.forms.meshinfo import MeshInfoForm from compas_rv.session import RVSession diff --git a/commands/RV_thrust_modify.py b/commands/RV_thrust_modify.py index d8c1ae3..ca0b70e 100644 --- a/commands/RV_thrust_modify.py +++ b/commands/RV_thrust_modify.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_tna_horizontal.py b/commands/RV_tna_horizontal.py index 27e67a8..edaa36c 100644 --- a/commands/RV_tna_horizontal.py +++ b/commands/RV_tna_horizontal.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore # type: ignore diff --git a/commands/RV_tna_vertical.py b/commands/RV_tna_vertical.py index 11e4a3c..17034d9 100644 --- a/commands/RV_tna_vertical.py +++ b/commands/RV_tna_vertical.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import rhinoscriptsyntax as rs # type: ignore diff --git a/commands/RV_tno_analysis.py b/commands/RV_tno_analysis.py index ea57100..a9f089e 100644 --- a/commands/RV_tno_analysis.py +++ b/commands/RV_tno_analysis.py @@ -1,6 +1,6 @@ #! python3 # venv: brg-csd -# r: compas_rv>=0.10.1 +# r: compas_rv>=0.11.0 import numpy as np import rhinoscriptsyntax as rs # type: ignore diff --git a/requirements.txt b/requirements.txt index dc30c69..80c5da1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ compas_libigl >=0.7.4 compas_rui >=0.5.1 compas_session >=0.5.5 compas_skeleton -compas_tna >=0.8.0 +compas_tna >=0.9.0 compas_tno >=0.4.0 compas_triangle >=1.2.1 tessagon