Skip to content

Instantly share code, notes, and snippets.

@dominiquesydow
Created March 4, 2021 17:22
Show Gist options
  • Save dominiquesydow/0cc044a9936836bd3ceb096697307870 to your computer and use it in GitHub Desktop.
Save dominiquesydow/0cc044a9936836bd3ceb096697307870 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## How to add labels to buffers in `nglview`?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using this environment:\n",
"https://gist.github.com/dominiquesydow/2097bc85e9963ea6cf6a6f01858b9f03"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7a624bc0c34a4683bae49f2bfc09a6ba",
"version_major": 2,
"version_minor": 0
},
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import nglview as nv"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"clouds = {\n",
" \"cloudA\": {\"coordinates\": [[1.0, 1.0, 1.0], [1.1, 1.1, 2.0], [1.0, 2.0, 1.0]], \"color\": [0.0, 0.0, 1.0], \"radius\": 0.4},\n",
" \"cloudB\": {\"coordinates\": [[-1, -1, -1], [0, 0, 0], [-1, 0, 0]], \"color\": [0.0, 1.0, 1.0], \"radius\": 0.2}\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'position': [1.0, 1.0, 1.0, 1.1, 1.1, 2.0, 1.0, 2.0, 1.0],\n",
" 'color': [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0],\n",
" 'radius': [0.4, 0.4, 0.4]},\n",
" {'position': [-1, -1, -1, 0, 0, 0, -1, 0, 0],\n",
" 'color': [0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0],\n",
" 'radius': [0.2, 0.2, 0.2]}]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sphere_buffers = []\n",
"for name, cloud in clouds.items():\n",
" sphere_buffer = {\"position\": [], \"color\": [], \"radius\": []}\n",
" for point in cloud[\"coordinates\"]:\n",
" sphere_buffer[\"position\"] += point\n",
" sphere_buffer[\"color\"] += cloud[\"color\"]\n",
" sphere_buffer[\"radius\"] += [cloud[\"radius\"]]\n",
" sphere_buffers.append(sphere_buffer)\n",
"sphere_buffers"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "550c5e1dfd6446f4a44be7533e4e1e48",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"ThemeManager()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "44bb68bbc8974d07827a375cde32e1d1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NGLWidget(gui_style='ngl')"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"view = nv.NGLWidget()\n",
"for sphere_buffer in sphere_buffers:\n",
" view.shape.add_buffer(\"sphere\", **sphere_buffer)\n",
"view.display(gui=True, style=\"ngl\")"
]
},
{
"attachments": {
"86f76588-8457-42a4-ad81-edd093e52623.png": {
"image/png": "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BAgQIECAAAECBAgQIFBRAhe/+W7y51s4G61r1sXfOsZygEltTE0BXcuaGbb+Tn6l9HhZ4PSb98Xarofihd/9esQt7L1fvBe7z8+OPQef/3Hb+s0ieJMccNJ4+61FRYWFRVncJECAAAECBAgQIECAAAEC1y+QSVh4/cP0BoFMBQopTFv7x0Nxfmi14ghXVX3c/VTL8EErIzzi9sQEhIUT8/M2AQIECBAgQIAAAQIECBAYVUBYOCqRBwgQyInASGGhA05yUiDDIECAAAECBAgQIECAAAECBAgQIJC1gLAw6wronwABAgQIECBAgAABAgQIECBAgEBOBISFOSmEYRAgQIAAAQIECBAgQIAAAQIECBDIWkBYmHUF9E+AAAECBAgQIECAAAECBAgQIEAgJwLCwpwUwjAIECBAgAABAgQIECBAgAABAgQIZC0gLMy6AvonQIAAAQIECBAgQIAAAQIECBAgkBMBYWFOCmEYBAgQIECAAAECBAgQIECAAAECBLIWEBZmXQH9EyBAgAABAgQIECBAgAABAgQIEMiJgLAwJ4UwDAIECBAgQIAAAQIECBAgQIAAAQJZCwgLs66A/gkQIECAAAECBAgQIECAAAECBAjkREBYmJNCGAYBAgQIECBAgAABAgQIECBAgACBrAWEhVlXQP8ECBAgQIAAAQIECBAgQIAAAQIEciIgLMxJIQyDAAECBAgQIECAAAECBAgQIECAQNYCwsKsK6B/AgQIECBAgAABAgQIECBAgAABAjkREBbmpBCGQYAAAQIECBAgQIAAAQIECBAgQCBrAWFh1hXQPwECBAgQIECAAAECBAgQIECAAIGcCAgLc1IIwyBAgAABAgQIECBAgAABAgQIECCQtYCwMOsK6J8AAQIECBAgQIAAAQIECBAgQIBATgSEhTkphGEQIECAAAECBAgQIECAAAECBAgQyFpAWJh1BfRPgAABAgQIECBAgAABAgQIECBAICcCwsKcFMIwCBAgQIAAAQIECBAgQIAAAQIECGQtICzMugL6J0CAAAECBAgQIECAAAECBAgQIJATAWFhTgphGAQIECBAgAABAgQIECBAgAABAgSyFhAWZl0B/RMgQIAAAQIECBAgQIAAAQIECBDIiYCwMCeFMAwCBAgQIECAAAECBAgQIECAAAECWQsIC7OugP4JECBAgAABAgQIECBAgAABAgQI5ERAWJiTQhgGAQIECBAgQIAAAQIECBAgQIAAgawFhIVZV0D/BAgQIECAAAECBAgQIECAAAECBHIiICzMSSEMgwABAgQIECBAgAABAgQIECBAgEDWAsLCrCugfwIECBAgQIAAAQIECBAgQIAAAQI5ERAW5qQQhkGAAAECBAgQIECAAAECBAgQIEAgawFhYdYV0D8BAgQIECBAgAABAgQIECBAgACBnAgIC3NSCMMgQIAAAQIECBAgQIAAAQIECBAgkLWAsDDrCuifAAECBAgQIECAAAECBAgQIECAQE4EhIU5KYRhECBAgAABAgQIECBAgAABAgQIEMhaQFiYdQX0T4AAAQIECBAgQIAAAQIECBAgQCAnAsLCnBTCMAgQIECAAAECBAgQIECAAAECBAhkLSAszLoC+idAgAABAgQIECBAgAABAgQIECCQEwFhYU4KYRgECBAgQIAAAQIECBAgQIAAAQIEshYQFmZdAf0TIECAAAECBAgQIECAAAECBAgQyImAsDAnhTAMAgQIECBAgAABAgQIECBAgAABAlkLCAuzroD+CRAgQIAAAQIECBAgQIAAAQIECOREQFiYk0IYBgECBAgQIECAAAECBAgQIECAAIGsBYSFWVdA/wQIECBAgAABAgQIECBAgAABAgRyIiAszEkhDIMAAQIECBAgQIAAAQIECBAgQIBA1gLCwqwroH8CBAgQIECAAAECBAgQIECAAAECOREQFuakEIZBgAABAgQIECBAgAABAgQIECBAIGsBYWHWFdA/AQIECBAgQIAAAQIECBAgQIAAgZwI/Gq0cVz85rvRHvE5AQIECBAgQIAAAQIECBAgQIAAAQJlIGBlYRkU0RQIECBAgAABAgQIECBAgAABAgQIlEJAWFgKRW0QIECAAAECBAgQIECAAAECBAgQKAMBYWEZFNEUCBAgQIAAAQIECBAgQIAAAQIECJRCQFhYCkVtECBAgAABAgQIECBAgAABAgQIECgDAWFhGRTRFAgQIECAAAECBAgQIECAAAECBAiUQkBYWApFbRAgQIAAAQIECBAgQIAAAQIECBAoAwFhYRkU0RQIECBAgAABAgQIECBAgAABAgQIlEJAWFgKRW0QIECAAAECBAgQIECAAAECBAgQKAMBYWEZFNEUCBAgQIAAAQIECBAgQIAAAQIECJRCQFhYCkVtECBAgAABAgQIECBAgAABAgQIECgDAWFhGRTRFAgQIECAAAECBAgQIECAAAECBAiUQkBYWApFbRAgQIAAAQIECBAgQIAAAQIECBAoAwFhYRkU0RQIECBAgAABAgQIECBAgAABAgQIlEJAWFgKRW0QIECAAAECBAgQIECAAAECBAgQKAMBYWEZFNEUCBAgQIAAAQIECBAgQIAAAQIECJRCQFhYCkVtECBAgAABAgQIECBAgAABAgQIECgDAWFhGRTRFAgQIECAAAECBAgQIECAAAECBAiUQkBYWApFbRAgQIAAAQIECBAgQIAAAQIECBAoAwFhYRkU0RQIECBAgAABAgQIECBAgAABAgQIlEJAWFgKRW0QIECAAAECBAgQIECAQMUI9P3rX7Fs6eMVM18TJUCgsgSEhZVVb7MlQIAAAQIECBAgQIAAgQkIDAaFa1aviG3bd0+gFa8SIEAgvwLCwvzWxsgIECBAgAABAgQIECBAIEcCVweFg4GhiwABAuUoICwsx6qaEwECBAgQIECAAAECBAiUVODnQaGVhSXl1RgBAjkSEBbmqBiGQoAAAQIECBAgQIAAAQL5EygWFFpZmL86GREBAqUREBaWxlErBAgQIECAAAECBAgQIFCGAiMFha37PinD2ZoSAQIEIoSFfgoIECBAgAABAgQIECBAgMAIAj8cZnL1/wWFI2C5TYBAWQjc8n26rjWTi998d62PfUaAAAECBAgQIECAAAECBAgQIECAwE0m0Hj7rUVHbGVhURY3CRAgQIAAAQIECBAgQIAAAQIECFSegLCw8mpuxgQIECBAgAABAgQIECBAgAABAgSKCggLi7K4SYAAAQIECBAgQIAAAQIECBAgQKDyBISFlVdzMyZAgAABAgQIECBAgAABAgQIECBQVGDUA06KvuUmAQIECBAgQIAAAQIECBAgQIAAAQJlJ2BlYdmV1IQIECBAgAABAgQIECBAgAABAgQIjE9AWDg+N28RIECAAAECBAgQIECAAAECBAgQKDsBYWHZldSECBAgQIAAAQIECBAgQIAAAQIECIxP4P8BzdWFUX6kPLMAAAAASUVORK5CYII="
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"![image.png](attachment:86f76588-8457-42a4-ad81-edd093e52623.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How can I rename \"shape\" in the left-side NGL Viewer menu to \"cloudA\" and \"cloudB\"?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@dominiquesydow
Copy link
Author

Solution (thanks to @hainm's comment):

view = nv.NGLWidget()
for sphere_buffer, name in zip(sphere_buffers, ["blue spheres", "cyan spheres"]):
    print(name)
    js = (
    f"""
    var params = {sphere_buffer};
    var shape = new NGL.Shape('{name}');
    var buffer = new NGL.SphereBuffer(params);
    shape.addBuffer(buffer);
    var shapeComp = this.stage.addComponentFromObject(shape);
    shapeComp.addRepresentation("buffer");
    """
    )
    view._js(js)
view.display(gui=True, style="ngl")

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment