Can I cache a rendered 3d graphic (for @interact)?

asked 2011-02-25 16:44:16 +0100

niles gravatar image

updated 2011-04-25 09:01:33 +0100

I'd like to make a simple interact for the notebook which shows a certain 3d object, and lets the user move a point around in the object and see data about that point. (For example, the object could be the domain of a certain function, and the data could have to do with values of the function in RR^2). The problem is that the 3d object takes a few seconds to render, and every time the point moves, the object has to be re-rendered. This makes the interact unusable.

So can I somehow tell Sage to just add one point to the object which it's already rendered? Note that I am pre-computing the 3d object and storing it in a variable, g. Then my interact function just takes coordinates as input and does

(g + point3d(x,y,z)).show()

But this is still too slow :(


UPDATE: The method described in the question about fast show for cached plots will probably solve this problem too!

edit retag flag offensive close merge delete

Comments

Does the 3d image itself need to change, or is it basically a fixed background? And is it jmol or matplolib or tachyon?

DSM gravatar imageDSM ( 2011-02-25 19:29:20 +0100 )edit

It could be a fixed background, although I had wanted people to be able to rotate and zoom it (I've been using jMol). But I could have one 3d graphic showing the object, and then for the interact maybe some kind of "wireframe" which would render faster.

niles gravatar imageniles ( 2011-02-26 08:23:19 +0100 )edit

Try: `your_3d_object.show(viewer='canvas3d')`. It uses the <canvas> HTML5 element, so it might load faster than Jmol or tachyon. However, you'll just get a simple wireframe, and it can be very slow if your 3d object is complex (i.e. highly-detailed mesh).

Kelvin Li gravatar imageKelvin Li ( 2011-04-25 16:23:50 +0100 )edit