| <?xml version="1.0" encoding="UTF-8"?> |
| <!--======================================================================--> |
| <!--= Copyright 2004 World Wide Web Consortium, (Massachusetts =--> |
| <!--= Institute of Technology, Institut National de Recherche en =--> |
| <!--= Informatique et en Automatique, Keio University). All Rights =--> |
| <!--= Reserved. See http://www.w3.org/Consortium/Legal/. =--> |
| <!--======================================================================--><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="tiny" id="svg-root" width="100%" height="100%" viewBox="0 0 480 360"> |
| <SVGTestCase xmlns:testcase="http://www.w3.org/2000/02/svg/testsuite/description/" xmlns="http://www.w3.org/2000/02/svg/testsuite/description/" reviewer="CN" owner="VH" desc="Test on the animateTransform additive behavior" status="accepted" version="$Revision: 1.7 $" testname="$RCSfile: animate-elem-82-t.svg,v $"> |
| <OperatorScript> |
| <Paragraph> |
| This test demonstrates validates the operation of |
| animateTransform with regards to the rotation center |
| and with regards to paced animation. |
| </Paragraph> |
| <Paragraph> |
| The following descriptions describe the various animations, |
| going top bottom, left to right. For each animation, orange |
| rectangle markers show the expected position for the animated rectangle |
| halfway through the animation. The markers are drawn with a thick |
| stroke for 0.2s, starting at the time when they reflect the |
| expected position. |
| </Paragraph> |
| <Paragraph> |
| The first animateTransform has type='rotate' and goes from |
| 45 degrees to 90 degrees over a period of 3s. The rotation |
| center for the from and to values is 0, 0. At 0 seconds, the |
| expected transform should be rotate(45). At 1.5 seconds, the |
| expected transform is rotate(0.5 * (90 + 45)) = rotate(67.5). |
| At 3s, the expected transform is rotate(90). |
| </Paragraph> |
| |
| <Paragraph> |
| The second animateTransform has type='rotate' but has a |
| rotation center that varies between the from and to values. |
| The rotation goes from rotate(45,0,0) to rotate(90,-15,-15). |
| At 0s, the expected transform is rotate(45,0,0). |
| At 1.5s, the expected transform is rotate(67.5, -7.5, -7.5). |
| At 3s, the expected transform is rotate(90, -15, -15). |
| </Paragraph> |
| |
| <Paragraph> |
| The third animateTransform has type='translate' and calcMode='paced'. |
| The animation goes from translate(-40,40) to translate(-20,20) to |
| translate(40,-40). |
| At 0s, the expected transform is translate(-40,40). |
| At 1.5s, the expected transform is translate(0,0). |
| At 3s, the expected transform is translate(40,-40). |
| </Paragraph> |
| |
| <Paragraph> |
| The fourth animateTransform has type='translate' and calcMode='linear'. |
| The animation goes from translate(-40,40) to translate(-20,-20) to |
| translate(40,-40). |
| At 0s, the expected transform is translate(-40,40). |
| At 1.5s, the expected transform is translate(-20,-20). |
| At 3s, the expected transform is translate(40,-40). |
| </Paragraph> |
| |
| <Paragraph> |
| The fifth animateTransform has type='scale' and calcMode='paced'. |
| The animation goes from scale(1,2) to scale(3,2) to |
| scale(1,1). The total length along the sx component is 2 + 2 = 4. |
| The total length along the sy component is 0 + 1 = 1. |
| At 0s, the expected transform is scale(1,2). |
| At 1.5s, the expected transform is scale(3,1.5) so that a length of |
| 2 has been run on the sx component and a length of 0.5 has been |
| run on the sy component. |
| At 3s, the expected transform is scale(3,2). |
| </Paragraph> |
| |
| <Paragraph> |
| The sixth animateTransform has type='scale' and calcMode='linear'. |
| The animation goes from scale(1,2) to scale(3,2) to |
| scale(1,1). |
| At 0s, the expected transform is scale(1,2). |
| At 1.5s, the expected transform is scale(3,2). |
| At 3s, the expected transform is scale(1,1). |
| </Paragraph> |
| |
| <Paragraph> |
| The seventh animateTransform has type="rotate" and calcMode='paced'. |
| The animation goes from rotate(0,0,0) to rotate(45,-15,-20) to |
| rotate(180,30,50). The total length along the rotation angle component |
| is (45 - 0) + (180 - 45) = 180. The total length along the rotation |
| center along the x axis is (0 - (-15)) + (30 - (-15)) = 45 + 15 = 60. |
| The total length along the rotation center along the y axis is |
| (0 - (-20)) + (50 - (-20)) = 20 + 70 = 90. |
| At 0s, the expected transform is rotate(45,-15,-20). |
| At 1.5s, the expected transform is rotate(90,0,5) to achieve constant |
| velocity along the rotation angle component, the x-axis rotation center |
| component and the y-axis rotation center component. At 1.5s, half the |
| distance has been run on each component. For the rotation angle, this |
| means that 45 has been reached and that 45 more degrees in the (45 <= r < 180) |
| interval have been consumed. For the x-axis rotation center, this means |
| that 30 units have been run: the (0 >= x > -15) interval has been fully consumed |
| (15 units long) and 15 units on the (-15 <= x < 30) interval have been consumed, |
| which explains the computed 0 value. For the y-axis rotation center, this |
| means that 45 units have been run: the (0 >= y > -20) interval has been fully |
| consumed and 25 units have been consumed in the (-20 <= y < 50) interval, which |
| explains the computed 5 value. |
| At 3s, the expected transform is rotate(180,30,50). |
| </Paragraph> |
| </OperatorScript> |
| </SVGTestCase> |
| <title id="test-title">$RCSfile: animate-elem-82-t.svg,v $</title> |
| |
| <!--======================================================================--> |
| <!--Content of Test Case follows... =====================--> |
| <!--======================================================================--> |
| <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.7 $</text> |
| <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/> |
| |
| <text text-anchor="middle" x="240" y="25" font-size="16"><animateTransform></text> |
| |
| <defs> |
| <g id="ref" stroke="rgb(192,192,192)" fill="none"> |
| <circle stroke-width="2" r="40"/> |
| <line x1="-45" x2="45"/> |
| <line y1="-45" y2="45"/> |
| </g> |
| </defs> |
| |
| <g transform="translate(0,0)"> |
| |
| <g transform="translate(60,90)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="gray" stroke-width="4" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="rotate" from="45" to="90" dur="3s" additive="replace" fill="freeze"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(45)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(67.5)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(90)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="60" text-anchor="middle">same rotation</text> |
| <text y="75" text-anchor="middle">center</text> |
| </g> |
| |
| <g transform="translate(180,90)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="gray" stroke-width="4" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="rotate" from="45,0,0" to="90,-15,-15" dur="3s" additive="replace" fill="freeze"/> |
| </rect> |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(45,0,0)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(67.5,-7.5,-7.5)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(90,-15,-15)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="60" text-anchor="middle">different rotation</text> |
| <text y="75" text-anchor="middle">centers</text> |
| </g> |
| |
| <g transform="translate(300,90)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="gray" stroke-width="4" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="translate" values="-40,40;-20,20;40,-40" dur="3s" calcMode="paced" additive="replace" fill="freeze"/> |
| </rect> |
| <rect x="-15" y="-15" width="30" height="30" transform="translate(-40,40)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="translate(0,0)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="translate(40,-40)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="75" text-anchor="middle">paced translation</text> |
| </g> |
| |
| <g transform="translate(420,90)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="gray" stroke-width="4" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="translate" values="-40,40;-20,-20;40,-40" dur="3s" calcMode="linear" additive="replace" fill="freeze"/> |
| </rect> |
| <rect x="-15" y="-15" width="30" height="30" transform="translate(-40,40)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="translate(-20,-20)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="translate(40,-40)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="75" text-anchor="middle">linear translation</text> |
| |
| </g> |
| |
| <g transform="translate(60,220)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="none" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="scale" values="1,2;3,2;1,1" dur="3s" calcMode="paced" fill="freeze"/> |
| </rect> |
| |
| <rect x="-15" y="-30" width="30" height="60" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-45" y="-22.5" width="90" height="45" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="60" text-anchor="middle">paced scale</text> |
| </g> |
| |
| <g transform="translate(180,220)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="none" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="scale" values="1,2;3,2;1,1" dur="3s" calcMode="linear" fill="freeze"/> |
| </rect> |
| |
| <rect x="-15" y="-30" width="30" height="60" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-45" y="-30" width="90" height="60" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="scale(1,1)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="60" text-anchor="middle">linear scale</text> |
| </g> |
| |
| <g transform="translate(300,220)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="gray" stroke-width="4" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="rotate" values="0,0,0;45,-15,-20;180,30,50" dur="3s" calcMode="paced" additive="replace" fill="freeze"/> |
| </rect> |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(0,0,0)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(90,0,5)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(180,30,50)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="75" text-anchor="middle">paced rotation</text> |
| </g> |
| |
| <g transform="translate(420,220)"> |
| <rect x="-15" y="-15" width="30" height="30" stroke="gray" stroke-width="4" fill="rgb(230,230,230)"> |
| <animateTransform attributeName="transform" attributeType="XML" type="rotate" values="0,0,0;45,-15,-20;180,30,50" dur="3s" calcMode="linear" additive="replace" fill="freeze"/> |
| </rect> |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(0,0,0)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="0s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(45,-15,-20)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="1.5s" dur="0.2s"/> |
| </rect> |
| |
| <rect x="-15" y="-15" width="30" height="30" transform="rotate(180,30,50)" stroke="rgb(255,180,0)" stroke-width="1" fill="none"> |
| <set attributeName="stroke-width" to="4" begin="3s" dur="0.2s"/> |
| </rect> |
| |
| <text y="75" text-anchor="middle">linear rotation</text> |
| </g> |
| |
| |
| </g> |
| </svg> |