W3C home > Mailing lists > Public > www-svg@w3.org > September 2011

Re: bounding box of inline SVG

From: Dr. Olaf Hoffmann <Dr.O.Hoffmann@gmx.de>
Date: Tue, 13 Sep 2011 11:34:23 +0200
To: www-svg@w3.org
Message-Id: <201109131134.24335.Dr.O.Hoffmann@gmx.de>
Rik Cabanier:
> 2011/9/12 Dr. Olaf Hoffmann <Dr.O.Hoffmann@gmx.de>
>
> > Hello,
> >
> > what is the idea, how this should work to calculate it automatically,
> > if neither the author of the SVG nor the embedding document gives
> > information
> > about the intended size of the graphics?
>
> If the graphics use absolute coordinates, you can calculate their bounding
> boxes.

Well from my authors point of view - almost all SVG documents have a viewBox
and most have no width and height, therefore there are only local units
used in my documents and the relation between the available viewport and
the viewBox determines the scaling.

As already mentioned, current viewers do not manage absolute units
like cm, mm properly and some do not manage em or ex either for width and
height, therefore no good idea to use them.
In the few cases of SVG used in XHTML, I think I used a div container styled
and sized with CSS to embed the SVG content. Either it is sized relative
to the available viewport or - what is typically suboptimal within an XHTML
environment - in px units - here one practically has to separate XHTML text
from inline graphics again to manage the coexistence in viewports of 
different sizes somehow. 


> Then by unionizing all the bboxes and account for the transformation
> matrices, you would come up with the bounding box of the svg element
> itself. If they use relative coordinates (like '%'), you would calculate
> the absolute coordinate which allows you to calculate the bbox.

At least for most of my content, the bounding box of all graphical elements
is not directly related to the viewBox. This has something to do with
aesthetics and intended impressions, and is therefore some kind of
subjective, not simple to calculate - therefore it is already a challenge
to write (PHP)-scripts, that generate SVG documents automatically
within an acceptable viewBox. Or vice versa to calculate an acceptable
viewBox automatically for some generated content. At least for many
documents in my art gallery there is no simple algorithm to calculate
such a viewBox properly and completely perfect. 
Therefore I don't think, that an automatically calculated viewBox from
a bounding box will be very useful for many more complex SVGs.
For serveral of my documents (presenting for example planetary
systems or troops of moving objects), such a behaviour would be
pretty contraproductive of even stupid - for them one would need
to calculate the maximum of the bounding box over an infinite
presentation time to get a somehow useful result, one still had to add 
some additional margin for stroke and stroke-linejoin, stroke-linecap etc
to get something meaningful. 

>
> > Many of my SVG documents have parts of graphical objects out of the
> > viewBox and for several of them it depends on the preserveAspectRatio,
> > what is the intention to display, if the aspect ratio of the viewport
> > does not fit to the
> > viewBox. Obviously, if the embedding document does not provide
> > information about size or at least aspect ratio of the viewport, I cannot
> > see how to calculate this automatically.
>
> With no 'width' or 'height', viewBox becomes meaningless.
> It would also need to be calculated on the fly. Not to change the aspect
> ratio but to change where the (0,0) point will be located.
>

No, currently if there is no width and height, it means 100%, what is
typically pretty useful for SVG documents with nothing embedding
them (typical use case for me) or if the embedding construction has
a defined size (that is my typical approach to embed it in 
XHTML or XML). If authors provide a size for the embedding 
construction, it should fit perfectly.

But ok there is still the problematic situation, if authors provide no
information in the embedding construction and no width and height
in the SVG. In such a situation it is not obvious, which size is 
useful for display. The algorithm to determine the size from CSS 
is not necessarily a useful answer, if no CSS is used at all.
Therefore the format of the embedding construction should define,
how to calculate the size in such a problematic case.
But of course, for the case this did not happen, for example for
arbitrary XML embedding some SVG content, SVG should define
this, for example: 'For no width and height use 100% of the available
width and determine the height according to the viewBox. Without
viewBox use the same height than width'.  This still causes problems,
if the viewer just does not know the XML-format and assumes it
to be arbitrary. For example for LML I defined some rules how to
determine the size, if an author gives no indication about this.  


> > On the other hand, for an author of the embedding document it is
> > typically simple to provide information about the available viewport, as
> > well as for a browser to know the viewport size, if the SVG is not
> > embedded at all. Or if size matters for the SVG, it should be simple for
> > the SVG document author to provide information about width and height
> > (apart from the practical problem, that typical browser do not manage to
> > display absolute sizes properly anyway).
>
> I believe that in the future, the author will typically create the HTML and
> the inline SVG.
> We shouldn't think about them as separate worlds. 

Concerning coordinates and how to arrange/position content these 
are quite different worlds. In XHTML the text is presented and arranged 
in an optimised way for the preferred font-size indicated by the user and
the available width of the viewport to get always good readability of text.
In SVG all elements are positioned as fixed graphics, but the
user can scale and zoom into the document to see more details, what
is typically suboptimal for larger amounts of text, where the XHTML
approach is much better.

I think, these models are so different, that there is no or no trivial
solution to have both in one document. If you start with XHTML, 
you will always need some kind of somehow sized box to put the 
graphics in and the text can flow around or before and after in a 
flexible way.
Starting with SVG, you need always a somehow positioned
box (for XHTML or textArea in tiny 1.2) to contain text with
automatic arrangements with less relevant importance of graphical
appearance - and you have to take into account problems with
suboptimal readability of such texts, dependent on magnification.

There should be some defined way to get some output, if
authors provide no information about sizes for SVG in XHTML,
but typically the SVG content will be more complex than single
rectangles, ellipses or circles, therefore one can recommend,
that authors should always provide information about the
intended viewBox (and if this matters, about the intended
size, with the limitation in mind, that viewers typically cannot
realise absolute sizes properly). Obviously, if there is a
need to display absolutely sized graphics, there is an
urgent need as well to improve the capabilities of viewers
to display absolute sized graphics properly (units cm and mm 
and to fix the related problem in CSS2.1, that currently helps
developers of viewers only to obfuscate the display of absolute units).



> (I think there was 
> consensus about this at the Seattle F2F.)
> If I move an inline SVG element, I don't want it to be clipped by the
> parent SVG header unless I specified a 'width'/'height'

You can do this right now.
You just have to provide a viewBox, that is large enough or
you can animate the viewBox as well to catch moving objects
all the time :o)


Olaf
Received on Tuesday, 13 September 2011 09:35:08 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:49 GMT