metafizzy / zdog

Flat, round, designer-friendly pseudo-3D engine for canvas & SVG

Home Page:https://zzz.dog

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

3D shape properties are not updated

ceruulean opened this issue · comments

Bug: If you set the 'backface' or 'length' properties of a Cylinder after render, it will not update. Same with Box object. I suspect the other derived shapes may have some issues (hemisphere's backface updates correctly, but changing diameter will not recalculate the backface area)

Test case: https://codepen.io/ceruulean/pen/xxEVeyY

I haven't delved into the source code, but I kind of got around this issue by setting the "backface" property of the .children[0].children[1] of the cylinder shape element.

The backface of the cylinder seems to be stored as a separate shape, as a grand-child of the cylinder shape itself.

Thanks for reporting this issue. Yeah, this is an issue — there's no straight-forward way to update interior shapes of composite shapes like Cylinder base. The closest thing is updatePath, but I'm not sure if that will work in this case.

Old issue, but times have changed and this would be an ideal case for using the reactivity functionality from Vue 3. Vue is certainly a bit of an overkill, but that functionality is really cool. It wraps objects in proxies thus allowing you to get notified if anything in the object changes (=making them reactive), even nested deep below if you wish. On notification of the change you could then simply update the scene.

I am not sure if there is any package available that only provides the reactivity part of vue, but if you are using Vue anyway, this should work.

Edit: In other words,this does have to be part of zdog, but could be solved with an external library providing reactivity.