--- In svg-developers@yahoogroups.com, "markelliott2000"
<[EMAIL PROTECTED]> wrote:
>
> Hi all,
> 
> I have a problem changing the SVG viewbox dynamically (using
> ecmascript), basically when I change the viewbox aspect ratio any
> symbols within the picture which have there own viewbox don't zoom
> correctly, instead they shift and lose scale.
> 
> To overcome this problem, I am currently using the viewbox to
> translate x and y and then currentScale = min(xScale, yScale).  This
> however is flawed and several pictures don't work well.  Ideally I
> would use preserveAspectRatio="yMidxMid meet" and complete the scaling
> by setting the width and height in the outer viewbox.
> 
> Has anyone got any ideas how I can either get allow the zoom to occur
> using master viewbox, or a way I can zoom for both x, and y.
> 
> Cheers
>


The code is as follows;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/SVG/DTD/svg10.dtd";>
<svg xmlns="http://www.w3.org/2000/svg";
xmlns:xlink="http://www.w3.org/1999/xlink";
xmlns:m="http://test.co.uk/m"; preserveAspectRatio="none" viewBox="0 0
491505 327670" onload="zoomin(33887, 16346, 400806, 235366)">
  <defs>
    <symbol id="sym531" preserveAspectRatio="none" viewBox="-19660.0
4232.1 32767 21162">
      <g id="s1" fill="none">
        <rect x="-9829.0" y="12697.7" width="9830.0" height="8464.3"
fill="#0000FF" stroke="#0000FF" stroke-dasharray="284.3 "
stroke-width="142.1" />
        <line x1="-8519.0" y1="14179.9" x2="-5897.0" y2="19892.9"
stroke="#FFFFFF" stroke-linecap="square" stroke-width="426.4" />
        <line x1="-5897.0" y1="19681.1" x2="-4587.0" y2="15660.1"
stroke="#FFFFFF" stroke-linecap="square" stroke-width="426.4" />
        <line x1="-4587.0" y1="15872.0" x2="-3276.0" y2="19892.9"
stroke="#FFFFFF" stroke-linecap="square" stroke-width="426.4" />
        <line x1="-1310.0" y1="13754.9" x2="-3276.0" y2="19892.9"
stroke="#FFFFFF" stroke-linecap="square" stroke-width="426.4" />
      </g>
    </symbol>
  </defs>
  <g id="s50" fill="none">
    <line x1="285075.0" y1="229370.0" x2="358800.0" y2="229370.0"
stroke="#00FF00" stroke-linecap="square" stroke-width="426.4" />
    <line x1="285075.0" y1="262140.0" x2="358800.0" y2="262140.0"
stroke="#00FF00" stroke-linecap="square" stroke-width="426.4" />
    <use xlink:href="#sym531" transform="translate(344055.0, 262140.0)
scale(1, 1.50) scale(1, 0.65) scale(0.33, 0.25)" x="-294900.0"
y="-262140.64516586336" />
    <line x1="294900.0" y1="219540.0" x2="294900.0" y2="271970.0"
stroke="#00FF00" stroke-linecap="square" stroke-width="426.4" />
    <line x1="344055.0" y1="219540.0" x2="344055.0" y2="268690.0"
stroke="#00FF00" stroke-linecap="square" stroke-width="426.4" />
    <use xlink:href="#sym531" transform="translate(260490.0, 209710.0)
scale(1, 1.50) scale(1, 0.65) scale(0.10, 0.10)" x="-294900.0"
y="-262140.64516586336" />
    <line x1="245745.0" y1="98300.0" x2="245745.0" y2="258860.0"
stroke="#00FF00" stroke-linecap="square" stroke-width="426.4" />
    <line x1="98295.0" y1="196600.0" x2="393210.0" y2="196600.0"
stroke="#00FF00" stroke-linecap="square" stroke-width="426.4" />
    <rect x="231000.0" y="183490.0" width="29490.0" height="26220.0"
stroke="#00FF00" stroke-width="426.4" />
  </g>
  <m:script xmlns:m="http://www.w3.org/2000/svg";
type="text/ecmascript" xlink:href="include.js" />
</svg>

include.js
----------

function zoomin(x, y, width, height)
{
    var vb = document.documentElement.getAttribute("viewBox");
    var vp_w = 0;
    var vp_h = 0;

    if(vb)
    {
        var vba = vb.split(" "); //comes out with four string array
        vp_w = Number(vba[2]);
        vp_h = Number(vba[3]);
    }

    var y2 = vp_h - (y + height);

    var xoff = vp_w * (x / vp_w);
    var yoff = vp_h * (y2 / vp_h);
    var scale = Math.min((vp_w/width),(vp_h/height));

    document.documentElement.currentScale = scale;

    document.documentElement.setAttributeNS(null,"viewBox",x+" "+y+"
"+vp_w+" "+vp_h);
}


------------------------------------

-----
To unsubscribe send a message to: [EMAIL PROTECTED]
-or-
visit http://groups.yahoo.com/group/svg-developers and click "edit my 
membership"
----Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/svg-developers/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/svg-developers/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/

Reply via email to