明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1708|回复: 6

求一段LSP代码

[复制链接]
发表于 2007-10-29 13:45:00 | 显示全部楼层 |阅读模式
请帮忙用LISP写段代码,可以把依次从屏幕上选取的三段文字合并成一段,并可选择合并后文字的放置位置
发表于 2007-10-29 20:31:00 | 显示全部楼层

提取文字内容后,用strcat合并,文字放置位置需提供更具体的条件才行,也可用pause 自定义

发表于 2007-10-30 06:18:00 | 显示全部楼层
把刚才发的程序改动一下就可以了。
  1. (defun c:wzbz (/   oldosmode  pt1 te_1    te_2
  2.         obj_number_list      tename txtlist    e1
  3.         e2   n      texthb pthb    ent
  4.         ent1   tetbox     tc  col    textpt1
  5.         textpt3   plin_p1    plin_p3 rectang_point_list
  6.        )
  7.   (setq oldosmode (getvar "osmode"))
  8.   (setvar "osmode" 0)
  9.   (prompt "\n文字合并")
  10.   (while (setq pt1 (getpoint "\n请框选文字对象-->"))
  11.     (setq pt2 (getcorner pt1 "\n请框选文字对象-->"))
  12.     (setq te_1 (ssget "c" pt1 pt2 '((0 . "TEXT"))))
  13.     (setq te_2 (ssget "c" pt1 pt2 '((0 . "MTEXT"))))
  14.     ;;合并选择集
  15.     (if (/= te_2 nil)
  16.       (while (setq mtextname (ssname te_2 0))
  17. (setq te_1 (ssadd mtextname te_1))
  18. (setq te_2 (ssdel mtextname te_2))
  19.       )
  20.     )
  21.     ;;生成一表,对象按X坐标由大到小排列
  22.     (setq obj_number_list '())
  23.     (while (setq tename (ssname te_1 0))
  24.       (setq txtpoint (cdr (assoc 10 (entget tename))))
  25.       ;;构造点坐标文字名称表
  26.       (setq txtlist (cons txtpoint tename))
  27.       (setq obj_number_list (cons txtlist obj_number_list))
  28.       (setq te_1 (ssdel tename te_1))
  29.     )
  30.     ;;对obj_number_list按X坐标由小到大排序
  31.     (setq obj_number_list
  32.     (vl-sort obj_number_list
  33.       (function (lambda (e1 e2)
  34.     (> (caar e1) (caar e2))
  35.          )
  36.       )
  37.     )
  38.     )
  39.     ;;循环取表元素,合并文字
  40.     (setq n 0
  41.    texthb ""
  42.     )
  43.     (repeat (length obj_number_list)
  44.       (setq texthb
  45.       (strcat
  46.         (cdr (assoc 1 (entget (cdr (nth n obj_number_list)))))
  47.         texthb
  48.       )
  49.       )
  50.       (setq n (1+ n))
  51.     )
  52.     ;;取第一文字坐标
  53.     (setq pthb (caar (reverse obj_number_list)))
  54.     ;;删除其它文字
  55.     (setq obj_number_list1 (cdr (reverse obj_number_list)))
  56.     (foreach n obj_number_list1
  57.       (command "erase" (cdr n) "")
  58.     )
  59.     ;;修改第一个文字
  60.     (setq ent (cdar (reverse obj_number_list)))
  61.     (setq ent1 (entget ent))
  62.     (setq ent1 (subst (cons 1 texthb) (assoc 1 ent1) ent1))
  63.     (entmod ent1)
  64.     (command "move" (entlast) "" pthb pause)
  65.   )
  66.   (PRINC)
  67. )
发表于 2007-10-31 08:55:00 | 显示全部楼层

en,xuexi

发表于 2007-11-1 01:05:00 | 显示全部楼层
这段代码我试了几次,好像只能对于同是单行文字的才好用,能不能把它修改为既能合并多行文字,又能合并单行文字,也能单、多行文字混合合并,合并后为多行文字。请指教
发表于 2012-1-16 19:18:25 | 显示全部楼层
这个不错但是竖向文字不行
发表于 2012-5-18 18:48:19 | 显示全部楼层
谢谢3楼楼主,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-22 05:21 , Processed in 0.207227 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表