开源改变世界

如何装袋两个形状的差异 #220

推推 grbl 3年前 (2023-01-31) 242次浏览
关闭
cclein 打开了这个问题 2016 年 2 月 1 日 · 52条评论
关闭

如何装袋两个形状的差异#220

cclein 打开了这个问题 2016 年 2 月 1 日 · 52条评论

注释

如何装袋两个形状的差异 #220

我正在绞尽脑汁想弄清楚如何执行以下操作:

假设我有两个圆圈或正方形,一个在另一个里面。有没有办法让我说出内部形状的口袋,然后将外部形状和内部形状之间的差异调整到不同的高度?具体更低。

这在 JScut 中很容易做到,我想知道我是否在 bCNC 中遗漏了什么。

如何装袋两个形状的差异 #220
所有者

不,你没有遗漏任何东西。目前是不可能的。在我的 TODO 列表中 :)

如何装袋两个形状的差异 #220
作者

好的。我真的很喜欢你的软件和快速发展!

我将尝试在 jscut.org 上创建 gcode。你
对将其导入 bCNC 有什么建议吗?我很久以前尝试过,但遇到了
问题。

干杯,

克里斯

2016 年 1 月 31 日,Vasilis Vlachoudis notifications@github.com写道:

不,你没有遗漏任何东西。目前是不可能的。在
我的 TODO 列表中 :)


直接回复此邮件或在 GitHub 上查看:
#220(评论)

如何装袋两个形状的差异 #220
所有者

导入不起作用(奇怪)请将 gcode 发送给我们,以便我调试问题。

如何装袋两个形状的差异 #220
作者

实际上导入比我上次做的要好得多。
不幸的是,每个操作的块等都没有出现,但我
可以忍受。坏消息是代码对我的 Raspberry Pi 来说太大了:(

在 2016 年 2 月 1 日星期一凌晨 3:15 Vasilis Vlachoudis notifications@github.com
写道:

导入不起作用(奇怪)请将 gcode 发送给我们,以便我
调试问题。


直接回复此电子邮件或在 GitHub
#220(评论)上查看。

如何装袋两个形状的差异 #220
所有者

@cclein您可以将输入发送给我以检查失败的地方吗?

如何装袋两个形状的差异 #220
作者

它没有失败。对于 RaspberryPi 来说太大了。变得反应迟钝并
减慢了切割速度。文件大小为 10mb。我无法通过 github 发送它。
我还能把它寄到别的什么地方吗?

在 2016 年 2 月 1 日星期一上午 10:49 Vasilis Vlachoudis notifications@github.com
写道:

@cclein https://github.com/cclein你能把输入发给我检查
失败的地方吗?


直接回复此电子邮件或在 GitHub
#220(评论)上查看。

如何装袋两个形状的差异 #220
所有者

你能把它压缩并通过电子邮件发送吗?我的地址在程序的关于。有几件事我想优化

如何装袋两个形状的差异 #220 vlachoudis 添加了 增强 标签 2016 年 3 月 13 日
如何装袋两个形状的差异 #220
莫塔内斯库 评论了 2018 年 3 月 30 日  

实际上,快速而肮脏的方法是让你的向量连续。当然可能需要一些后期处理

如何装袋两个形状的差异 #220

如何装袋两个形状的差异 #220
所有者

@motanescu有趣的想法。

如何装袋两个形状的差异 #220
合作者
哈维 评论了 2018 年 5 月 6 日  

这将是真正有用的功能。

@motanescu我尝试使用您的方法制作带有嵌套圆形岛的圆形口袋:

如何装袋两个形状的差异 #220

但是口袋未能生成

Traceback (most recent call last):
  File "/opt/bcnc-git/Utils.py", line 413, in __call__
    return self.func(*args)
  File "/opt/bcnc-git/ToolsPage.py", line 1490, in execute
    self.tools.getActive().execute(self.app)
  File "/opt/bcnc-git/ToolsPage.py", line 769, in execute
    app.pocket(name)
  File "/opt/bcnc-git/bCNC.py", line 1758, in pocket
    msg = self.gcode.pocket(blocks, diameter, stepover, name)
  File "/opt/bcnc-git/CNC.py", line 3637, in pocket
    newpath.extend(self._pocket(path, -D*diameter, stepover, 0))
TypeError: 'NoneType' object is not iterable

顺便说一句,f-engrave http://www.scorchworks.com/Fengrave/fengrave.html为此使用了不同的方法。他们只是计算你必须越过某条线多少次才能进入形状。具有奇数交叉点的形状被铣削,而具有偶数交叉点的形状被保留。反之亦然(取决于用户的需求)。在 b-cnc 中,将此计数仅限于选定的形状是有意义的。

如何装袋两个形状的差异 #220

这是我的示例中的代码。所有的东西都集中在一层。也许这很重要

(块名称:标头)
(块扩展:0)
(块启用:1)
M3 S12000
G4 P3
(块名称:Layer0)
(块扩展:0)
(块启用:1)
g0 x0 y0
g1 z0 f600
g1 x-32.75 y0 f500
g1 x-32.75 y4
g1 x-21.25 y4
g1 x-21.25 y11.25
g1 x-21.277688 y11.813599
g1 x-21.360485 y12.37177
g1 x-21.4975918 x7237
g1 x-21.4975916 x7237. y13.45043
g1 x-21.928953 y13.960532
g1 x-22.21905 y14.444529
g1 x-22.55519 y14.897762
g1 x-22.934136 y15.315864
g1 x-23.352239 y15.694811
g1 x-23.805471 y16.030951
g1 x-24.289469 y16 .321048
g1 x-24.799571 y16.562308
g1 x-25.330863 y16.752407
g1 x-25.878231 y16.889516
g1 x-26.436402 y16.972313
g1 x-27 y17
g1 x-27.563599 y16.972313
g1 x-28.12177 y16.889516
g1 x-28.669137 y16.752407
g1 x- 29.20043 y16.562308
g1 x-29.710531 y16.321048
g1 x-30.194529 y16.030951
g1 x-30.647762 y15.694811
g1 x-31.065864 y15.315864
g1 x-31.44481 y14.897762
g1 x-31.780951 y14.444529
g1 x-32.071048 y13.960532
g1 x-32.312308 y13.45043
g1 x-32.502407 y12.919137
g1 x-32.639516 y12.37177
g1 x-32.722312 y11.813599
g1 x-32.75 y11.25 g1
x- 322 g1 x-34 -40 y0 g1 x-40 y20

G1 X-
18.650137 Y20
G1 X-18.653927 Y8.975452
G1 X-18.650137 Y8.871082
G1 X-1925924 Y8.490086 G1 .295995 g1 x-18.303134 y3.172177 g1 x-18.131005 y3.080173 g1 x-17.75 y3 g1 x-9.754386 y2.999991 g1 x-9.371702 y3.076111 g1 x-9.198815 y3.168521 g1 x-9.047279 y3.292884 g1 X-8.922916 Y3.444421 G1 X-8.830506 Y3.617307 G1 X – 8.754386 Y3.9999991 G1 X-8.774077 Y8.490086 G1 -9.340394 y10.356984

g1 x-9.884948 y11.171967
g1 x-10.214466 y11.535534
g1 x-10.578034 y11.865053
g1 x-10.972149 y12.157349
g1 x-11.393017 y12.409607
g1 x-11.836583 y12.619398
g1 x-12.298577 y12.784702
g1 x-12.774549 y12.903927
g1 x-13.259915 y12.975924
g1 x-13.75
y13 g1 x-14.725452 y12.903927 g1 x-
15.201424 y12.784702
g1 x-15.663417 y12.619398
g1 x-16.106984 y12.409607
g1 x-16.527851 y12.157349
g1 x-16.921967 y11.865053
g1 x-17.285534 y11.535534
g1 x-17.615053 y11.171967
g1 x-17.907348 y10.777852
g1 x-18.369398 y9.913418
g1 x-18.534702 y9.451424
g1 x-18.653927 y8 .975452
g1 x-18.650137 y20
g1 x0 y20
g1 x0 y0
g0 z2
(块名称:页脚)
(块扩展:0)
(块启用:1)
M5
G0 Z20

如何装袋两个形状的差异 #220
合作者

哇,这是真正的 PITA。起初它并没有真正影响到我,但随着每一个新项目,这变得越来越烦人……

这个被引用了2018 年 6 月 29 日
如何装袋两个形状的差异 #220
合作者

刚刚发现 f-engrave 也是用 python 编写的,但是我不确定是否可以重用其中的一些代码……可能不会:-(

如何装袋两个形状的差异 #220
合作者
哈维 评论了 2018 年 7 月 3 日  

添加将任何路径标记为“岛”的按钮怎么样?这是 Photoshop 概念:

如何装袋两个形状的差异 #220

然后使用工具将在与岛路径的交叉点处分割任何选定的段并使其移动到安全 Z 并返回(在奇数交叉上向上,在偶数交叉上向下),甚至可能重新使用代码来切割标签。完成后,您可以将岛路径附加到代码末尾,这样岛表面就完成了。我知道这不是真正有效的方法,但它应该有效……

如何装袋两个形状的差异 #220
合作者
哈维 评论了 2018 年 7 月 3 日  

更好的算法:

如何装袋两个形状的差异 #220

换句话说:我们需要弄清楚如何检测路径是否存在碰撞,如何获取这些路径相交的点列表,以及之后如何合并它们。然后重复:-)

计算线段的碰撞可能很容易,但我不知道如何计算线与弧的交点或两条弧的交点。

如何装袋两个形状的差异 #220
合作者
哈维 评论了 2018 年 7 月 3 日  

好消息lib/bpath.py已经有了这些 :-)
intersectSelf(self) # 将路径与自身相交并标记所有交叉点
intersect(self, other)# 与另一段相交,返回两个点
isInside(self, P)# 如果点 P(x,y) 在路径内则返回真
split2contours(self)# 将路径拆分为轮廓
更新:刚刚添加以下方法:
intersectPath(self, path) # 将路径与其他路径相交并标记所有交叉点

不确定这些到底是做什么的……必须先弄清楚……

如何装袋两个形状的差异 #220
合作者
哈维 评论了 2018 年 7 月 4 日  

形状交叉插件的 alpha 版本(带岛的口袋的技术预览):

如何装袋两个形状的差异 #220

一旦这将可靠地工作,我们将能够对多个形状执行任何布尔运算,这意味着我们将能够使用剖面的交集来执行该口袋算法。

我没有太多时间,如果有人可以帮助我调试此插件以在任何两条路径下可靠地工作,我将不胜感激。目前它被打破了一半的路径方向组合……

如何装袋两个形状的差异 #220
合作者

我显然需要一些睡眠。我醒了,修复了路径上的单循环和布尔运算现在可以正常工作了!如果我是正确的,带岛屿的口袋非常接近:-)

如何装袋两个形状的差异 #220
合作者

@TGPSKI也许尝试使用外部轮廓使岛稍大一些,因此仍然有一些材料留给最终通过,您可以使用较小的岛轮廓来完成。这样你就可以在岛上获得更好的表面光洁度。

如何装袋两个形状的差异 #220
贡献者
马里奥巴斯 评论了 2018 年 8 月 20 日  

在实际工作中看到它很好,我还没有使用它。根据您的说法,也许我在写一些已经安装过的愚蠢的东西,在岛上补偿了工具的直径,对吗?
我在重读上面,你的第一步,在路线的交叉点,你继续绕岛而不是提高Z,你能做一个沿着这种路线的版本吗?

如何装袋两个形状的差异 #220
合作者
哈维 评论了 2018 年 8 月 20 日  

岛屿是补偿工具的直径,对吗?

不。您可以在制作岛屿之前应用配置文件操作

你继续绕岛而不是升起Z

我正在做。参见#220(评论)

现在您可以在切割操作中检查“所选岛屿的切割轮廓”

如何装袋两个形状的差异 #220
合作者
哈维 评论了 2018 年 9 月 7 日  

真棒消息伙计们!我已经设法编写了允许刀具路径绕过岛屿而不是越过岛屿的代码!这仍然需要大量的调整。但我们似乎正前往更好的袖珍岛屿!

如何装袋两个形状的差异 #220

如何装袋两个形状的差异 #220

如何装袋两个形状的差异 #220
贡献者

出色的!我祝贺你!做得好

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 9 月 7 日

Harvie 向 Harvie/bCNC 添加了引用此问题的提交 2018 年 9 月 7 日

如何装袋两个形状的差异 #220
合作者

现在我已经为案例修复了差异插件,其中岛屿将形状分成两部分:

如何装袋两个形状的差异 #220

然而,真正的岛屿意识口袋仍然是不可能的。我必须完全重写袖珍代码。

如何装袋两个形状的差异 #220
贡献者
马里奥巴斯 评论了 2018 年 9 月 7 日  

他做了什么,这对你来说是错误的?环绕切割图的岛屿?如果是这样,我认为它是一个有用的实用程序或变体,请不要丢弃它!
算了,我觉得我写的是废话

如何装袋两个形状的差异 #220
贡献者

它是否也有能力在外部轮廓操作中包围岛屿?

如何装袋两个形状的差异 #220 哈维 补充道 很酷的照片 包含漂亮的图片,可以在 wiki 上重复用于文档目的标签 2018 年 10 月 31 日
如何装袋两个形状的差异 #220
贡献者
马里奥巴斯 评论了 2018 年 11 月 16 日  

Uau !, 我在口袋和岛屿的行动中取得了进步!
尊重非线性化的圆圈。
问题:如果在一个块中,型腔被分成两个扇区(右图),则会生成错误的切割(此处为对角线)。我想象的解决方案是正确的:口袋操作为每个扇区生成单独的块。
好奇心:如果我选择正确的一个岛加上一个外部岛,口袋操作已经成功排序。但我不知道这是不是随机的。

如何装袋两个形状的差异 #220

如何装袋两个形状的差异 #220
合作者

@MARIOBASZ凉爽的。我知道如何改进:

1.) 做形状的内部轮廓
2.) 检查它们是否碰撞并在需要时产生差异
3.) 做岛的外部轮廓
4.) 检查它们是否碰撞并在需要时产生差异
5.) 转到 1.)

这会给你更好的岛屿轮廓。喜欢这里:#220(评论)

如何装袋两个形状的差异 #220 哈维 补充道 凸轮 标签 2018 年 11 月 20 日
如何装袋两个形状的差异 #220

此功能是否在当前主控中实现?

如何装袋两个形状的差异 #220
合作者

喜欢 (0)