明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1186|回复: 11

[提问] 批量选择文字粘贴为多行文字顺序排列问题?求解答

[复制链接]
发表于 2023-10-27 17:18:38 | 显示全部楼层 |阅读模式


代码是明经的,感谢原作者
批量选择文字粘贴为多行文字,这个点选的时候顺序没问题,框选的时候没有排序,会错乱,能否实现按左到右,上到下顺序排列成多行呢?


  1. ;
  2. (vl-load-com)
  3. (defun x-clip-string (str / html result)
  4.   (and (= (type str) 'str)
  5.     (setq html (vlax-create-object "htmlfile"))
  6.     (setq result (vlax-invoke   (vlax-get  (vlax-get html 'parentwindow)   'clipboarddata )  'setdata   "text"   str ))
  7.     (vlax-release-object html))
  8. )

  9. (defun c:w2()
  10. (vl-load-com)
  11.   (setq txtcon (strcat))
  12.      (setq txtss (ssget '((0 . "*TEXT,DIMENSION"))))
  13.      (setq ssv (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
  14.   (setq i 0)
  15.   (setq txtcon (strcat))
  16.   (repeat (vla-get-count ssv)
  17.             (setq txtcon (apply '(lambda (v) (setq txtcon (strcat txtcon  v "\n")))
  18.                          (progn
  19.                            (if (= (vla-get-ObjectName (vla-item ssv i)) "AcDbRotatedDimension")
  20.                                (progn (if (= (vla-get-TextOverride (vla-item ssv i)) "")
  21.                                       (setq pt (rtos (vla-get-Measurement (vla-item ssv i)) 2 2))
  22.                                       (setq pt (vla-get-TextOverride (vla-item ssv i)) )))
  23.                                (setq pt (vla-get-TextString (vla-item ssv i)))
  24.                            )
  25.                             (list pt)
  26.                           )))
  27.             (setq i (1+ i))
  28.             )
  29.   (x-clip-string txtcon)
  30.   (princ "\n文字已复制到剪切板,可以直接粘贴了!")
  31. (princ)
  32. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-10-27 18:45:30 | 显示全部楼层
回复 支持 1 反对 0

使用道具 举报

发表于 2023-10-27 17:46:48 | 显示全部楼层
排序 是要按 座標大小 還是 數字大小  
文字串是長什麼樣子 請給個 測試圖檔
 楼主| 发表于 2023-10-27 18:07:26 | 显示全部楼层
lee50310 发表于 2023-10-27 17:46
排序 是要按 座標大小 還是 數字大小  
文字串是長什麼樣子 請給個 測試圖檔

1.无论如何框选都是从   左到右  上到下的顺序

2.此程序生成的多行带一个多余空行,导致我在用你的指定图层多行转单行的时候,文字会下沉一小段距离,不知道能不能解决这个问题

本帖子中包含更多资源

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

x
发表于 2023-10-28 04:36:11 | 显示全部楼层
本帖最后由 lee50310 于 2023-10-29 18:13 编辑

改好了  執行指令:w3
                         1.選取文字
                         2.按鍵盤 ctrl-v 貼上 或 在螢幕按滑鼠右鍵 選擇貼上

  1. ;;
  2. ;;修改  1.增加排序功能去
  3. ;;;    2.去除文字串最后换行字符   by lee50310 日期2023/10/28
  4. ;;----------------------------------------------------------------------
  5. (vl-load-com)
  6. (defun x-clip-string (str / html result txtcon)
  7.   (and (= (type str) 'str)
  8.     (setq html (vlax-create-object "htmlfile"))
  9.     (setq result (vlax-invoke   (vlax-get  (vlax-get html 'parentwindow)   'clipboarddata )  'setdata   "text"   str ))
  10.     (vlax-release-object html))
  11. )

  12. ;;----------------------------------------------------------------------
  13. ;;
  14. ;;<***** 主程式 *****>
  15. ;;
  16. (defun c:w3( / txtss  txtcon st)
  17. (vl-load-com)
  18.      (setq txtss (ssget '((0 . "*TEXT,DIMENSION"))))
  19.          (command "_.copyclip" "Previous" "")                          ;(剪贴复制)上次的选择集
  20.      (setq ssv (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))

  21.   (setq i 0 sel nil wel nil)
  22.   (repeat (vla-get-count ssv)           
  23.                 (setq sel (apply '(lambda (v) (setq sel (cons v sel))) ;将文字选集对象 转 文字列表sel
  24.                          (progn
  25.                            (if (= (vla-get-ObjectName (vla-item ssv i)) "AcDbRotatedDimension")
  26.                                (progn (if (= (vla-get-TextOverride (vla-item ssv i)) "")
  27.                                       (setq st (rtos (vla-get-Measurement (vla-item ssv i)) 2 2))
  28.                                       (setq st (vla-get-TextOverride (vla-item ssv i)) ))
  29.                                                                 );end_progn
  30.                                (setq st (vla-get-TextString (vla-item ssv i))) ;
  31.                            )
  32.                             (list st)
  33.                           );end_progn
  34.                                                   );end_apply
  35.                         );end_setq
  36.                          (setq i (1+ i))
  37.   );end_repeat
  38.   (setq txtcon (strcat))               
  39.   (setq wel(vl-sort sel '(lambda (x1 x2) (< (atoi x1) (atoi x2))))) ;数字排序由小到大
  40.   (foreach x wel (setq txtcon (strcat txtcon  x "\n")) )            ;文字列表 转 单一字串
  41.   (setq wel(list(vl-string-right-trim "\n" (car wel))))             ;去除文字串最后换行字符
  42.                
  43.   (x-clip-string txtcon)
  44.   (princ "\n文字已覆制到剪切板,可以直接粘贴了!")
  45. )
  46. ;;----------------------------------------------------------------------


本帖子中包含更多资源

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

x
 楼主| 发表于 2023-10-28 09:54:46 | 显示全部楼层
lee50310 发表于 2023-10-28 04:36
改好了  執行指令:w3
                         1.選取文字
                         2.按鍵盤 ctrl-v  ...

感谢老哥,不过还是有点问题

1.生成的多行文字会多一行这个能去掉这一行多余么

2.现在是按大小排序,但是当我的单行文字如左边这样时,排出来有bug,能否生成的多行和左边是一样的,详见下图,能否改为无论怎么框选按xy那样,从左往右,从上往下排列,因为多数场景我们就是需要复制一大部分文字同时不打乱顺序变成多行

本帖子中包含更多资源

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

x
发表于 2023-10-28 13:19:29 | 显示全部楼层
本帖最后由 lee50310 于 2023-10-28 18:33 编辑
muai2010 发表于 2023-10-28 09:54
感谢老哥,不过还是有点问题

1.生成的多行文字会多一行这个能去掉这一行多余么

只能幫你把字串最後換行符號去掉 (請重新下載 w3b_chs.lsp)
其他編排沒法做到

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
muai2010 + 1 + 5 非常感谢!!!!!!!

查看全部评分

发表于 2023-10-29 13:07:26 | 显示全部楼层

本帖子中包含更多资源

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

x

点评

有测试图,清清楚楚!  发表于 2023-10-29 15:09
院长,我闻一闻也满足了哈哈  发表于 2023-10-29 13:26
发表于 2023-10-30 13:36:53 | 显示全部楼层
一举取得文字排序,很方便也很实用,感谢,收藏先!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 08:53 , Processed in 0.176006 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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