次の SVG グラフィックがあります。
<svg version="1.1" id="diagram" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="375px" height="150px">
<path d="M45,11.5H33.333c0.735-1.159,1.167-2.528,1.167-4C34.5,3.364,31.136,0,27,0s-7.5,3.364-7.5,7.5c0,1.472,0.432,2.841,1.167,4H9l-9,32h54L45,11.5z M22.5,7.5C22.5,5.019,24.519,3,27,3s4.5,2.019,4.5,4.5c0,1.752-1.017,3.257-2.481,4h-4.037 C23.517,10.757,22.5,9.252,22.5,7.5z" id="control"/>
</svg>
このオブジェクトのスケールをプログラムで変更したいのですが、中心点からスケールしたいです。
私は<g>
タグの周りにそれをラップしようとしました
<g transform="translate(0,0)">
<path x="0" y="0" id="control" transform="scale(2)">...</path>
</g>
しかし、これはうまくいかないようです。私はオンラインで見てきましたが、パスをスケーリングするにはパスマトリックスを操作する必要があるようです。これは恐ろしく難しいようです。厄介なことに、additive="sum" プロパティを使用して簡単にスケーリングできますが、この例では変換アニメーションを使用していません。
誰でも私を助けることができますか?
編集:これをうまく機能させることができました。同じことで立ち往生している人のために、プログラムでそれを行う良い方法があります:
var elem = document.getElementById("control");
var bBox = elem.getBBox();
var scaleX = 2;
var scaleY = 2;
$(elem).attr("transform", "scale("+scaleX+", "+scaleY+") translate("+-bBox.width/2+","+-bBox.height/2+") ");