开源改变世界!!

实验性 SVG 支持 #451

推推 grbl 2年前 (2023-01-27) 236次浏览
打开
arkypita 打开了这个问题 2018 年 10 月 1 日 · 66条评论
打开

实验性 SVG 支持#451

arkypita 打开了这个问题 2018 年 10 月 1 日 · 66条评论

注释

实验性 SVG 支持 #451
所有者

在这里写下关于 SVG 支持的信息

实验性 SVG 支持 #451
斯图尔特B4 评论了 2018 年 10 月 1 日  

你好。
只是一点信息。
刚刚安装了 v2.9.0 并制作了一个快速测试 .SVG 文件。
这是结果:

我将设置保留为默认设置,加载了在 Inkscape 中制作的 .svg 文件。
我注意到 M4 命令可以打开激光,如下图所示。
但是在生成代码并保存之后,我查看了代码,发现它生成了 M3 而不是激光开启。
当我加载文件时,还添加了 X1 和 Y2 mm 的偏移量。

实验性 SVG 支持 #451

我还注意到代码中没有生成返回原点代码。
所以当它完成燃烧时,激光停在最后一行的(右下)末端。
不确定 M30 应该做什么,但我将其从代码末尾删除,
并将 G0 X0 Y0 添加到末尾。
然后将其重新加载,运行代码,完成后激光返回 Home。

实验性 SVG 支持 #451

生成的代码(开始和结束)去掉了一大段,实际上是 234 行代码:

M5
G0 X31.523 Y32.336
M3 S255
G1 X38.624 Y32.336 F300
G1 X38.624 Y38.570
G1 X31.523 Y38.570
G1 X31.523 Y32.336
M5
……… ……………………. G0 X36.346 Y1.928
M3
S255 G1 X31.585 Y7.636 F300 G1 X31.264 Y2.268 G1 X35。 063 Y8.577 G1 X29.949 Y7.295 G1 X37.058 Y5.486 G1 X34.219 Y10.062 G1 X34.813 Y2.635 G1 X38.172 Y6.745 G1 X31.431 Y3.963 G1 X36.346 Y1.928 M5 M30 M30

这是 1 次通过后完成的测试燃烧。
它按以下顺序烧制形状:
1:正方形。
2:从中心螺旋。
3:圆。
4:左星。
5:右星。

实验性 SVG 支持 #451

实验性 SVG 支持 #451
所有者作者

你好@StuartB4
感谢您的快速反馈。你的所有观察都是对的。

我使用了第三方代码(经过大量修改)进行 SVG 转换,所以我预计会出现一些问题,但发布新版本的愿望比强烈测试它更强烈!

我注意到 M4 命令可以打开激光,如下图所示。
但是在生成代码并保存之后,我查看了代码,发现它生成了 M3 而不是激光开启。

我还注意到代码中没有生成返回原点代码。
所以当它完成燃烧时,激光停在最后一行的(右下)末端。

M3 而不是 M4 和最后缺少 Go-Home 是已知的。我会尽快修复。

当我加载文件时,还添加了 X1 和 Y2 mm 的偏移量。

我认为偏移量不是由代码添加的,而是已经存在于您的原始 svg 绘图中。核实!

它按此顺序燃烧形状 […]

这是一个问题还是没关系?我认为代码是在 xms-svg 代码中生成的,我身边几乎没有控制权。

实验性 SVG 支持 #451
斯图尔特B4 评论了 2018 年 10 月 2 日  

嗨 Arkypita。
不确定偏移量。
我所做的只是在它们所在的位置绘制形状并保存 .svg,
我没有注意任何尺寸或位置,只是确保它们都在 40 x 40 毫米的正方形内。
我刚刚查看了 .svg 文件并标记了 X1 Y2 位置。
所以虽然它不是故意添加的,但没关系。

实验性 SVG 支持 #451

它按此顺序烧掉形状 […]
这是个问题还是没问题?我认为代码是在 xms-svg 代码中生成的,我身边几乎没有控制权。

对我来说当然不是问题,只是一个观察。
只要它正确燃烧,我认为它并不重要。

实验性 SVG 支持 #451
所有者作者

您是否从 2.9.0 版中删除了 Line To Line Tracing?
它似乎不见了。

问题已删除?
2.9 中的光栅导入没有更改,
配置为“pwm 支持”以查看 line2line 选项

实验性 SVG 支持 #451
斯图尔特B4 评论了 2018 年 10 月 3 日  

对不起。我的错。我在设置中关闭了 PWM 模式。
这就是为什么我删除了我的评论。

实验性 SVG 支持 #451

Здравствуйте。Все хорошо, открывает. Возможно сделать маштабирование векторов。Спасибо

实验性 SVG 支持 #451
所有者作者

翻译:你好。一切顺利,打开。可以进行矢量缩放。谢谢

是的,作为未来的选择,我将添加缩放。
现在我建议使用 inkscape 来准备所需大小的图像。

实验性 SVG 支持 #451
卢博松 评论了 2018 年 10 月 10 日  

嗨,干得好!
我有一些问题:

  1. 你打算填充载体吗?(功率取决于颜色?)
  2. 生成行的编号 Gcode(开/关)
  3. 每个新的附加文件都有第一个移动 x0 y0,可以通过切换到 ON/OFF
  4. 与4相同,但对于矢量化和填充的图片,轮廓再次从x0 y0开始
  5. 现在不工作“从特定行开始绿色开始箭头”,再次从第一行开始,而不是从指定行开始,但是 ..File/Send From Position 运行良好

我测试打开从 Corel DRAW X7 64b= 导出的 .SVG 文件效果很好

谢谢

实验性 SVG 支持 #451

我还测试了 Corel X7 SVG 导出并且运行良好。我认为如果你能开发矢量填充它会非常有用。我导出填充和未填充的相同文件,这是文件的区别。

未填写:
实验性 SVG 支持 #451

填充:
实验性 SVG 支持 #451

实验性 SVG 支持 #451
所有者作者
  1. 你打算填充载体吗?(功率取决于颜色?)

我不能排除。也许在未来但不是现在。
现在我建议使用您最喜欢的 SVG 编辑器中的填充功能:https ://wiki.evilmadscientist.com/Creating_filled_regions

实验性 SVG 支持 #451

我无法导入 SVG 文件。
实验性 SVG 支持 #451

实验性 SVG 支持 #451

与新版本相同。
实验性 SVG 支持 #451

实验性 SVG 支持 #451
所有者作者

你能提交你的svg吗?

实验性 SVG 支持 #451

此处不支持 SVG。:(

实验性 SVG 支持 #451
所有者作者

压缩并上传

实验性 SVG 支持 #451
海特尔 评论了 2018 年 10 月 19 日  

我发现了错误。
该文件是从带有字符编码重音的 Vectric Aspire 生成的,软件无法处理此问题。
我编辑并删除了这个字符“ã”

谢谢,

实验性 SVG 支持 #451
所有者作者

我确定问题出在文件中,但如果您可以共享它(有问题的那个),我可以尝试使导入过程更强大和容错

实验性 SVG 支持 #451

当然。

另一个很棒的功能是可以导入 dxf 文件。

这里是。
错误文件.zip

感谢并祝贺你的出色工作。

实验性 SVG 支持 #451
所有者作者

经过一番搜索后,我发现xml 规范定义了 xml 中只允许使用某些字符范围(svg 是 xml 文件的一种形式)。所以你的文件不是有效的 xml 文件。

在解析文件内容之前,我试图去除有效范围之外的任何字符,现在我能够正确读取您的 error_file.svg

LaserGRBL 的未来版本会更强大!

实验性 SVG 支持 #451

我很高兴为这个项目做出贡献。
不错的工作。

不要忘记允许直接导入 dxf 文件,而不必转换为 svg。

;)

实验性 SVG 支持 #451
斯图尔特B4 评论了 2018 年 11 月 3 日  

嗨 Arkypita。
刚刚再次尝试 SVG 文件。
我注意到当它生成 GCode 时,它​​在代码顶部写入了两次 M5。
不是问题,只是想知道为什么会这样。
代码开始:

G90
M5
M5
G0X39.6Y19.81
M4 S255
G1X39.58Y19.86 F250
X39.52Y19.92
X39.43Y19.97

我注意到的另一件事是在生成 GCode 之前将设置从 M4 更改为 M3
它仍然在代码中写入 M4。
同样,这不是问题,因为如果需要,可以在保存的 GCode 文件中更改/编辑它。
实验性 SVG 支持 #451

实验性 SVG 支持 #451
卡里姆塔瓦布 评论了 2018 年 11 月 29 日  

你好@arkypita

刚刚使用了很棒的 SVG 功能。我确实遇到了一些问题,在 SVG 完成雕刻后,机器会在进入第二条路径、第三条路径等雕刻之前以较快的速度和激光关闭相同的路径多次。我的意思是在每条路径之后,它都会在进入下一条路径之前执行此操作。

SVG 文件:
1.zip

实验性 SVG 支持 #451

撞。有任何想法吗?

实验性 SVG 支持 #451
斯图尔特B4 评论了 2018 年 12 月 5 日  

奇怪的问题。
我刚刚下载了你的文件,将其加载到 Inkscape 并将其缩小以适合我的机器,因为它只有 40 x 40 毫米,保存它并将其加载到 LaserGRBL 并且它完美地燃烧。

出于某种原因,虽然在加载它时它还在窗口中显示了原始大小路径,
如下图所示。

烧好后,它开始沿着原来的尺寸路径移动,但激光没有亮起。

实验性 SVG 支持 #451

尽善尽美可以达到这个尺寸。

实验性 SVG 支持 #451

实验性 SVG 支持 #451

只需从原始文档中剪切对象并将其粘贴到新的 40 x 40 毫米文档中,再试一次。再次缩小以适合文档并再次刻录。
这次它做得很完美,而且只有一次。

可能值得尝试选择对象,将其剪切并粘贴到与原始文件大小相同的新文档中。

实验性 SVG 支持 #451

实验性 SVG 支持 #451

实验性 SVG 支持 #451
斯图尔特B4 评论了 2018 年 12 月 5 日  

嗨hk89。

用 Notepad++ 查看文件。
文件中有 3 个独立的大字符块。
看起来对于它实际要做的事情来说太多了。
我删除了最后 2 个块并重新保存了文件。
有空的时候,你能不能在一块废料上试试这个文件。
它在我的机器上运行完美,并且只运行了一次,正如它应该的那样。

12.zip

实验性 SVG 支持 #451

我刚刚从 inkscape 进入 svg 文件并尝试将它们加载到 lasergrbl 中。图像很棒,但我无法让它们达到我需要的确切尺寸。我还制作了一个 100mm x 和 y 偏移量的夹具,以便我可以快速重复烧伤。svg 没有调整大小和偏移的选项,我知道你正在处理这个问题。我很想知道事情进展如何。

实验性 SVG 支持 #451

你好。
我注意到使用 svg 转换只是一个小问题:我正在使用 illustrator,如果我使用毫米作为单位,当我导入我的文件时,比例会改变并变得更大。我发现如果我在 illustrator 中使用“点”作为单位,则该比例与图像的尺寸相匹配。所以现在,为了导入 svg 文件的尺寸正确,我将 illustrator 中的测量单位从毫米更改为点,并将其视为毫米。

实验性 SVG 支持 #451

你好。
我注意到使用 svg 转换只是一个小问题:我正在使用 illustrator,如果我使用毫米作为单位,当我导入我的文件时,比例会改变并变得更大。

我有同样的问题。似乎在使用 Illustrator 时,LaserGBRL 将 mm 视为 pt 并除以约 2.83465。我一直用我的测量值除以这个值,但我喜欢 Rudi 的建议,因为它更容易。

实验性 SVG 支持 #451
所有者作者

查看我从中获取 SVG 库的项目代码,我在评论中看到它说:

/*  GCodeFromSVG.cs a static class to convert SVG data into G-Code 
    Not implemented: 
        Basic-shapes: Text, Image
        Transform: rotation with offset, skewX, skewY

    GCode will be written to gcodeString[gcodeStringIndex] where gcodeStringIndex corresponds with color of element to draw
*/

这正是此处报告的问题 的原因@Ziggy2013

查看文件 GCodeFromSVG.cs 第 319 行的代码,我们可以看到该代码仅使用参数“角度”而忽略了旋转点。

if ((transform != null) && (transform.IndexOf("rotate") >= 0))
{
	var coord = getTextBetween(transform, "rotate(", ")");
	var split = coord.Split(',');
	if (coord.IndexOf(',') < 0)
		split = coord.Split(' ');
	float angle = floatParse(split[0]) * (float)Math.PI / 180;
	tmp.M11 = Math.Cos(angle); tmp.M12 = Math.Sin(angle);
	tmp.M21 = -Math.Sin(angle); tmp.M22 = Math.Cos(angle);

	if (svgComments) gcodeString.Append(string.Format("( SVG-Rotate {0} )\r\n", angle));
}

现在我正在寻找一个三角函数解决方案(我不是很擅长这个)来实现围绕 0.0 以外的点的旋转

实验性 SVG 支持 #451 arkypita 固定了这个问题 2020 年 4 月 8 日
实验性 SVG 支持 #451
所有者作者

这看起来很简单,只需将转换矩阵的 M11、M12、M21、M22 的赋值替换为调用 RotateAt 函数即可。

if ((transform != null) && (transform.IndexOf("rotate") >= 0))
{
	var coord = getTextBetween(transform, "rotate(", ")");
	var split = coord.Split(',');
	if (coord.IndexOf(',') < 0)
		split = coord.Split(' ');
	float angle = floatParse(split[0]);// * (float)Math.PI / 180;
	float px = split.Length == 3 ? floatParse(split[1]) : 0.0f;
	float py = split.Length == 3 ? floatParse(split[2]) : 0.0f;

	//tmp.OffsetX = px;
	//tmp.OffsetY = py;
	//tmp.M11 = Math.Cos(angle); tmp.M12 = Math.Sin(angle);
	//tmp.M21 = -Math.Sin(angle); tmp.M22 = Math.Cos(angle);
	tmp.RotateAt(angle, px, py);
	if (svgComments) gcodeString.Append(string.Format("( SVG-Rotate {0} )\r\n", angle));
}

测试文件 pent with vines here and now imported correctly. 我要做更多的测试。

实验性 SVG 支持 #451
Ziggy2013 评论了 2020 年 4 月 8 日  

感谢 arkypita 跟进此问题。

关于如何处理原点以外的点旋转的解释在 youtube 上-

喜欢 (0)