|
发表于 2022-7-6 09:42:27
|
显示全部楼层
我想我理解他在追求什么。
我不是一个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值。
可能会出现问题,例如,当你向上移动时,你需要检查一个对象是否已经改变了层,因为一个对象可能会落在多个窗口中。
如果所有对象与窗口相比都不大于某个大小,那么这可能会起作用。当您得到边界框时,如果它的面积大于窗口面积的百分比,则显示错误消息并停止例程 |
|