匹配所选t的排序顺序
我想选择多个文本并在x坐标中对其排序,并将排序顺序与新的文本选择集(红色)匹配。然后从文本的插入点(红色)生成多段线。请参阅下图。
谢谢大家
. 从您显示的数组中,我看不到图像上的文本按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)
)
)
) rrulep公司
完成。
SortTEXT。拉链 另一个:
(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'
这正是我想要的。
完美的
谢谢李, 不客气
页:
[1]