找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8167|回复: 67

[每日一码] 散开的单个文字合并成单行的文字实体

  [复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-5-24 08:45:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. ;;----------------------=={ Merge Text }==--------------------;;
  2. ;;                                                            ;;
  3. ;;  Converts a selection of single-character text objects     ;;
  4. ;;  into one or more text objects containing characters       ;;
  5. ;;  aligned by their insertion points & angle of rotation.    ;;
  6. ;;  Currently restricted to text containing no spaces.        ;;
  7. ;;------------------------------------------------------------;;
  8. ;;  Author: Lee Mac, Copyright © 2012 - www.lee-mac.com       ;;
  9. ;;------------------------------------------------------------;;

  10. (defun c:mergetext ( / i l s )
  11.     (if (setq s (ssget "_:L" '((0 . "TEXT"))))
  12.         (progn
  13.             (repeat (setq i (sslength s))
  14.                 (setq l (cons (entget (ssname s (setq i (1- i)))) l))
  15.             )
  16.             (foreach g
  17.                 (LM:GroupByFunction l
  18.                     (lambda ( a b / n r z )
  19.                         (and
  20.                             (equal (setq r (cdr (assoc 050 a))) (cdr (assoc 050 b)) 0.001)
  21.                             (equal (setq z (cdr (assoc 210 a))) (cdr (assoc 210 b)) 0.001)
  22.                             (setq n (list (cos r) (sin r)))
  23.                             (equal
  24.                                 (car (trans (cdr (assoc 10 a)) z n))
  25.                                 (car (trans (cdr (assoc 10 b)) z n))
  26.                                 0.001
  27.                             )
  28.                         )
  29.                     )
  30.                 )
  31.                 (if (cdr g)
  32.                     (progn
  33.                         (setq g
  34.                             (vl-sort g
  35.                                 (function
  36.                                     (lambda ( a b / n r z )
  37.                                         (setq r (cdr (assoc 050 a))
  38.                                               z (cdr (assoc 210 a))
  39.                                               n (list (cos r) (sin r))
  40.                                         )
  41.                                         (<  (last (trans (cdr (assoc 10 a)) z n))
  42.                                             (last (trans (cdr (assoc 10 b)) z n))
  43.                                         )
  44.                                     )
  45.                                 )
  46.                             )
  47.                         )
  48.                         (entmod
  49.                             (subst
  50.                                 (cons  1 (apply 'strcat (mapcar '(lambda ( x ) (cdr (assoc 1 x))) g)))
  51.                                 (assoc 1 (car g))
  52.                                 (car g)
  53.                             )
  54.                         )
  55.                         (foreach e (cdr g) (entdel (cdr (assoc -1 e))))
  56.                     )
  57.                 )
  58.             )                  
  59.         )
  60.     )
  61.     (princ)
  62. )

  63. ;; Group By Function  -  Lee Mac
  64. ;; Groups items considered equal by a given predicate function

  65. (defun LM:GroupByFunction ( lst fun / tmp1 tmp2 x1 )
  66.     (if (setq x1 (car lst))
  67.         (progn
  68.             (foreach x2 (cdr lst)
  69.                 (if (fun x1 x2)
  70.                     (setq tmp1 (cons x2 tmp1))
  71.                     (setq tmp2 (cons x2 tmp2))
  72.                 )
  73.             )
  74.             (cons (cons x1 (reverse tmp1)) (LM:GroupByFunction (reverse tmp2) fun))
  75.         )
  76.     )
  77. )

  78. (princ)


0.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-5-24 09:41:01 | 显示全部楼层
我也发个版本

  1. (defun c:CombindText (/ ACTDOC L S)
  2.   (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  3.   (vla-EndUndoMark ActDoc)
  4.   (vla-StartUndoMark ActDoc)
  5.   (if (and (setq l (ssget '((0 . "TEXT"))))
  6.          (setq s (getstring T "\n Enter string to place in between text strings [enter for none]: ")))
  7.      (progn
  8.        (setq l
  9.               (vl-sort
  10.                 (mapcar
  11.                   (function (lambda (x) (list (cdr (assoc 10 (entget x))) (cdr (assoc 1 (entget x))) x))
  12.                   ) ;_  function
  13.                   (vl-remove-if
  14.                     (function listp)
  15.                     (mapcar (function cadr) (ssnamex l))
  16.                   ) ;_  vl-remove-if
  17.                 ) ;_  mapcar
  18.                 (function
  19.                   (lambda (a b)
  20.                     (or
  21.                       (and
  22.                         (equal (cadar a) (cadar b) 1e-3)
  23.                         (< (caar a) (caar b))
  24.                       ) ;_  and
  25.                       (< (cadar a) (cadar b))
  26.                     ) ;_  or
  27.                   ) ;_  lambda
  28.                 ) ;_  function
  29.               ) ;_  vl-sort
  30.        ) ;_  setq
  31.        (while l
  32.          (if (equal (cadaar l) (cadr (caadr l)) 1e-3)
  33.            (progn
  34.              (entdel (last (cadr l)))
  35.              (setq l (cons (list (caar l) (strcat (cadar l) s (cadadr l)) (caddar l)) (cddr l)))
  36.            ) ;_  progn
  37.            (progn
  38.              (entmod (subst (cons 1 (cadar l)) (assoc 1 (entget (caddar l))) (entget (caddar l))))
  39.              (entupd (caddar l))
  40.              (setq l (cdr l))
  41.            ) ;_  progn
  42.          ) ;_  if
  43.        ) ;_  while
  44.      ) ;_  progn
  45.   ) ;_  if
  46.   (vla-EndUndoMark ActDoc)
  47.   (princ)
  48. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2017-5-24 08:48:57 | 显示全部楼层
另外个版本:
  1. (defun c:GatherTexts (/ ss i sn e lst l st)
  2. ;;;;;            Tharwat 01. Nov. 2012            ;;;;;
  3. ;;;;;        gathering TEXT entities all together in        ;;;;;
  4. ;;;;;        the first left entity from the selection set    ;;;;;
  5.   (or acdoc (setq acdoc (vla-get-activedocument (vlax-get-acad-object))))
  6.   
  7.   (if (setq ss (ssget "_:L" '((0 . "TEXT"))))
  8.     (progn (repeat (setq i (sslength ss))
  9.              (setq sn (ssname ss (setq i (1- i))))
  10.              (setq e (entget sn))
  11.              (setq lst (cons (list (cdr (assoc 10 e)) (cdr (assoc 1 e)) sn) lst))
  12.            )
  13.            (setq l (vl-sort lst '(lambda (a b) (< (car (car a)) (car (car b))))))
  14.            (setq st (apply 'strcat (mapcar 'cadr l)))
  15.            (vla-StartUndoMark acdoc)
  16.            (if (entmod (subst (cons 1 st) (assoc 1 (entget (caddr (car l)))) (entget (caddr (car l)))))
  17.              (progn (setq l (reverse l)) (setq l (vl-remove (last l) l)) (mapcar 'entdel (mapcar 'caddr l)))
  18.            )
  19.            (vla-EndUndomark acdoc)
  20.     )
  21.     (princ)
  22.   )
  23.   (princ)
  24. )


另外一个版本

游客,如果您要查看本帖隐藏内容请回复
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-5-24 08:52:44 | 显示全部楼层
这个用来处理炸开的多行文本比较好...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2017-5-24 09:00:31 | 显示全部楼层
非常好的程序,谢谢楼主分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 496个

财富等级: 日进斗金

发表于 2017-5-24 16:33:24 | 显示全部楼层
虽然用处不大,但也值得学习!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 275个

财富等级: 日进斗金

发表于 2017-5-24 21:59:00 | 显示全部楼层
本帖最后由 関吣 于 2017-5-24 22:04 编辑

第一个版本加个模糊距离就完美了,要不然同一直线上的文本全合一起了,
第二个版本竖向的文本全部合到一块,
第三个版本想看一下~
谢谢版主。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

发表于 2017-5-25 00:05:36 | 显示全部楼层
谢谢分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 478个

财富等级: 日进斗金

发表于 2017-5-25 00:50:28 | 显示全部楼层
感谢分享程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

发表于 2017-5-25 00:59:16 来自手机 | 显示全部楼层
非常好的程序,谢谢楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 812个

财富等级: 财运亨通

发表于 2017-5-25 07:51:01 | 显示全部楼层
感谢楼主分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-5-26 22:08:50 | 显示全部楼层
能合成多行文本吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-26 22:10:42 | 显示全部楼层

文字转多行文本论坛有插件,搜索下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6881个

财富等级: 富甲天下

发表于 2017-5-28 12:57:46 | 显示全部楼层
看上去还不错啊
谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 837个

财富等级: 财运亨通

发表于 2017-5-28 18:57:09 | 显示全部楼层
同一行的全部处理到一块吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 01:20 , Processed in 0.215402 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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