找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4526|回复: 11

[求助] 序列排序 vl-sort 代码无法排序是怎么回事

[复制链接]
发表于 2020-5-12 00:42:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 bh89757 于 2020-5-12 00:45 编辑

(defun c:vv ()
  (vl-load-com)
(setq dimzinold (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
  (if (progn
           (setq EP1 (entsel"点取属性块中页码的位置:\n"))
           (setq EG1 (cdr (assoc 0 (entget (car EP1)))))
           (if (= EG1 "INSERT")
               (progn (setq EG2 (car (nentselp (cadr EP1))))
                   (if (= (cdr (assoc 0 (entget EG2))) "ATTRIB")
                       (setq blktag (cdr (assoc 2 (entget EG2)))) ;标记
                   )
                   (setq EP1st (entget (car EP1)))
                   (setq blkname (assoc 2 EP1st))   
               )
          )
        )
         (princ (strcat"  块名为-->" (cdr blkname) "   标记为-->" blktag "\n"))
         (progn(princ "  必须选择属性块!")(exit))
         )
  ;开始选择页码块并修改
  (setq prefix (getstring "请输入前缀:"))
  (if (=  str0  nil) (setq str0 1)) (initget 6)
  (setq str (getint (strcat "请输入一个起始整数<" (rtos str0 2 0) ">:")))
  (if (= str  nil)(setq str  str0))

  (initget "H V S ")(setq GETK (getkword "排序方式:\n [横向优先(H)/竖向优先(V)/选择优先(S)]: <H> "))
  (princ ">>选择批量修改页码的对象...")
  (setq ss (ssget  (cons blkname slist)))
  (setq index0 0 index (sslength ss) sslist '())         
  (repeat index
    (setq sslist (cons (ssname ss index0) sslist))
    (setq index0 (1+ index0))
  )
  ;开始构建图元点位表
  (setq index0 0  sslist-ptl '() tmp-pt '())         
  (repeat index
    (setq tmp-pt (cons (nth index0 sslist) (cons (cdr(assoc 10 (entget (nth index0 sslist)))) tmp-pt)))
    (setq sslist-ptl (cons tmp-pt sslist-ptl))
    (setq tmp-pt '())
    (setq index0 (1+ index0))
  )
  ;开始排序
    (setq XZS  
        (vl-sort
   sslist-ptl
   '(lambda (s1 s2)
    (< (cadr(caddr s1)) (cadr(caddr s2))) ) )
                )   
)


附件附上选择的图框,选中后查看xzs 序列没有按顺序排列,求大神指导一下

Drawing11.zip

26.77 KB, 下载次数: 0, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2020-5-12 09:44:55 | 显示全部楼层
有没有大哥能帮忙看看为啥无法排序a/(ㄒoㄒ)/~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-5-12 18:07:41 | 显示全部楼层
只给程序不好看清你的逻辑,具体说说,你要拍什么序,进入VL-SORT时候,表是什么样的,你要什么结果
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 19:04:15 | 显示全部楼层
Lisphk 发表于 2020-5-12 18:07
只给程序不好看清你的逻辑,具体说说,你要拍什么序,进入VL-SORT时候,表是什么样的,你要什么结果

   我希望的是通过如下代码
(vl-sort
   sslist-ptl
   '(lambda (s1 s2)
    (< (cadr(caddr s1)) (cadr(caddr s2))) ) )
                )   
对列表sslist-ptl 中的序列先按x方向排序,然后对于x坐标一致的进行y方向排序。但是现在我按照x方向排序发现生成的序列并没有变化,不知道是哪里出了错误。昨晚改了一晚上没发现错误,

点评

你把 SSLIST-PTL 的内容,帖上论坛,帮你看看  详情 回复 发表于 2020-5-12 19:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-5-12 19:08:23 | 显示全部楼层
bh89757 发表于 2020-5-12 19:04
我希望的是通过如下代码
(vl-sort
   sslist-ptl

你把 SSLIST-PTL 的内容,帖上论坛,帮你看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 19:09:18 | 显示全部楼层
SSLIST-PTL 其实是图元名和坐标组合的列表 ((<图元名: -2676e0> (3425.61 940.021 0.0)) (<图元名: -267710> (3320.61 940.021 0.0)))

点评

你这个表的内容不足,你得有相同的多个,X有相同的,Y也有相同的,多个,才好测试 你画好实体,然后执行你的程序,然后把 sslist-ptl 在帖上来  详情 回复 发表于 2020-5-12 19:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 19:12:48 | 显示全部楼层
newer 发表于 2020-5-12 19:08
你把 SSLIST-PTL 的内容,帖上论坛,帮你看看

((<图元名: -2676e0> (3425.61 940.021 0.0)) (<图元名: -267710> (3320.61 940.021 0.0))) 这样的序列,我其实是湘做个图框编页码的程序,但是选择图框后的列表sslist-ptl 排序没变化,卡在这了。

点评

你去看看这两个函数,去理解下 (XD::Pickset:TableSort)基于行、列的(支持UCS)的实体任意排序函数27 个回复 - 6881 次查看**** 本内容被作者隐藏 ****2013-7-2 19:04 - Lispboy - 开源函数库 [*](XD::List:Gr  详情 回复 发表于 2020-5-12 19:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-5-12 19:15:22 | 显示全部楼层
bh89757 发表于 2020-5-12 19:09
SSLIST-PTL 其实是图元名和坐标组合的列表 (( (3425.61 940.021 0.0)) ( (3320.61 940.021 0.0)))

你这个表的内容不足,你得有相同的多个,X有相同的,Y也有相同的,多个,才好测试
你画好实体,然后执行你的程序,然后把 sslist-ptl 在帖上来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-5-12 19:16:57 | 显示全部楼层
bh89757 发表于 2020-5-12 19:12
(( (3425.61 940.021 0.0)) ( (3320.61 940.021 0.0))) 这样的序列,我其实是湘做个图框编页码的程序,但 ...

你去看看这两个函数,去理解下

(XD::Pickset:TableSort)基于行、列的(支持UCS)的实体任意排序函数
27 个回复 - 6881 次查看
**** 本内容被作者隐藏 ****
2013-7-2 19:04 - Lispboy - 开源函数库


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 19:24:09 | 显示全部楼层
newer 发表于 2020-5-12 19:16
你去看看这两个函数,去理解下

(XD::Pickset:TableSort)基于行、列的(支持UCS)的实体任意排序函数27  ...

(SETQ CC '((<图元名: -2676e0> (3425.61 940.021 0.0)) (<图元名: -267710> (3320.61 940.021
0.0)) (<图元名: -2672b8> (3753.0 953.273 0.0)) (<图元名: -2676b0> (3560.51 874.615
0.0))))
(SETQ BB (vl-sort
   CC
   '(lambda (s1 s2)
    (< (cadr(caddr s1)) (cadr(caddr s2))) ) )
                )
谢谢啊,大哥你可以试试这个,不知道为啥不能排序a

点评

改成这样就行了, lambda里面的比较,你要拿出表中的一个元素,然后去提取cadr是提取坐标,在car提取x,组合就是caadr (("" (3425.61 940.021 0.0)) ("" (3320.61 940.021 0.0)) ("" (3753.0 953.273 0.0))  详情 回复 发表于 2020-5-12 19:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-5-12 19:31:30 | 显示全部楼层
bh89757 发表于 2020-5-12 19:24
(SETQ CC '(( (3425.61 940.021 0.0)) ( (3320.61 940.021
0.0)) ( (3753.0 953.273 0.0)) ( (3560.51  ...


改成这样就行了, lambda里面的比较,你要拿出表中的一个元素,然后去提取cadr是提取坐标,在car提取x,组合就是caadr

  1. (SETQ BB
  2.        (vl-sort        CC
  3.                 '(lambda (s1 s2) (< (caadr s1) (caadr s2)))
  4.        )
  5. )


(("<图元名: -2676e0>" (3425.61 940.021 0.0)) ("<图元名: -267710>" (3320.61 940.021 0.0)) ("<图元名: -2672b8>" (3753.0 953.273 0.0)) ("<图元名: -2676b0>" (3560.51 874.615 0.0)))
_$

(("<图元名: -267710>" (3320.61 940.021 0.0)) ("<图元名: -2676e0>" (3425.61 940.021 0.0)) ("<图元名: -2676b0>" (3560.51 874.615 0.0)) ("<图元名: -2672b8>" (3753.0 953.273 0.0)))
_$
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 19:34:14 | 显示全部楼层
newer 发表于 2020-5-12 19:31
改成这样就行了, lambda里面的比较,你要拿出表中的一个元素,然后去提取cadr是提取坐标,在car提取x, ...

哦哦,我知道了,谢谢a
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 06:25 , Processed in 0.446034 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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