weiqi 发表于 2013-10-18 01:13:58

根据选择集对象的坐标排序选择集






根据选择集对象XY坐标排序,左右左优先,上下上优先。
A1 A2 A3 A4 A5 从左到右 ,所以排序是A1~5   A6在A5 下边 所以 A1~6
A7最右边 所以 在最后。
要求代码是 ,根据对象坐标来排序。






-----------------------------

想要的结果是:



自贡黄明儒 发表于 2013-10-18 01:13:59

本帖最后由 自贡黄明儒 于 2013-10-19 09:13 编辑

http://bbs.mjtd.com/thread-107489-1-1.html
(HH:ssPts:Sort (ssget) "xY" 0.01);1 小x表示从左到右,2 Y表示从上到下,3 xY表示先排序x坐标,然后排序y坐标

Andyhon 发表于 2013-10-18 09:00:40

本帖最后由 Andyhon 于 2013-10-18 09:31 编辑

For test only
(defun x+y- (Lst3)
   (vl-sort
   (vl-sort
       Lst3
       (function (lambda (x y) (< (caaddr x) (caaddr y))))
   )
   (function (lambda (x y) (< (caadr x) (caadr y))))
   )
)

(defun c:AA (/ ssLst)
(setq xza1 (ssget (list (cons 0 "TEXT,MTEXT"))))
(setq pt (getpoint "\n输出基点:"))
(setq len1 (sslength xza1)
      i1   (1- (sslength xza1))
)
(repeat len1
    (setq en1 (ssname xza1 i1)
          dat (entget en1)
      ssLst (cons (list (dxf 1 dat) (dxf 10 dat)) ssLst)
         i1 (1- i1)
    )
)

(foreach txt (mapcar 'car (x+y- ssLst))
    (entmake
      (list
      '(0 . "TEXT")
      (cons 1 txt)
      (cons 10 pt)
      '(7 . "HZ")
      '(62 . 110)
      '(8 . "AA")
      '(40 . 400.000)
      )
    )
    (setq pt (list (car pt) (- (cadr pt) 500) (caddr pt)))
)
)

Andyhon 发表于 2013-10-18 22:17:24

(defun dxf .....)
Ref:
http://bbs.mjtd.com/thread-4799-1-1.html
http://bbs.mjtd.com/thread-347-1-1.html
http://bbs.mjtd.com/thread-106877-1-1.html

xyp1964 发表于 2013-10-18 23:55:50

(defun c:tt ()
(if (and (setq ss (ssget '((0 . "text"))))
           (setq p1 (getpoint "\n基点<退出>: "))
      )
    (progn
      (setq lst        (xyp-Sort ss 10 "Y-max")
          lst        (xyp-Sort-Plist lst 5)
          lst        (mapcar 'cdr lst)
      )
      (foreach s1 lst
        (xyp-copymove s1 (xyp-9pt s1 5) p1)
        (setq p1 (polar p1 (* pi 1.5) 600))
      )
    )
)
(princ)
)

vlisp2012 发表于 2013-10-19 09:00:34

很好的帖子,顶一下!

weiqi 发表于 2013-10-19 14:46:40

自贡黄明儒 发表于 2013-10-18 01:13 static/image/common/back.gif
http://bbs.mjtd.com/thread-107489-1-1.html
(HH:ssPts:Sort (ssget) "xY" 0.01);1 小x表示从左到右,2 Y ...


自贡兄~这样怎么排成 A1 ~A9呢

自贡黄明儒 发表于 2013-10-19 15:28:58

(HH:ssPts:Sort (ssget) "Yx" 0.01);大Y表示y坐标从大到小,Y在前表示优先

weiqi 发表于 2013-10-19 15:37:54

自贡黄明儒 发表于 2013-10-19 15:28 static/image/common/back.gif
(HH:ssPts:Sort (ssget) "Yx" 0.01);大Y表示y坐标从大到小,Y在前表示优先



不行哦~~


自贡黄明儒 发表于 2013-10-19 15:43:59

本帖最后由 自贡黄明儒 于 2013-10-19 15:47 编辑

weiqi 发表于 2013-10-19 15:37 http://bbs.mjtd.com/static/image/common/back.gif
不行哦~~

误差取大一些,满足你的需求
从你的截图来看,误差应为字高的1倍多
页: [1] 2
查看完整版本: 根据选择集对象的坐标排序选择集