-----Original Message----- From: inkscape-devel-bounces@lists.sourceforge.net [mailto:inkscape-devel-bounces@lists.sourceforge.net] On Behalf Of Afief Halumi Sent: zondag 23 maart 2008 18:40 To: inkscape-devel@lists.sourceforge.net Subject: [Inkscape-devel] GSoC Idea
Hello everyone,
I would like to submit this idea as my summer of code project and of course any feedback/piece of mind from the inkscape community is greatly appreciated.
The Live Path Effect Stack seemed to be *the* thing I always wanted to have in my graphic programs. I have used similar technologies(don't know if this is the right word) before in 3D Studio Max and in Blender, but the way LPES works from what I read is far from what I was hoping for.
The main functional fault of LPES is that it is a stack in my opinion. Consider this example from the LPE-bluprint wiki page: http://wiki.inkscape.org/wiki/index.php/Image:Lpe_need_rich_input.png
The Live Path Effect would need two objects, the cloud and the sun(let's forget for a minute that each of those is itself an object with an LPE applied,) but how can this be done in a stack environment? The obvious way would be to apply the LPE to one object and add a reference(pointer/id...) to the other object as a parameter. This way would most certainly work, but the second object would remain somewhere outside the object with the LPES applied to it, which will make working with a lot of LPES awkward.
How I would like to do it: Instead of using a stack I would like to have an LPE Tree. Each tree node can be either an effect or an object. This way each object can contain a whole hierarchy of editable effects(Similar to Blender and Maya's Node System, but more simple). This would essentially make on-canvas editing of any part of the object(the outline of the cloud, the spike or the circle of the sun) more intuitive as the object itself would contain all the information necessary to build them.
This is a (very) simple mockup for the interface as I imagine it(lots of elements taken from 3d studio max) http://img187.imageshack.us/img187/5057/mockuprv7.png
It is true that LPEs are non-commutative (is this the correct term); an LPE always has to be applied to something and cannot be a thing on its own. This makes bool-ops awkward, as one path would be the 'original' and the other the 'parameter'. We could make bool-ops where both parameters are equal, as parameters, on a dummy original path, but this also requires changes in all places that try to modify the object (i.e. node editing a dummy object should immediately go to the lpe parameters instead of the original path).
A group of french students is working right now (with already some great success!) on applying LPEs on groups of objects and, more important in this case, LPE stacking. The image of sun and cloud will then already be possible (we still have to make LPE boolops, but its easy since 2geom already has boolops, at least for non-self-intersecting paths). If the cloud must have an LPE applied, that indeed will not be possible with that stack. To alleviate the problem, like you mention it is possible to extend the lpe-PathParam that makes it possible to link to objects. They can then themselves have effects applied and can be part of the LPE definition, contained within it, so that's not a problem. But I do not know how to display the objects on-canvas when they are e.g. in the <defs> section...
The goal of LPEs was that it is simple, easy. I chose not to implement svg vector effects as it is more complicated. It is certainly more powerful, but a lot more complex for what I wanted, and LPE was already much more than a GSoC project. Making an LPE stack is easy, just chaining things, for UI it is also straightforward to think of one that is not too hard to program. Stacked LPE doesn't require recoding lots of things. (to the french students: I don't mean to devalue or dwarf your work!) I think if you want to make the tree thing, you should make svg vector effects. That is much more than a gsoc unfortunately, so you could choose to implement it without UI things.
Can you give an example of how the XML should look to do what you want?
-johan