Jonathan wrote:
> Jason,
>   I think this is a great idea.  As I use Sage a bit in my teaching,
> it would be nice to have a primitive with separate items for axes,
> axes' labels, axes scale (the numbers on the axes).  Then buttons
> could be added to turn these on and off at the user request.  If some
> things can be passed to Jmol as functions, they will render well at
> any zoom level.  It would also be easier to use the slab function for
> slicing 3-D objects.
>   That said there are some serious problems with how the notebook/
> plot3D uses Jmol presently, that have little to do with whether a
> primitive exists or not. I'm willing to help fix them, but need to
> understand where in the code the html and javascript for Jmol is
> generated.  The way it is presently done the following things are a
> problem:
> 
> 1) It does not work in Firefox on Macs.  Since I never have trouble
> with this, I'm assuming something abnormal is being done with the
> javascript that controls Jmol.  Again, I bet I can help with this, but
> I could not easily find where the code was generated.  All I can do is
> look at a web page.
> 2) Since people are running into memory problems, I suggest that only
> a limited number of live Jmols (present default JavaVM configurations
> support about 8 - 10 per page) be allowed in any given notebook.  I
> provided some example code that does not require any server
> intervention that does this.  I could help fold this in, if I could
> figure out how you are generating the javascript to control Jmol.
> 3) Since there is room next to Jmol in the notebook, I suggest that
> simple instructions on what Jmol can do and how to access the pop-up
> be added and maybe a link to more extensive documentation (the Jmol
> Site?).  I'm an expert with Jmol and found it difficult to do anything
> but rotate the image without significant experimentation.
> 4) It also might be worth loading only a static image first with a
> link to make live.  This saves a lot of bandwidth and will decrease
> the time users have to wait to see their plots.
> 5) It would probably be a good idea to upgrade Jmol to the latest
> stable release 11.8.  I will try slipping that into a copy of 4.2 I
> just downloaded.
> 
> These are just some thoughts.  The key thing is I think I could help,
> but do not have time to wade through the code to figure out how
> everything is connected.  Can someone just tell me were to look?


Here's what I found by poking around for a bit.  Everything has changed 
since the new notebook, so someone that knows, *please* correct me if 
I'm wrong.

In Sage 4.2, it looks like the jmol-invoking javascript code is in:

local/lib/python2.6/site-packages/sagenb/data/sage/js/jmol_lib.js

That appears to be the code that actually sets up a jmol applet and 
makes the "Get Image" link.

That file is loaded in 
local/lib/python2.6/site-packages/sagenb/data/sage/js/notebook_lib.js

Jmol is initialized at the bottom of the template file:

local/lib/python2.6/site-packages/sagenb/data/sage/html/notebook/head.tmpl


The actual jmol application is in:

local/lib/python2.6/site-packages/sagenb/data/jmol

The jmol code gets invoked when a ".jmol" file is created by a 3d plot. 
  The notebook then comes by, sees the .jmol file, and creates the jmol 
applet.  The code that does this is in 
local/lib/python2.6/site-packages/sagenb/notebook/cell.py (search for 
jmol).

The code in Sage that generates the .jmol files is (I believe) in 
devel/sage/sage/plot/plot3d/base.pyx (see the show method, starting with 
the following code.  EMBEDDED_MODE is True when you are inside the 
notebook, and False if you are not executing inside the notebook.)

         if DOCTEST_MODE or viewer=='jmol':
             # Temporary hack: encode the desired applet size in the end 
of the filename:
             # (This will be removed once we have dynamic resizing of 
applets in the browser.)
             base, ext = os.path.splitext(filename)
             fg = figsize[0]
             #if fg >= 2:
             #    fg = 2
             filename = '%s-size%s%s'%(base, fg*100, ext)
             ext = "jmol"
             archive_name = "%s.%s.zip" % (filename, ext)
             if EMBEDDED_MODE:
                 # jmol doesn't seem to correctly parse the ?params part 
of a URL
                 archive_name = "%s-%s.%s.zip" % (filename, randint(0, 1 
<< 30), ext)

             T = self._prepare_for_jmol(frame, axes, frame_aspect_ratio, 
aspect_ratio, zoom)
             T.export_jmol(archive_name, force_reload=EMBEDDED_MODE, 
zoom=zoom*100, **kwds)
             viewer_app = "sage-native-execute " + 
os.path.join(sage.misc.misc.SAGE_LOCAL, "bin/jmol")

             # We need a script to load the file
             f = open(filename + '.jmol', 'w')
             f.write('set defaultdirectory "%s"\n' % archive_name)
             f.write('script SCRIPT\n')
             f.close()


I hope this helps.

Thanks,

Jason


-- 
Jason Grout


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to