各位大佬看一下。有圆圈围成的文字,能不能框选这些,合并圆圈内的文字,原来的文...
本帖最后由 664571221 于 2024-10-12 11:43 编辑各位大佬看一下。有圆圈围成的文字,能不能框选这些,合并圆圈内的文字,原来的文字不变,在边上生成一个新的合并的文字比如P1这个文字,在边上生成一个P*1这样的文字,批量选择这些圆和文字
本帖最后由 vitalgg 于 2024-10-12 14:58 编辑
http://s3.atlisp.cn/static/videos/circle-text.mp4
能。
步骤:
1、批量选圆
2、生成圆上8点。ssget 围栏选文字。
3、文字从上到下排序,合并文字
(setq ents-circle (pickset:to-list (ssget '((0 . "circle")))))
(foreach
circle% ents-circle
;;生成8分围栏点
(setq pts (curve:circle2pts circle% 8))
;; 合并文字
(if (setq txts(pickset:to-list (ssget "cp" pts '((0 . "text")))))
(progn
(entity:make-text
(string:from-list
(mapcar '(lambda(x)
(entity:getdxf x 1))
(pickset:sort
txts
"Yx"
0))
"-")
(polar
(entity:getdxf circle% 10)
0
(entity:getdxf circle% 40))
(* 0.3(entity:getdxf circle% 40))
0 0.72 0 "lb")
)))
运行以上代码,需@lisp函数库支持,扫码了解更多。
http://bbs.mjtd.com/data/attachment/forum/202409/24/214927kize9bamimb4c40v.png
本帖最后由 韩飞翔 于 2024-10-12 18:32 编辑
嗯,你说的是圆结果是多段线并非真的圆
(defun c:tt(/ a1 a2 a3 i lst lst1 s1 ss ssa)
(xyp-start)
(setq
ss (ssget '((0 . "CIRCLE,LWPOLYLINE")))
lst (xyp-ss2list ss)
i -1
)
(while (< (setq i (1+ i)) (length lst))
(setq
s1 (nth i lst)
p (polar (xyp-9pt s1 6) 0 200)
ssa (ssget "c" (xyp-9pt s1 1) (xyp-9pt s1 9) '((0 . "TEXT")))
)
(cond
((and (= 2 (sslength ssa)) (= "CIRCLE" (xyp-dxf 0 s1)))
(setq
lst1 (xyp-ss2list ssa)
lst1 (vl-sort lst1 '(lambda(x y) (> (cadr (xyp-dxf 10 x)) (cadr (xyp-dxf 10 y)))))
a1 (xyp-dxf 1 (car lst1))
a2 (xyp-dxf 1 (cadr lst1))
a3 (strcat a1 "-" a2)
)
(xyp-Add-Text a3 p (xyp-dxf 40 (car lst1)))
)
((and (= 2 (sslength ssa)) (= "LWPOLYLINE" (xyp-dxf 0 s1)) (= 1 (xyp-dxf 70 s1)))
(setq
lst1 (xyp-ss2list ssa)
lst1 (vl-sort lst1 '(lambda(x y) (> (cadr (xyp-dxf 10 x)) (cadr (xyp-dxf 10 y)))))
a1 (xyp-dxf 1 (car lst1))
a2 (xyp-dxf 1 (cadr lst1))
a3 (strcat a1 "-" a2)
)
(xyp-Add-Text a3 p (xyp-dxf 40 (car lst1)))
)
)
)
(xyp-end)
) 用院长函数,给院长宣传一下:lol
没有最好,只有更好;
E派工具群号:24942984
页:
[1]