找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2219|回复: 13

[原创] 对以点为索引的表排行列

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-12-6 09:21:30 | 显示全部楼层 |阅读模式

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

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

×
本函数为全部重写,效率大幅提升,初步测试 3.4W 点排序部分用时 2.x s,较原来函数提升约 4 倍,原函数为 (ybl-ent-sort 、XD::List:TableSort),参见
http://bbs.xdcad.net/forum.php?mod=viewthread&tid=669129
;;======================================
;;;调用: (Ea::List:TableSort lst row bp fuzz)     
;;;功能: 对点索引子表按点坐标排行列                                    
;;;输入: lst -- list eq. ((p1 data1) (p2 data2) .... )                                 
;;;      row -- 0 row ; 1 column                                                            
;;;      bp  -- Basepoint, 0 BottomLeft; 1 BottomRight; 2 TopRight;  3 TopLeft   
;;;      fuzz    -- Real or int (容差)                                                     
;;;输出: 排行列后的表                                                                  
;;;注意: 参数的合理性自行检查                                                           
;;=======================================
游客,本帖隐藏的内容需要积分高于 30 才可浏览,您当前积分为 0


评分

参与人数 1威望 +1 D豆 +5 贡献 +1 收起 理由
炫翔 + 1 + 5 + 1 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-12-6 09:27:13 | 显示全部楼层
几个测试 程序
XD::Pickset->TableSort 因为有求 EntityBox,在数量巨大的情况机器不够好的情况下可能会停止响应!
  1. ;;================================================================================
  2. ;;Sample
  3. (defun ss->ents        (ss / sl i el)
  4.   (setq i -1)
  5.   (while (setq e (ssname ss (setq i (1+ i))))
  6.     (setq el (cons e el))
  7.   )
  8.   el
  9. )
  10. (defun Getpoints        (ss /)
  11.   (mapcar '(lambda (x)
  12.              (list (cdr (assoc 10 (entget x))) x)
  13.            )
  14.           (ss->ents ss)
  15.   )
  16. )
  17. (defun Polyline:Make (pts tf)
  18.   (entmakex (append '((0 . "LWPOLYLINE")
  19.                       (100 . "AcDbEntity")
  20.                       (100 . "AcDbPolyline")
  21.                      )
  22.                     (list (cons 90 (1- (length pts)))
  23.                           (if tf
  24.                             '(70 . 1)
  25.                             '(70 . 0)
  26.                           )
  27.                     )
  28.                     (mapcar '(lambda (x)
  29.                                (list 10 (car x) (cadr x))
  30.                              )
  31.                             pts
  32.                     )
  33.             )
  34.   )
  35. )
  36. (defun get-utime ()
  37.   (* 86400.0 (getvar "tdusrtimer"))
  38. )
  39. ;;==========================================================================
  40. ;;test1
  41. (defun c:t1 (/ ss sl i e el lst t0 t1 t00)
  42.   (if (setq ss (ssget '((0 . "point"))))
  43.     (progn
  44.       (setq t00 (get-utime))
  45.       (setq lst (getpoints ss))
  46.       (princ "\n")
  47.       (princ "\nGet Points Used time = ")
  48.       (princ (- (get-utime) t00))
  49.       (setq t0 (get-utime))
  50.       (setq lst (Ea::List:TableSort lst 0 0 150.))
  51.       ;;(ybl-ent-sort el 0 1 150.)
  52.       (princ "\nTableSort Used time = ")
  53.       (princ (- (setq t1 (get-utime)) t0))
  54.       (princ "\nTotle Used Time = ")
  55.       (princ (- t1 t00))
  56.       (mapcar '(lambda (x)
  57.                  (if (> (length x) 1)
  58.                    (polyline:make x)
  59.                  )
  60.                )
  61.               (mapcar '(lambda (a) (mapcar 'car a)) lst)
  62.       )
  63.       (princ "\nMake Pline used time = ")
  64.       (princ (- (get-utime) t1))
  65.     )
  66.   )
  67.   (princ)
  68. )
  69. ;;test2
  70. (defun c:t3 (/ ss sl i e el lst t0 t1 t00)
  71.   (if (setq ss (ssget '((0 . "point"))))
  72.     (progn
  73.       (setq t00 (get-utime))
  74.       (setq lst (getpoints ss))
  75.       (princ "\n")
  76.       (princ "\nGet Points Used time = ")
  77.       (princ (- (get-utime) t00))
  78.       (setq t0 (get-utime))
  79.       ;;(setq lst (Ea::List:TableSort el 0 0 150.))
  80.       (setq lst (XD::List:TableSort lst 0 1 150.))
  81.       (princ "\nTableSort Used time = ")
  82.       (princ (- (setq t1 (get-utime)) t0))
  83.       (princ "\nTotle Used Time = ")
  84.       (princ (- t1 t00))
  85.       (mapcar '(lambda (x)
  86.                  (if (> (length x) 1)
  87.                    (polyline:make x)
  88.                  )
  89.                )
  90.               (mapcar '(lambda (a) (mapcar 'car a)) lst)
  91.       )
  92.       (princ "\nMake Pline used time = ")
  93.       (princ (- (get-utime) t1))
  94.     )
  95.   )
  96.   (princ)
  97. )
  98. ;;test3
  99. (defun c:t3 (/ ss sl i e el lst t0 t1 t00)
  100.   (if (setq ss (ssget '((0 . "point"))))
  101.     (progn
  102.       (setq t00 (get-utime))
  103.       (setq lst (XD::Pickset->TableSort ss 0 1 '< '<))
  104.       (princ "\nTableSort Used time = ")
  105.       (princ (- (setq t1 (get-utime)) t0))
  106.       (princ "\nTotle Used Time = ")
  107.       (princ (- t1 t00))
  108.       (mapcar '(lambda (x)
  109.                  (if (> (length x) 1)
  110.                    (polyline:make x)
  111.                  )
  112.                )
  113.               (mapcar '(lambda (a) (xdrx_getpropertyvalue a "Position")) lst)
  114.       )
  115.       (princ "\nMake Pline used time = ")
  116.       (princ (- (get-utime) t1))
  117.     )
  118.   )
  119.   (princ)
  120. )

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-12-6 09:43:50 | 显示全部楼层
eachy 发表于 2013-12-6 09:27
几个测试 程序
XD:ickset->TableSort 因为有求 EntityBox,在数量巨大的情况机器不够好的情况下可能会停 ...

应用场合各有不同吧,PICKSET_TABLESORT处理实体的。

点评

这个函数仅保留了核心的排序部分,构造表要自己另作,而且取点不同可以有不同的应用,更通用,不过构造这个点索引表要有很高的技巧  详情 回复 发表于 2013-12-6 10:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-6 10:15:57 | 显示全部楼层
newer 发表于 2013-12-6 09:43
应用场合各有不同吧,PICKSET_TABLESORT处理实体的。

这个函数仅保留了核心的排序部分,构造表要自己另作,而且取点不同可以有不同的应用,更通用,不过构造这个点索引表要有很高的技巧

点评

各种情况多写些例子给大家吧,另外做个函数发布吧。  详情 回复 发表于 2013-12-6 10:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-12-6 10:26:13 | 显示全部楼层
st788796 发表于 2013-12-6 10:15
这个函数仅保留了核心的排序部分,构造表要自己另作,而且取点不同可以有不同的应用,更通用,不过构造这 ...

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-12-6 10:35:05 | 显示全部楼层
这个和原来的 XD::List:TableSort 基本功能一样,去掉了其他方式,仅保留了点索引模式,其他方式分组使用 XD::List:GroupByIndex ,这两个函数适用不同场合,可以解决分组、排列的大部分应用,有时间把这两个函数应用做个汇总帖子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-12-6 15:40:38 | 显示全部楼层
本帖最后由 炫翔 于 2013-12-6 15:53 编辑

1.gif
  1. ;根据圆心Y值,分组连线
  2. (defun c:xx1 (/ i pts s1 ss)
  3.   (setq ss (ssget '((0 . "circle"))))
  4.   (setq i (sslength ss))
  5.   (while (setq s1 (ssname ss (setq i (1- i))))
  6.     (setq pts (cons (list (cdr (assoc 10 (entget s1))) s1) pts))
  7.   )
  8.   (setq pts (Ea::List:TableSort pts 0 0 0.01))
  9.   (mapcar '(lambda (x)
  10.     (if (> (length x) 1)(polyline:make x t)))
  11.     (mapcar '(lambda (a)(mapcar 'car a))pts)
  12.   )
  13. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-12-6 16:12:27 | 显示全部楼层
2.gif
  1. ;根据圆心Y值,分组改颜色
  2. (defun c:xx ( / i lst s1 ss)
  3.   (setq ss (ssget '((0 . "circle"))))
  4.   (setq i (sslength ss))
  5.   (while (setq s1 (ssname ss (setq i (1- i))))
  6.     (setq lst (cons (list (cdr (assoc 10 (entget s1))) s1) lst))
  7.   )
  8.   (setq lst (ea::list:tablesort lst 0 0 0.01))
  9.   (foreach x (mapcar '(lambda (a)(mapcar 'cadr a))lst)
  10.     (setq i 1)
  11.     (foreach y x
  12.      (vla-put-color (vlax-ename->vla-object y) (setq i(1+ i)))
  13.     )
  14.   )
  15. )



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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-12-6 16:57:01 | 显示全部楼层
更正几处错误, 验证程序
  1. (defun c:t1 (/ ss sl i e el lst t0 t1 t00 i)
  2.   (if (setq ss (ssget '((0 . "point"))))
  3.     (progn
  4.       (setq t00 (get-utime))
  5.       (setq lst (getpoints ss))
  6.       (princ "\n")
  7.       (princ "\nGet Points Used time = ")
  8.       (princ (- (get-utime) t00))
  9.       (setq t0 (get-utime))
  10.       (setq lst (Ea::List:TableSort lst 0 0 0.1))
  11.       ;;(ybl-ent-sort el 0 1 150.)
  12.       (princ "\nTableSort Used time = ")
  13.       (princ (- (setq t1 (get-utime)) t0))
  14.       (princ "\nTotle Used Time = ")
  15.       (princ (- t1 t00))
  16.       (setq i 1)
  17.       (polyline:make
  18.         (apply
  19.           'append
  20.           (mapcar '(lambda (x)
  21.                      (if (zerop i)
  22.                        (progn
  23.                          (setq i (1+ i))
  24.                          (reverse x)
  25.                        )
  26.                        (progn
  27.                          (setq i (1- i))
  28.                          x
  29.                        )
  30.                      )
  31.                    )
  32.                   (mapcar '(lambda (a) (mapcar 'car a)) lst)
  33.           )
  34.         )
  35.         nil
  36.       )
  37.       (princ "\nMake Pline used time = ")
  38.       (princ (- (get-utime) t1))
  39.     )
  40.   )
  41.   (princ)
  42. )



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

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-12-6 17:24:43 | 显示全部楼层
本帖最后由 炫翔 于 2013-12-6 17:29 编辑

  1. ;根据圆心X值,分组改颜色
  2. (defun c:xx ( / i lst s1 ss)
  3.   (setq ss (ssget '((0 . "circle"))))
  4.   (setq i (sslength ss))
  5.   (while (setq s1 (ssname ss (setq i (1- i))))
  6.     (setq lst (cons (list (cdr (assoc 10 (entget s1))) s1) lst))
  7.   )
  8.   (setq lst (ea::list:tablesort lst 1 0 0.01))
  9.   (foreach x (mapcar '(lambda (a)(mapcar 'cadr a))lst)
  10.     (setq i 1)
  11.     (foreach y x
  12.      (vla-put-color (vlax-ename->vla-object y) (setq i(1+ i)))
  13.     )
  14.   )
  15. )
  16. ;根据圆心X值,分组连线
  17. (defun c:xx (/ i pts s1 ss)
  18.   (setq ss (ssget '((0 . "circle"))))
  19.   (setq i (sslength ss))
  20.   (while (setq s1 (ssname ss (setq i (1- i))))
  21.     (setq pts (cons (list (cdr (assoc 10 (entget s1))) s1) pts))
  22.   )
  23.   (setq pts (Ea::List:TableSort pts 1 0 0.01))
  24.   (mapcar '(lambda (x)
  25.     (if (> (length x) 1)(polyline:make x t)))
  26.     (mapcar '(lambda (a)(mapcar 'car a))pts)
  27.   )
  28. )




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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-12-6 19:37:12 | 显示全部楼层
终版,验证程序

  1. (defun c:t1 (/ ss sl i e el lst t0 t1 t00 i pts ms)
  2.   (if (setq ss (ssget '((0 . "point"))))
  3.     (progn
  4.       (setq t00 (get-utime))
  5.       (setq lst (getpoints ss))
  6.       (princ "\n")
  7.       (princ "\nGet Points Used time = ")
  8.       (princ (- (get-utime) t00))
  9.       (setq t0 (get-utime))
  10.       (setq lst (Ea::List:TableSort lst 1 3 0.1))
  11.       ;;(ybl-ent-sort el 0 1 150.)
  12.       (princ "\nTableSort Used time = ")
  13.       (princ (- (setq t1 (get-utime)) t0))
  14.       (princ "\nTotle Used Time = ")
  15.       (princ (- t1 t00))
  16.       (setq i 1)
  17.       (polyline:make
  18.         (setq pts (apply
  19.                     'append
  20.                     (mapcar '(lambda (x)
  21.                                (if (zerop i)
  22.                                  (progn
  23.                                    (setq i (1+ i))
  24.                                    (reverse x)
  25.                                  )
  26.                                  (progn
  27.                                    (setq i (1- i))
  28.                                    x
  29.                                  )
  30.                                )
  31.                              )
  32.                             (mapcar '(lambda (a) (mapcar 'car a)) lst)
  33.                     )
  34.                   )
  35.         )
  36.         nil
  37.       )
  38.       (princ "\nMake Pline used time = ")
  39.       (setq i  0
  40.             ms (vla-get-modelspace
  41.                  (vla-get-activedocument (vlax-get-acad-object))
  42.                )
  43.       )
  44.       (mapcar '(lambda (x)
  45.                  (vla-addtext
  46.                    ms
  47.                    (itoa i)
  48.                    (vlax-3d-point x)
  49.                    (getvar "textsize")
  50.                  )
  51.                  (setq i (1+ i))
  52.                )
  53.               pts
  54.       )
  55.       (princ (- (get-utime) t1))
  56.     )
  57.   )
  58.   (princ)
  59. )

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

使用道具 举报

发表于 2013-12-7 01:31:47 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-12-7 01:57 编辑

一楼有个笔误 (lambda (e1 e2) (< (cadar e1) (cadar e1))) 应为 (lambda (e1 e2) (< (cadar e1) (cadar e2)))
八种基本方式之一
  1. (defun c:tt (/ ss ss1 pts i h npts pl)
  2.   (if (setq ss (ssget '((0 . "line"))))
  3.     (progn
  4.       (setq ss1
  5.              (xdrx_curve_intersectbreak
  6.                (xdrx_entity_transformedcopy ss (xdrx_matrix_identity 3))
  7.              );_副本交点断开
  8.       )
  9.       (setq pts        (cdr
  10.                   (vl-sort (xdrx_geom_searchregions ss1);_查找联通区域
  11.                            '(lambda (l1 l2)
  12.                               (> (apply 'xdrx_points_area l1)
  13.                                  (apply 'xdrx_points_area l2)
  14.                               )
  15.                             )
  16.                   );_按面积排序
  17.                 );_去掉最外围框
  18.             pts        (mapcar        '(lambda (p)
  19.                            (list (apply 'xdrx_points_centroid p) 0)
  20.                          )
  21.                         pts
  22.                 );_取每个区域中心
  23.       )
  24.       (xdrx_entity_delete ss1);_删除副本
  25.       ;;按行排
  26.       (setq npts (XD::List:TableSort pts 0 0 1.))
  27.       ;;(setq npts (XD::List:TableSort pts 0 1 1.))
  28.       ;;(setq npts (XD::List:TableSort pts 0 2 1.))
  29.       ;;(setq npts (XD::List:TableSort pts 0 3 1.))
  30.       ;;按列排
  31.       ;;(setq npts (XD::List:TableSort pts 1 0 1.))
  32.       ;;(setq npts (XD::List:TableSort pts 1 1 1.))
  33.       ;;(setq npts (XD::List:TableSort pts 1 2 1.))
  34.       ;;(setq npts (XD::List:TableSort pts 1 3 1.))
  35.       (setq i 1
  36.             h (getvar "textsize")
  37.       )
  38.       (mapcar '(lambda (x)
  39.                  (mapcar '(lambda (p / txt)
  40.                             (setq txt (xdrx_text_make
  41.                                         p
  42.                                         (itoa i)
  43.                                         h
  44.                                         0.
  45.                                       )
  46.                             )
  47.                             (xdrx_text_setvermode txt 2)
  48.                             (xdrx_text_sethozmode txt 1)
  49.                             (xdrx_text_setalignmentpoint txt p)
  50.                             (xdrx_entity_setcolor txt 2)
  51.                             (setq i (1+ i))
  52.                           )
  53.                          x
  54.                  )
  55.                )
  56.               (mapcar '(lambda (a) (mapcar 'car a)) npts)
  57.       )
  58.       (setq pl
  59.              (apply 'xdrx_polyline_make
  60.                     (apply 'append (mapcar '(lambda (a) (mapcar 'car a)) npts))
  61.              )
  62.       )
  63.       (xdrx_entity_setcolor pl 1)
  64.     )
  65.   )
  66.   (princ)
  67. )
tablesort.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-7 07:33:37 来自手机 | 显示全部楼层
1 2 及 1 3组合有问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-12-7 11:09:21 | 显示全部楼层
本帖最后由 炫翔 于 2013-12-7 11:10 编辑

1.gif
  1. ;圆按行列,4点基点连线
  2. (defun c:xx()
  3. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 0 0)
  4. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 0 1)
  5. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 0 2)
  6. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 0 3)
  7. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 1 0)
  8. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 1 1)
  9. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 1 2)
  10. (xx-lst-pline (ssget ":s" '((0 . "circle"))) 1 3)
  11. )

  12. (defun xx-lst-pline (ss mode1 mode2 / i lst pts s1)
  13.   (setq i (sslength ss) pts nil)
  14.   (while (setq s1 (ssname ss (setq i (1- i))))
  15.     (setq pts (cons (list (cdr (assoc 10 (entget s1))) s1) pts))
  16.   )
  17.   (setq pts (ea::list:tablesort pts mode1 mode2 0.01))
  18.    (foreach y pts
  19.      (foreach a y
  20.        (setq lst(cons (car a) lst))
  21.      )
  22.    )
  23.    (xx-mk-pline-pts (reverse lst) nil)
  24.   (princ)
  25. )

  26. (defun xx-mk-pline-pts (lst Close-tnil)
  27.    (entmake
  28.       (append   
  29.          (list
  30.            '(0 . "lwpolyline")
  31.            '(100 . "AcDbEntity")
  32.            '(100 . "AcDbPolyline")
  33.            (cons 90 (length lst))
  34.            (cons 70 (if Close-tnil 1 0))
  35.          )
  36.       (mapcar (function (lambda (pt)(cons 10 pt))) lst )
  37.      )
  38.    )
  39. )

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 05:17 , Processed in 0.387975 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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