如何在snap svg中使用英寸?

如何在snap svg中使用英寸?,svg,snap.svg,inches,Svg,Snap.svg,Inches,我刚开始玩snap,一直在尝试用英寸来代替像素,这可能吗?如果是这样,我该如何使用英寸?似乎有些函数接受英寸,有些函数不接受英寸 // This works var s = Snap("1.5in", "1.5in"); // This works s.rect("0in", "0in", "1.5in", "1.5in").attr({ stroke: "#f00", fill: "transparent" }); // This works s.path("M0,144L

我刚开始玩snap,一直在尝试用英寸来代替像素,这可能吗?如果是这样,我该如何使用英寸?似乎有些函数接受英寸,有些函数不接受英寸

// This works
var s = Snap("1.5in", "1.5in");

// This works
s.rect("0in", "0in", "1.5in", "1.5in").attr({
    stroke: "#f00",
    fill: "transparent"
});

// This works
s.path("M0,144L144,0").attr({
    stroke: "#f00"
});

// This fails (Error: Invalid value for <path> attribute d="M0in,0inL1.5in,1.5in")
s.path("M0in,0inL1.5in,1.5in").attr({
    stroke: "#f00"
});
//这很管用
var s=捕捉(“1.5英寸”、“1.5英寸”);
//这很有效
s、 矩形(“0英寸”、“0英寸”、“1.5英寸”、“1.5英寸”)。属性({
笔划:“f00”,
填充:“透明”
});
//这很有效
s、 路径(“M0144L144,0”).attr({
笔划:“f00”
});
//此操作失败(错误:属性d=“M0in,0inL1.5in,1.5in”的值无效)
s、 路径(“M0in,0inL1.5in,1.5in”).attr({
笔划:“f00”
});

正如您所发现的,某些SVG值只接受原始数字(解释为SVG用户坐标),而不接受带单位的长度。路径“d”属性就是其中之一

这不是snap.svg问题,而是底层svg元素的工作方式

最简单的方法是为自己创建一个转换系数。SVG用户坐标的初始值是1个用户单位等于1个CSS“px”(像素)单位根据CSS标准,“px”单位正好等于“in”(英寸)单位的1/96。如果使用transforms或viewBox属性缩放SVG,则所有比例都会相应调整,因此比率保持不变

因此,要创建相当于
“M0in,0inL1.5in,1.5in”
的路径,您需要将每个数字乘以96,然后将字符串连接在一起:

s.path("M0,0L" + 1.5*96 + "," + 1.5*96).attr({
    stroke: "#f00"
});
如果您需要创建一条长而复杂的路径,那么值得一提的是,在将一长串字符串和数字连接到一个字符串中时,它比
+
操作符更有效


但是,请注意,CSS/SVG“in”单元在屏幕上的显示并不总是精确到一英寸。如果你正在打印文档,它应该非常准确。但当然,如果要缩放或转换SVG,它可能不会接近一英寸。

我想我走的是正确的道路,我创建了一个函数,用于将分数转换为像素的所有度量。似乎与我的演示很好地工作,但将不得不测试它的性能。