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

asked 14 years ago

niles gravatar image

updated 13 years ago

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!

Preview: (hide)

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 ( 14 years ago )

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 ( 14 years ago )

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 ( 13 years ago )