Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
11 changes: 6 additions & 5 deletions scripts/tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
6 changes: 6 additions & 0 deletions src/compas_viewer/renderer/renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions src/compas_viewer/scene/sceneobject.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
9 changes: 7 additions & 2 deletions src/compas_viewer/scene/tagobject.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ class TagObject(ViewerSceneObject, GeometryObject):

def init(self):
self.make_buffers()
self._inited = True

def make_buffers(self):
positions = [
Expand Down Expand Up @@ -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)
Expand Down