diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cc624483..2b68dc857 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +* Fixed tag visibility. Tags would still show even if group visibility was turned off. +* Fixed tag missing text_aspect error when opening a viewer a second time in a script. + ### Removed diff --git a/scripts/tag.py b/scripts/tag.py index 54fe01fc0..a06acb3c1 100644 --- a/scripts/tag.py +++ b/scripts/tag.py @@ -7,8 +7,9 @@ t4 = Tag("Absolute height", (5, 0, 0), absolute_height=True, height=100) viewer = Viewer() -viewer.scene.add(t1) -viewer.scene.add(t2) -viewer.scene.add(t3) -viewer.scene.add(t4) -viewer.show() +tag_group = viewer.scene.add_group(name="tags") +tag_group.add(t1) +tag_group.add(t2) +tag_group.add(t3) +tag_group.add(t4) +viewer.show() \ No newline at end of file diff --git a/src/compas_viewer/renderer/renderer.py b/src/compas_viewer/renderer/renderer.py index 2050f6abe..c7cb66bef 100644 --- a/src/compas_viewer/renderer/renderer.py +++ b/src/compas_viewer/renderer/renderer.py @@ -665,6 +665,12 @@ def paint(self, is_instance: bool = False): # Draw text tag sprites if there are any tag_objs = [obj for obj in self.viewer.scene.objects if isinstance(obj, TagObject)] if tag_objs: + # Tag objects are not part of the buffer manager, so they are not initialized by + # rebuild_buffers(). Initialize them here, where the GL context is guaranteed to be current. + for obj in tag_objs: + if not obj._inited: + obj.init() + # release the model shader and bind the tag shader self.shader_tag.bind() self.shader_tag.uniform4x4("viewworld", viewworld) diff --git a/src/compas_viewer/scene/sceneobject.py b/src/compas_viewer/scene/sceneobject.py index 1e117c102..28fbe4380 100644 --- a/src/compas_viewer/scene/sceneobject.py +++ b/src/compas_viewer/scene/sceneobject.py @@ -156,6 +156,7 @@ def init(self): self._update_bounding_box() self.instance_color = Color.from_rgb255(*next(self.viewer.scene._instance_colors_generator)) self.viewer.scene.instance_colors[self.instance_color.rgb255] = self + self._inited = True def update(self, update_transform: bool = True, update_data: bool = False): """Update the object. diff --git a/src/compas_viewer/scene/tagobject.py b/src/compas_viewer/scene/tagobject.py index 512767018..4bbbe1e47 100644 --- a/src/compas_viewer/scene/tagobject.py +++ b/src/compas_viewer/scene/tagobject.py @@ -118,6 +118,7 @@ class TagObject(ViewerSceneObject, GeometryObject): def init(self): self.make_buffers() + self._inited = True def make_buffers(self): positions = [ @@ -223,8 +224,12 @@ def _calculate_text_height(self, camera_position): def draw(self, shader, camera_position, width, height): """Draw the object from its buffers""" - if not self.show: - return + node = self + while node is not None and not node.is_root: + if not getattr(node, "show", True): + return + node = node.parent + shader.enable_attribute("position") if self.worldtransformation is not None: shader.uniform4x4("transform", self.worldtransformation.matrix)