明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 924|回复: 6

[提问] 关于ssget "F" 选择排序的问题。

[复制链接]
发表于 2019-10-5 15:28 | 显示全部楼层 |阅读模式
本帖最后由 kanxiaokan 于 2019-10-5 15:41 编辑

用 ssget "F" 选择的圆排序有问题。图二中圆孔密集地方数字不是按顺序排序。比如 4 5 6 1 2 3 7 8 9 10 11..... 实际需要 1 2 3 4 5 6 7 8....
这个问题怎么处理?
部分代码如下:
(setq
                 ss (ssget
                      "F"
                      (list (vlax-get obj 'StartPoint)
                            (vlax-get obj 'EndPoint)
                      )
                      (list '(0 . "CIRCLE") (cons 8 (vlax-get obj 'Layer)))
                    )
               )               (repeat (sslength ss)
                 (setq e2 (ssname ss j))
                 (setq o (cdr (assoc 10 (entget e2))))
                 (entmake (list        (cons 0 "TEXT")
                                (cons 8 "BJS")
                                (cons 10 o)
                                (cons 40 0.5)
                                (cons 1 (itoa ii))
                          )
                 )
                 (setq ii (1+ ii))


本帖子中包含更多资源

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

x
发表于 2019-10-5 18:42 来自手机 | 显示全部楼层
间距太小,如需排序,请程序里进行排序
 楼主| 发表于 2019-10-7 07:58 | 显示全部楼层
言戲無軍 发表于 2019-10-5 18:42
间距太小,如需排序,请程序里进行排序

谢谢回复,已经解决问题了
发表于 2019-10-7 10:46 来自手机 | 显示全部楼层
kanxiaokan 发表于 2019-10-7 07:58
谢谢回复,已经解决问题了

怎么解决的
 楼主| 发表于 2019-10-7 12:15 | 显示全部楼层

以中心为基点,按Y和X的大小排序。
发表于 2019-10-10 18:13 | 显示全部楼层
;;17 [功能] 点表排序(141差)
;;ssPts: 1 选择集,返回图元列表
;;    2 点表(1到n维 1维时key只能是x或X),返回点表
;;   3 图元列表,返回图元列表
;;       4 字符列表或者数值列表
;;Key: "xyzXYZ"任意组合,例如"yX",y在前表示y坐标优先,小y表示从小到大(注:二维点时,不能有z)
;;FUZZ: 允许误差
;;注:点表可以1到n维混合,Key长度不大于点的最小维数。
;;示例1 (HH:ssPts:Sort (ssget) "YxZ" 0.5);返回(<Entity name: 7ef7b3a8> <Entity name: 7ef7b3a0>)
;;示例2 (HH:ssPts:Sort (list '(2 3) '(3 5)) "Yx" 0.5);返回((3 5) (2 3))
;;示例3 (HH:ssPts:Sort '(<Entity name: 7ef79a28> <Entity name: 7ef79a10>) "YxZ" 0.5)
;;示例4 (HH:ssPts:Sort (list "DF" "ZX" "A" "DD" "A") "X" 1)=>("ZX" "DF" "DD" "A" "A")
;;示例5 (HH:ssPts:Sort (list 5 8 5.0 9 5) "X" 1)=>(9 8 5 5.0)
;;本程序是在fsxm的扩展 自贡黄明儒 2014年3月22日
(defun HH:ssPts:Sort (ssPts KEY FUZZ / E EN FUN LST N)
  ;;1 点列表排序
  (defun sortpts (PTS FUN xyz FUZZ)
    (vl-sort pts
      '(lambda (a b)
  (if (not (equal (xyz a) (xyz b) fuzz))
    (fun (xyz a) (xyz b))
  )
       )
    )
  )
  ;;2 排序先后
  (defun sortpts1 (PTS KEY FUZZ)
    (setq Key (vl-string->list Key))
    (foreach xyz (reverse Key)
      (cond ((< xyz 100)
      (setq fun >)
      (setq xyz (nth (- xyz 88) (list car cadr caddr)))
     )
     (T
      (setq fun <)
      (setq xyz (nth (- xyz 120) (list car cadr caddr)))
     )
      )
      (setq Pts (sortpts Pts fun xyz fuzz))
    )
  )
  ;;3 本程序主程序
  (cond
    ((= (type ssPts) 'PICKSET)
     (repeat (setq n (sslength ssPts))
       (if (and (setq e (ssname ssPts (setq n (1- n))))
  (setq en (entget e))
    )
  (setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
       )
     )
     (mapcar 'last (sortpts1 lst KEY FUZZ))
    )
    ((Listp ssPts)
      (cond
((vl-consp (car ssPts)) (sortpts1 ssPts KEY FUZZ))
((= (type (car ssPts)) 'ENAME)
  (foreach e ssPts
    (if (setq en (entget e))
      (setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
    )
  )
  (mapcar 'last (sortpts1 lst KEY FUZZ))
)
(T
  (cond ((equal key "X") (vl-sort ssPts '>))
        ((equal key "x") (vl-sort ssPts '<))
  )
)
      )
    )   
  )
)

 楼主| 发表于 2019-10-11 15:01 | 显示全部楼层
wyl219 发表于 2019-10-10 18:13
;;17 [功能] 点表排序(141差)
;;ssPts: 1 选择集,返回图元列表
;;    2 点表(1到n维 1维时key只能是x或X ...

很感谢!!!学习!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 04:53 , Processed in 0.619221 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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