明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1021|回复: 9

[提问] 关于vl-sort-i排序索引表问题

[复制链接]
发表于 2023-11-4 14:35:51 | 显示全部楼层 |阅读模式
本帖最后由 jun470 于 2023-11-4 14:38 编辑

小弟我是个新手,也没系统学习过lisp,不过论坛中有很多帖子给我自己研究提供了很大的帮助,感谢论坛中格纹大佬了!!!

我在论坛搜索 ” vl-sort-i “ 相关的帖子,没找到相关的,所以冒昧开个帖子讨论下,望大佬不吝赐教,感谢了!

现在我遇到的情况是这样,下面这段代码是框选文字之后,对文字的Y坐标进行排序,输出索引表。上传的附件中,我执行后,应当输出(2 0 3 1 4),但是实际输出的是(1 3 0 2 4),看了好几天了,没找到问题所在,代码简短,但是就是不对,欢迎大佬指正。




  1. (defun c:Q ( / ss k nlt ssN ptC yyj n1 e1 e2)
  2.       (vl-load-com)
  3.         (setq ss (ssget (list (cons 0 "text"))));;;框选建立选择集
  4.         (setq K 0)
  5.         (setq nlt (sslength ss));选择集个数

  6.     (repeat nlt
  7.                 (setq ssN (ssname ss K));获取图元号
  8.                 (setq ptC  (cdr (assoc 10 (entget ssN))) );获取坐标
  9.    (print (cadr ptC));输出Y
  10.           (setq yyj (append yyj (list ptC)));坐标集合
  11.           (setq K (+ K 1))
  12.           )
  13.   
  14.   (print yyj);;输出  坐标合集表
  15.       
  16.    (setq n1  (vl-sort-i yyj
  17.          (function (lambda (e1 e2)
  18.          (< (cadr e1) (cadr e2)) ) ) ));以Y排序的索引表,如(0 1 2)

  19.    (print n1);输出索引表,实际输出不对

  20. (princ))








本帖子中包含更多资源

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

x
发表于 2023-11-4 18:27:56 | 显示全部楼层
点表排序、图元坐标点排序-----通吃-----再浓缩----最终版2014.2.22
http://bbs.mjtd.com/forum.php?mo ... &fromuid=363233
(出处: 明经CAD社区)
直接用前辈的函数就行,这个函数很实用。
回复 支持 1 反对 0

使用道具 举报

发表于 2023-11-4 15:29:57 | 显示全部楼层
326.641 119.155 419.576 219.295 536.772 y值从小到大 (1 3 0 2 4)就是 119.155 219.295 326.641 419.576 536.772 没毛病  你说的(2 0 3 1 4)就是 419.576 326.641 219.295 119.155 536.772 这不合逻辑 索引位0 就是表中第一个元素
发表于 2023-11-4 15:53:08 | 显示全部楼层
本帖最后由 lee50310 于 2023-11-4 15:55 编辑

執行:Q  選取測試圖 5個數字
得到 點列表
                  (setq YYJ '((10830.8 326.641 0.0) (10830.8 119.155 0.0) (10830.8 419.576 0.0) (10830.8 219.295 0.0) (10830.8 536.772 0.0)) )
   你要做 Y 由小到大排序         
                 也可將Y 項先取出形成列表
                 執行: (setq sel mapcar 'cadr YYJ)
                 得到: (326.641 119.155 419.576 219.295 536.772)
                 執行: (vl-sort-i sel '<)  
                 得到:(1 3 0 2 4)

實際對照 y 列表 大小 由小到大 索引值是 (1 3 0 2 4)  非 (2 0 3 1 4)



 楼主| 发表于 2023-11-4 21:32:00 | 显示全部楼层
飞雪神光 发表于 2023-11-4 15:29
326.641 119.155 419.576 219.295 536.772 y值从小到大 (1 3 0 2 4)就是 119.155 219.295 326.641 419.57 ...

326.641 119.155 419.576 219.295 536.772这个排序表就是百位-1,实际是
↓           ↓           ↓          ↓           ↓
2           0           3          1           4  ,还是觉得有问题
 楼主| 发表于 2023-11-4 21:34:39 | 显示全部楼层
lee50310 发表于 2023-11-4 15:53
執行:Q  選取測試圖 5個數字
得到 點列表
                  (setq YYJ '((10830.8 326.641 0.0) (10830 ...

326.641 119.155 419.576 219.295 536.772
↓           ↓           ↓          ↓           ↓
2           0           3          1           4  ,实际排序这样不对吗,其实是百位-1,例子特地这么设计的,元素的索引号是这也意思吧
 楼主| 发表于 2023-11-4 21:53:42 | 显示全部楼层
hhh454 发表于 2023-11-4 18:27
点表排序、图元坐标点排序-----通吃-----再浓缩----最终版2014.2.22
http://bbs.mjtd.com/forum.php?mod=v ...

代码能力差,有点看不懂,还提到这是fsxm的扩展,也是懵的,前辈是自定了函数吗,我只需要简单的元素索引号表,不用对原数据排序。
我上传的代码是看《AutoLISP 函数参考》(明经通道翻译)里面的例子的应用,看着挺简单,还是没搞懂
发表于 2023-11-4 21:56:32 | 显示全部楼层
本帖最后由 lee50310 于 2023-11-4 22:13 编辑
jun470 发表于 2023-11-4 21:34
326.641 119.155 419.576 219.295 536.772
↓           ↓           ↓          ↓           ↓
2  ...

  sel =  (326.641 119.155 419.576 219.295 536.772)            ;; y點列表值
              ↓           ↓           ↓           ↓           ↓
索引值    0           1           2           3           4                   ;索引值是按照列表順序由 0 開始

  執行: (vl-sort-i sel '<)   ;由小排到大取出所引值

           119.155 < 219.295 < 326.641 < 419.576 < 536.772   ;; y點列表值 由小排到大
  
119.155 的索引值是 1  ,  219.295 的索引值是 3 以此類推

        故得到(1 3 0 2 4)
 楼主| 发表于 2023-11-4 22:58:07 | 显示全部楼层
lee50310 发表于 2023-11-4 21:56
sel =  (326.641 119.155 419.576 219.295 536.772)            ;; y點列表值
              ↓       ...

感谢赐教!!!这是这个意思啊,我理解错了。不过我另辟蹊径,实现了输出我要的(2 0 3 1 4) 了。就是再排序一次  (vl-sort-i n1 '<)  ,这样的结果就是我要的了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 10:48 , Processed in 0.199276 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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