664571221 发表于 2024-10-12 11:41:07

各位大佬看一下。有圆圈围成的文字,能不能框选这些,合并圆圈内的文字,原来的文...

本帖最后由 664571221 于 2024-10-12 11:43 编辑

各位大佬看一下。有圆圈围成的文字,能不能框选这些,合并圆圈内的文字,原来的文字不变,在边上生成一个新的合并的文字比如P1这个文字,在边上生成一个P*1这样的文字,批量选择这些圆和文字

vitalgg 发表于 2024-10-12 12:20:30

本帖最后由 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:21:20

本帖最后由 韩飞翔 于 2024-10-12 18:32 编辑

嗯,你说的是圆结果是多段线并非真的圆

韩飞翔 发表于 2024-10-12 18:32:21

(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)
)

韩飞翔 发表于 2024-10-12 18:37:52

用院长函数,给院长宣传一下:lol
没有最好,只有更好;
E派工具群号:24942984
页: [1]
查看完整版本: 各位大佬看一下。有圆圈围成的文字,能不能框选这些,合并圆圈内的文字,原来的文...