From 86c83fffc053101ae6a6b16361f03c0af1dea30b Mon Sep 17 00:00:00 2001 From: Matthias Mayer Date: Fri, 30 Jun 2023 15:47:39 +0200 Subject: [PATCH 1/6] Implement close functionality for meshcat viewer and zmqserver that hosts the three.js webpage --- src/meshcat/servers/zmqserver.py | 12 ++++++++++++ src/meshcat/visualizer.py | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/src/meshcat/servers/zmqserver.py b/src/meshcat/servers/zmqserver.py index 3b7e39a..fd28135 100644 --- a/src/meshcat/servers/zmqserver.py +++ b/src/meshcat/servers/zmqserver.py @@ -4,6 +4,7 @@ import base64 import os import re +import signal import sys import subprocess import multiprocessing @@ -406,10 +407,21 @@ def main(): if results.open: webbrowser.open(bridge.web_url, new=2) + def cleanup(): + bridge.zmq_socket.close() + bridge.context.destroy() + + # Make sure also kill results in socket being closed otherwise ZMQbg/Reaper and IO processes might stay open + atexit.register(cleanup) + signal.signal(signal.SIGTERM, cleanup) + signal.signal(signal.SIGINT, cleanup) + try: bridge.run() except KeyboardInterrupt: pass + finally: + cleanup() if __name__ == '__main__': main() diff --git a/src/meshcat/visualizer.py b/src/meshcat/visualizer.py index b7b9264..7afe260 100644 --- a/src/meshcat/visualizer.py +++ b/src/meshcat/visualizer.py @@ -1,3 +1,4 @@ +import signal import webbrowser import umsgpack import numpy as np @@ -79,6 +80,12 @@ def get_image(self, w, h): img = Image.open(io.BytesIO(img_bytes)) return img + def close(self): + self.zmq_socket.close() + self.context.destroy() + if self.server_proc is not None: + self.server_proc.send_signal(signal.SIGINT) + self.server_proc.wait() def srcdoc_escape(x): return x.replace("&", "&").replace('"', """) From e886319a370c328561a091fbbb23b13411cda0a0 Mon Sep 17 00:00:00 2001 From: Matthias Mayer Date: Mon, 3 Jul 2023 11:37:40 +0200 Subject: [PATCH 2/6] use proper kill for server --- src/meshcat/visualizer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/meshcat/visualizer.py b/src/meshcat/visualizer.py index 7afe260..7960d31 100644 --- a/src/meshcat/visualizer.py +++ b/src/meshcat/visualizer.py @@ -84,7 +84,7 @@ def close(self): self.zmq_socket.close() self.context.destroy() if self.server_proc is not None: - self.server_proc.send_signal(signal.SIGINT) + self.server_proc.kill() self.server_proc.wait() def srcdoc_escape(x): From 05e0f0d08ff722a639684d0e658d0c068bd369c9 Mon Sep 17 00:00:00 2001 From: Matthias Mayer Date: Mon, 3 Jul 2023 14:19:26 +0200 Subject: [PATCH 3/6] Add Billboard Object --- src/meshcat/geometry.py | 35 +++++++++++++++++++++++++++++++++++ src/meshcat/viewer | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/meshcat/geometry.py b/src/meshcat/geometry.py index ed9109d..0882030 100644 --- a/src/meshcat/geometry.py +++ b/src/meshcat/geometry.py @@ -294,6 +294,41 @@ def lower(self): return data +class BillboardObject(Object): + def __init__(self, text, base_width, size, global_scale=1): + """ + + :param text: Text to put on the billboard + :param base_width: Width of the billboard in pixels + :param size: Height of the text in pixels + :param global_scale: Scale factor to apply to the billboard (0.01 gets it to roughly meter size) + """ + super(BillboardObject, self).__init__([]) + self.text = text + self.base_width = base_width + self.size = size + self.global_scale = global_scale + + def lower(self): + return { + u"metadata": { + u"version": 4.5, + u"type": u"_billboard", + }, + u"geometries": [], + u"materials": [], + u"object": { + u"uuid": self.uuid, + u"type": u"_billboard", + u"text": self.text, + u"base_width": self.base_width, + u"size": self.size, + u"global_scale": self.global_scale, + u"matrix": np.eye(4).flatten().tolist() + } + } + + class Mesh(Object): _type = u"Mesh" diff --git a/src/meshcat/viewer b/src/meshcat/viewer index 65781fc..73923d0 160000 --- a/src/meshcat/viewer +++ b/src/meshcat/viewer @@ -1 +1 @@ -Subproject commit 65781fcb064db536b99a66fe9fcf5bf0b6d1f790 +Subproject commit 73923d0fe71480a394d4e4f4d0492b0cc421e91d From a32fec9cbc7ab557b8912f7b75cfdba8bb1d4cef Mon Sep 17 00:00:00 2001 From: Matthias Mayer Date: Mon, 3 Jul 2023 14:24:16 +0200 Subject: [PATCH 4/6] Add color --- src/meshcat/geometry.py | 10 ++++++++-- src/meshcat/viewer | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/meshcat/geometry.py b/src/meshcat/geometry.py index 0882030..664fa7e 100644 --- a/src/meshcat/geometry.py +++ b/src/meshcat/geometry.py @@ -295,19 +295,23 @@ def lower(self): class BillboardObject(Object): - def __init__(self, text, base_width, size, global_scale=1): + def __init__(self, text, base_width, size, global_scale=1, text_color='white', background_color='blue'): """ :param text: Text to put on the billboard :param base_width: Width of the billboard in pixels :param size: Height of the text in pixels :param global_scale: Scale factor to apply to the billboard (0.01 gets it to roughly meter size) + :param text_color: Color name for the text + :param background_color: Color name for the background """ super(BillboardObject, self).__init__([]) self.text = text self.base_width = base_width self.size = size self.global_scale = global_scale + self.text_color = text_color + self.background_color = background_color def lower(self): return { @@ -324,7 +328,9 @@ def lower(self): u"base_width": self.base_width, u"size": self.size, u"global_scale": self.global_scale, - u"matrix": np.eye(4).flatten().tolist() + u"matrix": np.eye(4).flatten().tolist(), + u"text_color": self.text_color, + u"background_color": self.background_color, } } diff --git a/src/meshcat/viewer b/src/meshcat/viewer index 73923d0..85344ee 160000 --- a/src/meshcat/viewer +++ b/src/meshcat/viewer @@ -1 +1 @@ -Subproject commit 73923d0fe71480a394d4e4f4d0492b0cc421e91d +Subproject commit 85344ee95d64c090befa6f919dbe9543cbca2550 From 1d9a820478350a3d6afe49fbfd970483fbadcd19 Mon Sep 17 00:00:00 2001 From: Matthias Mayer Date: Thu, 27 Jul 2023 08:51:19 +0200 Subject: [PATCH 5/6] Bump version to tell pip to reinstall --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index fd3fedf..a65ae65 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup(name="meshcat", - version="0.3.2", + version="0.3.2a", description="WebGL-based visualizer for 3D geometries and scenes", url="https://github.com/rdeits/meshcat-python", download_url="https://github.com/rdeits/meshcat-python/archive/v0.3.2.tar.gz", From fb8120ccd336ef4d5de36afba0a271760111aea8 Mon Sep 17 00:00:00 2001 From: Matthias Mayer Date: Thu, 27 Jul 2023 13:12:47 +0200 Subject: [PATCH 6/6] update viewer submodule --- .gitmodules | 2 +- src/meshcat/viewer | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index a17a66b..e364f7d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "meshcat/viewer"] path = src/meshcat/viewer - url = https://github.com/rdeits/meshcat.git + url = https://github.com/kingjin94/meshcat.git diff --git a/src/meshcat/viewer b/src/meshcat/viewer index 85344ee..612b834 160000 --- a/src/meshcat/viewer +++ b/src/meshcat/viewer @@ -1 +1 @@ -Subproject commit 85344ee95d64c090befa6f919dbe9543cbca2550 +Subproject commit 612b834dfe3b928a6e5c3ed81cc06c67b88f9051