Re: ISSUE: current user space and <svg>

Jon,

Thanks for replying. It would be useful if a statement could be added to 
the spec to clearly define "current user" coordinate system. I presume 
such clarification would/should be added to the errata? However, the 
concept of coordinate systems is fairly well understood, and I don't 
think this is the most important issue.

The spec frequently refers to the user coordinate system (singular) of 
an *element*. In the case where all of an element's attributes represent 
values in the same coordinate system, it is clear what the user 
coordinate system of *that element* is; but in the case of the 'svg', 
'symbol', 'marker', 'pattern' and 'view' elements, four of the element's 
attributes represent values in one coordinate system, and any others 
represent values in another. In this case, as you note, there are *two* 
"current user coordinate systems" for the element.

The real issue as I see it is that refering to the coordinate system 
(singular) of an *element* (either explicitly or implicitly) leads to 
ambiguity in the spec when used in the context of elements that may have 
a viewBox attribute.

I haven't had time to examine the spec to try to find all the places 
where such ambiguity arises as a result of this issue, but one such 
place is the sentence that describes the behaviour of the getCTM method 
of the SVGLocatable interface:

getCTM
"Returns the transformation matrix from current user units (i.e., after 
application of the transform attribute, if any) to the viewport 
coordinate system for the nearestViewportElement."

In the context of an 'svg' element say, this is ambiguous. The 
clarification that "user space" means the coordinate system established 
by the transform attribute is fairly redundant (although probably useful 
to leave for clarification) since elements that can have a transform 
attribute will only have one user coordinate system. What is really 
necessary, but omitted, is clarification on which user coordinate system 
is meant if a viewBox attribute is present. For our 'svg' element the 
spec leaves scope to argue that it's either the user coordinate system 
that exists before the viewBox attribute is applied (to which the x, y, 
width and hight attributes refer to), or to the user space that is 
established by the viewBox attribute (and to which any other attributes 
refer to).

I would very much like to see some discussion on what would be most 
useful, followed by a decision and clarification by the WG on what is 
meant in the case where a viewBox attribute is present. This ambiguity 
also exists for the other three methods of the interface of course. It 
would seem desirable that all the methods refer to the same user space 
when a viewBox attribute is present.

-Jonathan


Jon Ferraiolo wrote:
> Jonathan,
> The key thing is that there are often two "current user coordinate 
> systems" for a given element - the one before you process 'transform' or 
> 'viewBox' and the one after you process the transformations associated 
> with these attributes.
> 
> Section 7.4 of the SVG 1.1 spec 
> (http://www.w3.org/TR/SVG11/coords.html#EstablishingANewUserSpace) 
> includes the following snippet in the first paragraph:
> 
> ----------------------
> The transform <file://coords.html#TransformAttribute> and viewBox 
> <file://coords.html#ViewBoxAttribute> attributes transform user space 
> coordinates and lengths on sibling attributes on the given element (see 
> effect of the transform attribute on sibling attributes 
> <file://coords.html#TransformAttributeEffectOnSiblingAttributes> and 
> effect of the viewBox attribute on sibling attributes 
> <file://coords.html#ViewBoxAttributeEffectOnSiblingAttributes>) and all 
> of its descendants.
> ----------------------
> 
> and further on in the same section (if you follow the link to "effect of 
> the transform attribute on sibling attributes):
> ----------------------
> The transform attribute is applied to an element before processing any 
> other coordinate or length values supplied for that element. In the element
> 
> <rect x="10" y="10" width="20"
> height="20" transform="scale(2)"/>
> 
> the x, y, width and height values are processed after the current 
> coordinate system has been scaled uniformly by a factor of 2 by the 
> transform attribute
> ----------------------
> 
> However, I agree that it makes sense to add some additional 
> clarifications to the SVG spec.
> 
> Jon
> 
> At 09:19 AM 1/10/2005, Jonathan Watt wrote:
> 
>> SVG WG,
>>
>> What is the "current user coordinate system" for an element defined as 
>> (with emphesis on *current*, *user* and *element*)? Is it correct to 
>> say that it's the coordinate system refered to by the element's 
>> "coordinate" attributes (such as 'x' and 'y')?
>>
>> I'm specifically interested to know what the *current* user coordinate 
>> system is for an 'svg' element. Is it the user coordinate system that 
>> the element exists in (the one established by the 'svg' element's 
>> parent, and to which it's "coordinate" attributes refer to)? Or is it 
>> the user space it itself establishes via it's viewBox attribute?
>>
>> I don't believe this can be clearly answered from the contents of the 
>> specs.
>>
>> -Jonathan

Received on Tuesday, 11 January 2005 16:11:03 UTC