明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1769|回复: 22

[讨论] 关于按坐标位置排序的问题,请教各位大佬

[复制链接]
发表于 2023-3-1 21:12 | 显示全部楼层 |阅读模式
按坐标如何排序才能达到如图的效果,琢磨了很长时间,百思不得其解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-3-3 09:36 | 显示全部楼层
下面仅针对例图分析

排序规则如下
1.
所有板材取左上角点
2.
当板材长度为全长时,仅以X由小到大排序
3.
当板材长度非全长时,行列排序,规则为:(主干)从下到上,(分支)从左到右

行列排序的函数可以搜我的帖子作参考,模式 (ssdivsort (ssget) 1 "-E" fuzz)
楼主你只需要解决板材是否全长的分组问题即可

再提供一个可能用的上的函数

;;将一个复合表“拍平”成一个非复合表。
(defun flatten ( biao )
        (cond
                ((null biao) NIL)
                ((atom biao)(list biao))
                ((atom (car biao)) (cons (car biao) (flatten (cdr biao))))
                ((append (flatten (car biao)) (flatten (cdr biao))))
        )
)
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-2 00:00 | 显示全部楼层
0:总点表lstp
1:先对X进行升序排序(P1 P2 P3 P4 P5......),取出X最小的点P1。
2:判断P2 P3的点,是否在在X轴容差范围内即是同一列,如果在就把分成一个表lstX1
3:判断对lst1进行Y轴排序LSTY1,取出Y轴的最小点PY1.  PY1是X容差范围内左下角点。
4:根据PY1的Y轴坐标,在总点表中lstp,寻找Y轴容差范围(同一行)lstYX1,所有点进行编号。
5:总表中取出lstyx1,得到新lstp。重复上诉操作。

总结来说:先分列,找到第一列中的第一个点,根据这个点找到同行的点的进行编号。取出编号之后的点,再分列,找到第一列中的第一个点。。。。。。。
发表于 2023-3-1 22:39 | 显示全部楼层
看不出普遍性, 把 13 去了,你想要什么样的结果?
两个矩形是否有分隔空间的作用。
发表于 2023-3-2 07:52 | 显示全部楼层
你是只有两个矩形,还是图形中会有不定数量的其它图形?
发表于 2023-3-2 10:05 | 显示全部楼层
看图排序规则似懂非懂。
 楼主| 发表于 2023-3-2 12:27 | 显示全部楼层
中间的矩形为空洞,其他区域为等宽的板材,按从左到右的顺序编号
发表于 2023-3-2 16:28 | 显示全部楼层
坐等大佬出现,哈哈。
发表于 2023-3-2 17:19 | 显示全部楼层
这个问题应该这样解决:先求出每块板的矩形包络坐标,或者说是找出多少快板,然后对每块板进行排序。一块板中间被部分开洞,最小最大包络坐标也是可以处理的。
发表于 2023-3-3 10:29 | 显示全部楼层
看图找规则。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-6 03:19 , Processed in 0.306828 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表