mirror of
https://github.com/3dmol/3Dmol.js.git
synced 2026-06-04 08:39:49 +09:00
py3dmol improvements
Don't use the CDN minified URL (it is broken for surfaces). Inspired by Issue #645 add print_to_console function prefix.
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -33,23 +33,52 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"/home/dkoes/git/3Dmol.js/py3Dmol/build/lib\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"cd build/lib"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"application/3dmoljs_load.v0": "<div id=\"3dmolviewer_15219945140\" style=\"position: relative; width: 640px; height: 480px\">\n<script>\n\nvar loadScriptAsync = function(uri){\n return new Promise((resolve, reject) => {\n var tag = document.createElement('script');\n tag.src = uri;\n tag.async = true;\n tag.onload = () => {\n resolve();\n };\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n}\n\nvar viewer_15219945140 = null;\n$3Dmolpromise.then(function() {\nviewer_15219945140 = $3Dmol.createViewer($(\"#3dmolviewer_15219945140\"),{backgroundColor:\"white\"});\n\tviewer_15219945140.addModel(\"\\n RDKit 3D\\n\\n 6 6 0 0 0 0 0 0 0 0999 V2000\\n -0.9517 0.7811 -0.6622 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.2847 1.3329 -0.3121 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.2365 0.5518 0.3512 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.9517 -0.7811 0.6644 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.2847 -1.3329 0.3144 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.2365 -0.5518 -0.3489 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 2 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 1 1 0\\nM END\\n$$$$\",\"sdf\");\n\tviewer_15219945140.setStyle({\"stick\": {}});\n\tviewer_15219945140.zoomTo();\nviewer_15219945140.render();\n});\n</script><script>$(\"#left\").append($(\"#3dmolviewer_15219945140\")); </script>",
|
||||
"application/3dmoljs_load.v0": "<div id=\"3dmolviewer_1676050474639691\" style=\"position: relative; width: 640px; height: 480px\">\n <p id=\"3dmolwarning_1676050474639691\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n return new Promise((resolve, reject) => {\n //this is to ignore the existence of requirejs amd\n var savedexports, savedmodule;\n if (typeof exports !== 'undefined') savedexports = exports;\n else exports = {}\n if (typeof module !== 'undefined') savedmodule = module;\n else module = {}\n\n var tag = document.createElement('script');\n tag.src = uri;\n tag.async = true;\n tag.onload = () => {\n exports = savedexports;\n module = savedmodule;\n resolve();\n };\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.1/3Dmol-min.min.js');\n}\n\nvar viewer_1676050474639691 = null;\nvar warn = document.getElementById(\"3dmolwarning_1676050474639691\");\nif(warn) {\n warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_1676050474639691 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_1676050474639691\"),{backgroundColor:\"white\"});\nviewer_1676050474639691.zoomTo();\n\tviewer_1676050474639691.addModel([\"\\n RDKit 3D\\n\\n 6 6 0 0 0 0 0 0 0 0999 V2000\\n -0.9517 0.7811 -0.6622 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.2847 1.3329 -0.3121 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.2365 0.5518 0.3512 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.9517 -0.7811 0.6644 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.2847 -1.3329 0.3144 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.2365 -0.5518 -0.3489 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 2 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 1 1 0\\nM END\\n$$$$\", \"sdf\"],{});\n\tviewer_1676050474639691.setStyle([{\"stick\": {}}],{});\n\tviewer_1676050474639691.zoomTo([],{});\nviewer_1676050474639691.render();\n});\n</script><script>document.getElementById(\"left\").append(document.getElementById(\"3dmolviewer_1676050474639691\")); </script>",
|
||||
"text/html": [
|
||||
"<div id=\"3dmolviewer_15219945140\" style=\"position: relative; width: 640px; height: 480px\">\n",
|
||||
"<div id=\"3dmolviewer_1676050474639691\" style=\"position: relative; width: 640px; height: 480px\">\n",
|
||||
" <p id=\"3dmolwarning_1676050474639691\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n",
|
||||
" <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
|
||||
" </div>\n",
|
||||
"<script>\n",
|
||||
"\n",
|
||||
"var loadScriptAsync = function(uri){\n",
|
||||
" return new Promise((resolve, reject) => {\n",
|
||||
" //this is to ignore the existence of requirejs amd\n",
|
||||
" var savedexports, savedmodule;\n",
|
||||
" if (typeof exports !== 'undefined') savedexports = exports;\n",
|
||||
" else exports = {}\n",
|
||||
" if (typeof module !== 'undefined') savedmodule = module;\n",
|
||||
" else module = {}\n",
|
||||
"\n",
|
||||
" var tag = document.createElement('script');\n",
|
||||
" tag.src = uri;\n",
|
||||
" tag.async = true;\n",
|
||||
" tag.onload = () => {\n",
|
||||
" resolve();\n",
|
||||
" exports = savedexports;\n",
|
||||
" module = savedmodule;\n",
|
||||
" resolve();\n",
|
||||
" };\n",
|
||||
" var firstScriptTag = document.getElementsByTagName('script')[0];\n",
|
||||
" firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
|
||||
@@ -58,18 +87,23 @@
|
||||
"\n",
|
||||
"if(typeof $3Dmolpromise === 'undefined') {\n",
|
||||
"$3Dmolpromise = null;\n",
|
||||
" $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n",
|
||||
" $3Dmolpromise = loadScriptAsync('https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.1/3Dmol-min.min.js');\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"var viewer_15219945140 = null;\n",
|
||||
"var viewer_1676050474639691 = null;\n",
|
||||
"var warn = document.getElementById(\"3dmolwarning_1676050474639691\");\n",
|
||||
"if(warn) {\n",
|
||||
" warn.parentNode.removeChild(warn);\n",
|
||||
"}\n",
|
||||
"$3Dmolpromise.then(function() {\n",
|
||||
"viewer_15219945140 = $3Dmol.createViewer($(\"#3dmolviewer_15219945140\"),{backgroundColor:\"white\"});\n",
|
||||
"\tviewer_15219945140.addModel(\"\\n RDKit 3D\\n\\n 6 6 0 0 0 0 0 0 0 0999 V2000\\n -0.9517 0.7811 -0.6622 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.2847 1.3329 -0.3121 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.2365 0.5518 0.3512 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.9517 -0.7811 0.6644 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.2847 -1.3329 0.3144 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.2365 -0.5518 -0.3489 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 2 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 1 1 0\\nM END\\n$$$$\",\"sdf\");\n",
|
||||
"\tviewer_15219945140.setStyle({\"stick\": {}});\n",
|
||||
"\tviewer_15219945140.zoomTo();\n",
|
||||
"viewer_15219945140.render();\n",
|
||||
"viewer_1676050474639691 = $3Dmol.createViewer(document.getElementById(\"3dmolviewer_1676050474639691\"),{backgroundColor:\"white\"});\n",
|
||||
"viewer_1676050474639691.zoomTo();\n",
|
||||
"\tviewer_1676050474639691.addModel([\"\\n RDKit 3D\\n\\n 6 6 0 0 0 0 0 0 0 0999 V2000\\n -0.9517 0.7811 -0.6622 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.2847 1.3329 -0.3121 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.2365 0.5518 0.3512 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.9517 -0.7811 0.6644 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.2847 -1.3329 0.3144 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.2365 -0.5518 -0.3489 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 2 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 1 1 0\\nM END\\n$$$$\", \"sdf\"],{});\n",
|
||||
"\tviewer_1676050474639691.setStyle([{\"stick\": {}}],{});\n",
|
||||
"\tviewer_1676050474639691.zoomTo([],{});\n",
|
||||
"viewer_1676050474639691.render();\n",
|
||||
"});\n",
|
||||
"</script><script>$(\"#left\").append($(\"#3dmolviewer_15219945140\")); </script>"
|
||||
"</script><script>document.getElementById(\"left\").append(document.getElementById(\"3dmolviewer_1676050474639691\")); </script>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -106,10 +140,32 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
"source": [
|
||||
"import py3Dmol\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"u'/home/dkoes/git/3Dmol.js/py3Dmol'"
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"pwd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
@@ -121,21 +177,21 @@
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 2",
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python2"
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 2
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython2",
|
||||
"version": "2.7.14"
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.6"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -53,7 +53,7 @@ class view(object):
|
||||
the exception that the functions all return None.
|
||||
http://3dmol.org/doc/GLViewer.html
|
||||
'''
|
||||
def __init__(self,query='',width=640,height=480,viewergrid=None,data=None,style=None,linked=True,options=dict(),js='https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.1/3Dmol-min.min.js'):
|
||||
def __init__(self,query='',width=640,height=480,viewergrid=None,data=None,style=None,linked=True,options=dict(),js='https://cdnjs.cloudflare.com/ajax/libs/3Dmol/2.0.1/3Dmol-min.js'):
|
||||
'''Create a 3Dmol.js view.
|
||||
width -- width in pixels of container
|
||||
height -- height in pixels of container
|
||||
@@ -281,35 +281,47 @@ if(warn) {
|
||||
if name.startswith('_') or name == 'getdoc': #object to ipython canary functions
|
||||
raise AttributeError("%r object has no attribute %r" % (self.__class__, name))
|
||||
|
||||
print_result = False
|
||||
if name.startswith('print_to_console_'):
|
||||
print_result = True
|
||||
name = name[17:]
|
||||
|
||||
def makejs(*args,**kwargs):
|
||||
|
||||
def make_viewer_cmd(vname, name, *args, **kwargs):
|
||||
cmd = '\t'
|
||||
if print_result:
|
||||
cmd += 'console.log('
|
||||
cmd += f'{vname}.{name}('
|
||||
for arg in args:
|
||||
cmd += '%s,' % tostr(arg)
|
||||
cmd = cmd.rstrip(',')
|
||||
if print_result:
|
||||
cmd += ')'
|
||||
cmd += ');\n'
|
||||
|
||||
return cmd
|
||||
|
||||
if self.viewergrid:
|
||||
if kwargs and 'viewer' in kwargs:
|
||||
coords = kwargs['viewer']
|
||||
if len(coords) != 2 or coords[0] >= self.viewergrid[0] or coords[1] >= self.viewergrid[1] or coords[0] < 0 or coords[1] < 0:
|
||||
raise ValueError("Incorrectly formated viewer argument. Must specify row and column",self.viewergrid)
|
||||
cmd = '\tviewergrid_UNIQUEID[%d][%d].%s(' % (coords[0],coords[1],name);
|
||||
for arg in args:
|
||||
cmd += '%s,' % tostr(arg)
|
||||
cmd = cmd.rstrip(',')
|
||||
cmd += ');\n';
|
||||
cmd = make_viewer_cmd('viewergrid_UNIQUEID[%d][%d]'%(coords[0],coords[1]),name,*args,**kwargs)
|
||||
else: #apply to every viewer
|
||||
cmd = ''
|
||||
for r in range(self.viewergrid[0]):
|
||||
for c in range(self.viewergrid[1]):
|
||||
cmd += '\tviewergrid_UNIQUEID[%d][%d].%s(' % (r,c,name);
|
||||
for arg in args:
|
||||
cmd += '%s,' % tostr(arg)
|
||||
cmd = cmd.rstrip(',')
|
||||
cmd += ');\n';
|
||||
cmd += make_viewer_cmd('viewergrid_UNIQUEID[%d][%d]'%(r,c),name,*args,**kwargs)
|
||||
else:
|
||||
cmd = '\tviewer_UNIQUEID.%s(' % name;
|
||||
for arg in args:
|
||||
cmd += '%s,' % tostr(arg)
|
||||
cmd = cmd.rstrip(',')
|
||||
cmd += ');\n';
|
||||
cmd = make_viewer_cmd('viewer_UNIQUEID',name,*args,**kwargs)
|
||||
|
||||
self.startjs += cmd
|
||||
self.updatejs += cmd
|
||||
return self
|
||||
if print_result:
|
||||
self.update()
|
||||
return "Inspect the JavaScript console for your requested result."
|
||||
else:
|
||||
return self
|
||||
|
||||
return makejs
|
||||
|
||||
Reference in New Issue
Block a user