Can I cache a rendered 3d graphic (for @interact)?
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!
Does the 3d image itself need to change, or is it basically a fixed background? And is it jmol or matplolib or tachyon?
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.
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).