求一关于文本的代码
本帖最后由 wgij007 于 2021-9-15 07:51 编辑将框选文本复制,点屏幕处将自动排列,第二行后面加多几个文本。都是多行文本,内容不固定,相当位置一样的,只是大约排列,不用合拼,如下
本帖最后由 xj6019 于 2021-10-4 20:41 编辑
调试过的代码,如下:
(defun c:nm (/ ss lst i en ent pt en1 en2 en3 txt1 p1 zg p2 p3 )
(if (setq ss (ssget (list '(0 . "text,mtext"))))
(progn
;; 1、?取点位表
(setq lst '()
i 0
)
(repeat (sslength ss)
(setq en(ssname ss i)
ent (entget en)
pt(cdr (assoc 10 ent))
lst (append lst (list (listpt en)))
i (1+ i)
)
)
;; 2、排序
(setq
lst (vl-sort
lst
(function
(lambda (e1e2)
(if (equal (cadar e1) (cadar e2) 1e1)
(< (caar e1) (caar e2))
(< (cadar e1) (cadar e2))
)
)
)
)
)
)
)
; 3、文字
(setq en1 (cadadr lst) en2 (cadr(last lst)) en3 (cadar lst))
(setq txt1(strcat (cdr(assoc 1 (entget en3)))"kli"));命名加了后?的文字"kli" ?里自定?需要增加的那个文字的后?
(setq zg(cdr (assoc 40 (entget en1))))
(setq p1 (getpoint "\n?指定插入点:"))
(setq p2 (polar p1 (* 1.5 pi)(* 2.2 zg)))
(setq p3 (polar p2 (* 1.5 pi)(* 2.2 zg)))
(entmod(subst(cons 10p1)(assoc 10 (entget en2))(entget en2))) ;更新插入点
(entmod(subst(cons 10p2)(assoc 10 (entget en3))(entget en3))) ;更新插入点
(entmod(subst(cons 10p3)(assoc 10 (entget en1))(entget en1))) ;更新插入点
(entmod(subst(cons 1txt1)(assoc 1 (entget en3))(entget en3))) ;更新需要加了后?的文字
(princ)
)
这样吗?
不是单单的对齐,左下角的比右边的要低, 顶一下 答案在这里:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=179974&extra=&highlight=%B6%D4%C6%EB&page=1 alexmai 发表于 2021-9-16 22:49
答案在这里:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=179974&extra=&highlight=%B6%D4%C6%EB& ...
不行,这个只能从下而下,达不到要的效果。 再顶一下。 各位老大,帮一下吧! 没有看懂你要干嘛