RE: A proposal for declaritive drawing (<replicate>) to be added into SVG

I agree with what you write.

I like your idea of "seamless" replication for purposes of zooming. Something like that as well as the possibility of virtual rendering offscreen so that a fill is constructed quickly without hitting the DOM is something that has crossed my mind.

The idea of nesting replicates to be able to work in 2D is something that I have been wrestling with and hope to have a sensible approach in mind by the time of SVG Open. I hadn't thought about 3D replications, though I like the suggestion. 

Two other thorny things I've been thinking about are
a) how to use <replicate> on an object to retrieve and modify/interpolate values of the attributes of its children (like animate tags, or elements within a group) or of its associated filters, patterns, or gradients. 
b) how to combine various aspects of animation with replication. Seamlessness may prove to be a useful concept in thinking that through.

Again one of the compelling things to me about the concept is that much of the programming work will already have been written by the implementers in their SMIL implementations: for example this morning I was contemplating writing a path interpolation routine myself in JavaScript that would interpolate between any two paths and yet quickly realized that this would be a non-trivial exercise, given all the subcommands of SVG <path> elements. Those who have implemented SMIL have already done all that of course, and hence could reuse those functions for <replicate>.

Cheers
David


-----Original Message-----
From: Jasper van de Gronde [mailto:th.v.d.gronde@hccnet.nl] 
Sent: Wednesday, April 07, 2010 4:50 AM
To: Dailey, David P.
Cc: www-svg
Subject: Re: A proposal for declaritive drawing (<replicate>) to be added into SVG

Dailey, David P. wrote:
> ...
> It would provide a way of making gradients (or rather gradient like 
> objects) that are not linear nor radial [2], of making patterns that are 
> non rectangular [2], and of making shapes that begin to approximate 
> 2.5-dimensions.
> ...
> Currently, it handles "from" and "to" for numeric values and rgb values, 
> for a wide range of attributes. "values" is handled (I think properly) 
> for numeric values only.

It looks very cool, but you might consider also allowing "seamless" 
replication, in the sense that the renderer itself can determine how 
many copies to show (or even to render it in a different way when 
possible). This would obviously make a lot of sense when zooming out (as 
you can then use less copies), but also when zooming in, as you could 
then let the renderer automatically increase the resolution as needed.

> Extensions to replicateTransform are obvious, as would be the 
> <replicateAttribute attributeName="d"> to overlay interpolated paths as 
> in a <contour> map.  Replicating along a path, likewise would give us 
> much of the same functionality as diffusion curves, I think, but not as 
> much I think, since triangular blends as seen in the tri-colored 
> teardrop are a bit kludgy as you will see. At the same time, however, 
> the use of replicate to offer tilings and other patterns will make it 
> considerably richer in scope.

Indeed, I think the proposal you're making is interesting on its own 
merits, and not just as a way to create fancy gradients. In fact, 
Inkscape has a special command (Edit/Clone/Create Tiled Clones) 
specifically for creating repeating patterns of a single object. You 
might want to have a look at it to get some inspiration.

What I currently miss in your proposal is any support for "2D" 
replication. You're comparing the functionality to animation, but there 
you have only one dimension (time), here you have two. In principle this 
need not be a big problem, as you can of course always flatten the 
structure, but if you want to create a matrix-like pattern (which is not 
uncommon, in tilings for example) it would be a terrible waste of space 
(as well as inconvenient).

Possibly you could simply give some sensible meaning to nested replicate 
commands? That way you could even allow for N "dimensions" (useful if 
you want to draw something like a 3D grid of cubes using orthographic 
projection).

BTW, if you're interested in diffusion curves, I'm currently working on 
a method to generate (approximate) solutions that I can encode in SVG (I 
hope to be able to implement diffusion curves in Inkscape and use this 
as a fall-back).

Received on Wednesday, 7 April 2010 12:18:17 UTC