我在这里还放置了gif中出现的示例的初始文件和最终文件。
这个文件不是最好的解释我的问题,因为它是非常“线性”,但我认为你可以尝试解释我做什么。 说真的,我现在就告诉你,你把这些数字分组在一个正方形盒子里的方法是行不通的。你需要考虑的是窗口的大小。
最初,示例代码会提示您输入起点,这样您就可以以某种方式指定“扫描”的开始位置。对于这样一个例子,你可以不受惩罚。,但是,同样的,一个相等的LxW选择更有可能给你带来问题,提示窗口大小2点可以消除这个问题。 对不起,我不太明白你的帖子。
在我之前的帖子中,我试着放一个gif,但似乎效果不太好。
对不起,我的英语很差,我正在使用翻译,这意味着有时我不能很好地解释,我无法理解我想说的话,就像之前的帖子:哎呀:
在我之前的帖子中,我说我放了2个文件,但失败了,最后没有放。
现在,是的,我拿到了文件,看看我是否这样理解自己,因为用词很难:哭:
第一个文件是原件,第二个是我打算得到的。
placa1.dxf
placa2.dxf 也许如果我解释一下我的目标,你们会更容易理解。
就是这样,我正在使用激光雕刻机,记录区域是200x200,或者其他值取决于我使用的镜头。所以当我有一个比这更大的绘图区域时,我必须在这个区域中加入几个层,然后继续录音。我认为这是显而易见的,这是我的目标。
这是我需要有这个自动化过程的功能之一,这将节省我很多小时的工作。 我想我理解他在追求什么。
我不是一个Lisp程序的人,但一种方式来做到这一点。NET类似于lisp的方法是从0,0到200200执行SelectWindow,然后更改属于SelectWindow的所有实体层
现在做一个从0,0到200200的CrossingWindow,看看和之前的select窗口相比,CrossingWindow中是否有任何对象。(查看是否有任何对象仅部分位于选择窗口中)
如果没有新对象,则下一个窗口将从200,0到400200。
如果有新对象,则获取每个对象的边界框
对于右上角大于200的每个边界框,使用最小的Y值作为下一个级别的开始。(因此,如果最低的Y值是180,那么当您移动到下一行时,您从0180开始)
对于其他窗口,获取最低的X值作为下一组窗口的开始。
在前两组窗口的图片中,d由两个不同的对象组成,因此绿色部分完全落在窗口中,其最低X值将是下一个绿色窗口的X值。
可能会出现问题,例如,当你向上移动时,你需要检查一个对象是否已经改变了层,因为一个对象可能会落在多个窗口中。
如果所有对象与窗口相比都不大于某个大小,那么这可能会起作用。当您得到边界框时,如果它的面积大于窗口面积的百分比,则显示错误消息并停止例程
我也注意到了。我是在“太大”的规则下工作的。我们可以通过“C”而不是“W”修改选择,唯一的问题是它将取代“过大”条件。
一个快速的解决方案是创建实体的副本,该副本位于多个窗口中。这样,实体将显示在两个窗口(层)上
同样从OP发布的dxf样本来看,200*200框似乎不是从0,0开始的。所以我用“_C”选项测试了代码,结果有点不对劲。
工作太多
已更新发布代码
附加的lisp包括CopytoPreviousLayer选项
拆分层2。LSP 谢谢你关心我的问题。
我一直在测试pBe提供的代码,已经接近我的目标了,一个问题是函数只有k是用直线和圆选择的,但是我自己可以轻松地修复它。
检测到的一个问题是大于定义区域的实体问题。
我认为我们可以解决这个问题。你用的是CopyToPrevousLayer吗?
需要知道哪一个适合你,这样我才能做出必要的调整。
以及你对代码做了哪些修改。 使用了你之前放置的两个帖子的功能,需要做些什么来激活这个功能吗?
我还需要做的一个修改是对层“Cheio”也执行此功能
但这个问题并不太严重,因为我可以复制函数并从它将扫描的层更改其名称:)
页:
1
[2]