0

我在 XML 文件中有 SVG 值,例如209499.728041

 <path id="dwg-object-136" d="M 209499.728041,19994.245007 209499.728041,27254.245007" style="fill:none;stroke:blue;strok    e-width:4px" />
 <path id="dwg-object-137" d="M 220719.728041,27254.245007 220719.728041,18564.245007" style="fill:none;stroke:blue;strok    e-width:4px" />
 <path id="dwg-object-138" d="M 220719.728041,19994.245007 209499.728041,19994.245007" style="fill:none;stroke:blue;strok    e-width:4px" />
 <path id="dwg-object-209" d="M 214304.728041,35614.245007 A 2000.000000,2000.000000 0 0 0 212304.728041,37614.245007" fi    ll="none" stroke="blue" stroke-width="0.100000" />
 <path id="dwg-object-210" d="M 230819.728041,37614.245007 A 2000.000000,2000.000000 0 0 0 228819.728041,35614.245007" fi    ll="none" stroke="blue" stroke-width="0.100000" />
 <path id="dwg-object-211" d="M 216007.728041,39574.245007 216007.728041,35614.245007" style="fill:none;stroke:blue;strok    e-width:4px" />

有没有办法将所有这些值除以 1000,这样就可以了209.499728041

4

1 回答 1

2

如果您只想让您的 SVG 内容以 1/100 比例显示在文件中,最简单的方法是将它们包装在一个通用转换中:

<g transform="scale(0.01)">
  <!-- all your paths here -->
</g>

但是,如果你真的想修改路径数据,你可以使用 SVG DOM:

// Untested code
function scalePath( path, scaleFactor ){
  var scalable = ['x','y','x1','y1','x2','y2','r1','r2'];
  for (var i=0,segs=path.pathSegList,len=segs.numberOfItems;i<len;++i){
    var seg = segs.getItem(i);
    for (var j=scalable.length;j--;){
      var prop = scalable[j];
      if (prop in seg) seg[prop] *= scaleFactor;
    }
  }
}

请注意,这(希望)不会触及 arc-to 命令的anglelargeArcFlagsweepFlag属性。

您可以通过打开段的属性并缩放每个段类型的正确属性来使上述代码的性能稍微提高一些pathSegTypeAsLetter,但我懒得这样做,而且计算机速度很快。

如果您这样做是为了在序列化中保存字节,您可能希望对这些值进行四舍五入:

if (prop in seg) seg[prop] = Math.round(seg[prop]*scaleFactor);
于 2013-01-16T17:56:16.573 回答