rrulep 发表于 2022-7-5 16:31:18

匹配所选t的排序顺序

我想选择多个文本并在x坐标中对其排序,并将排序顺序与新的文本选择集(红色)匹配。然后从文本的插入点(红色)生成多段线。
 
请参阅下图。
 
谢谢大家
.

Grrr 发表于 2022-7-5 16:46:30

从您显示的数组中,我看不到图像上的文本按X或Y排序。
要么是:
[列表]
[*]A1 A2 A4 A3-降序Y排序
[*]A3 A4 A2 A1-升序X排序
[/列表]
当然,上述情况可以逆转。
 
Soo考虑一下:

(defun C:test ( / c e o L )
(setq c (cdr (assoc 62 (tblsearch "LAYER" (getvar 'clayer)))))
(setvar 'errno 0)
(while (/= 52 (getvar 'errno)) ; Lee Mac's structure to prompt for (entsel)
   (setq e (car (nentsel "\nPick text <exit>: ")))
   (cond
   ( (= 7 (getvar 'errno)) (setvar 'errno 0) )
   (e (setq o (vlax-ename->vla-object e))
       (cond
         ( (not (vlax-property-available-p o 'InsertionPoint)) (princ "\nInvalid object.") )
         ( (not (setq L (cons (vlax-get o 'InsertionPoint) L))) )
         ( (<= 2 (length L)) (redraw)
         (grvecs (apply 'append (mapcar '(lambda (a b) (list c a b)) L (cdr L))))
         )
       ); cond
   ); e
   ); cond
); while
(and (<= 2 (length L)) (LWPoly (LM:UniqueFuzz L 1e-3) 0) (redraw))
(princ)
); defun

;; Unique with Fuzz-Lee Mac
;; Returns a list with all elements considered duplicate to
;; a given tolerance removed.

(defun LM:UniqueFuzz ( l f )
(if l
   (cons (car l)
   (LM:UniqueFuzz
       (vl-remove-if
         (function (lambda ( x ) (equal x (car l) f)))
         (cdr l)
       )
       f
   )
   )
)
)

(defun LWPoly (lst cls) ; Lee Mac again
(entmakex
   (append
   (list
       (cons 0 "LWPOLYLINE")
       (cons 100 "AcDbEntity")
       (cons 100 "AcDbPolyline")
       (cons 90 (length lst))
       (cons 70 cls)
   )
   (mapcar (function (lambda (p) (cons 10 p))) lst)
   )
)
)

BIGAL 发表于 2022-7-5 16:54:18

rrulep公司
完成。

SortTEXT。拉链

maratovich 发表于 2022-7-5 17:10:46

另一个:
(defun c:textpoly(/ass ent enx idx lst ss1 ss2 str vts xco)(princ“\n选择定义排序顺序的文本:”)(if(setq ss1(ssget’((0。“text,MTEXT”)))(progn(setq ss2(ssget“_X”(list’(000。“text,MTEXT”))(if(=1(getvar’cvport))(cons 410(getvar’ctab))(410。“Model”)))))(repeat(setq idx(sslength ss1))(setq enx(entget(ssname ss1(setq idx(1-idx)))str(cdr(assoc 1 enx)))(或(assoc str lst)(setq lst(cons(cons str(cadr(assoc 10 enx)))lst)))(repeat(setq idx(sslength ss2))(cond((ssmemb(setq ent(ssname ss2(setq idx(1-idx)))ss1))((setq ass(assoc(cdr(assoc 1(setq enx(entget ent)))lst))(setq xco(cons(cdr ass)xco)vts(cons(cdr(assoc 10 enx))vts)lst(vl remove ass lst)))(entmake(append(list’(000。“LWPOLYLINE”)'(100。“AcDbEntity”)'(100。“AcDbPolyline”)(cons 90(length vts))'(070.0))(mapcar’(lambda(n)(cons 10(nth n vts)))(vl-sort-i xco'

Lee Mac 发表于 2022-7-5 17:15:14

 
这正是我想要的。
完美的
 
 
 
谢谢李,

rrulep 发表于 2022-7-5 17:30:56

不客气

Lee Mac 发表于 2022-7-5 17:33:18

页: [1]
查看完整版本: 匹配所选t的排序顺序