根据选择集对象的坐标排序选择集
根据选择集对象XY坐标排序,左右左优先,上下上优先。
A1 A2 A3 A4 A5 从左到右 ,所以排序是A1~5 A6在A5 下边 所以 A1~6
A7最右边 所以 在最后。
要求代码是 ,根据对象坐标来排序。
-----------------------------
想要的结果是:
本帖最后由 自贡黄明儒 于 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: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)))
)
)
(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 (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)
) 很好的帖子,顶一下! 自贡黄明儒 发表于 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呢
(HH:ssPts:Sort (ssget) "Yx" 0.01);大Y表示y坐标从大到小,Y在前表示优先 自贡黄明儒 发表于 2013-10-19 15:28 static/image/common/back.gif
(HH:ssPts:Sort (ssget) "Yx" 0.01);大Y表示y坐标从大到小,Y在前表示优先
不行哦~~
本帖最后由 自贡黄明儒 于 2013-10-19 15:47 编辑
weiqi 发表于 2013-10-19 15:37 http://bbs.mjtd.com/static/image/common/back.gif
不行哦~~
误差取大一些,满足你的需求
从你的截图来看,误差应为字高的1倍多
页:
[1]
2