找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4249|回复: 17

[分享]:给大家完成了“完美的CAD文字拷贝到剪切板”上的程序...

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-8-10 14:59:05 | 显示全部楼层 |阅读模式

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

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

×
程序完美的实现了ACAD大段水平文字拷贝到剪切板的问题,一行里面可以有多个文字,文字也可以留有中间空格,中间空格处是其他的文字,总之,不管你怎么写文字,都能把显示的效果完美的拷贝到剪切板上,在其他字处理软件里面,CTRL+V粘贴过去,就可以利用这些软件强大的排版功能,处理后,在使用以前提供过的“完美的从剪切板读入CAD”的程序,写到CAD里面。

转换前的图片:


                               
登录/注册后可看大图


粘贴到UEDIT软件里面的效果:


                               
登录/注册后可看大图





  1. [FONT=courier new]
  2. ;|
  3.    命令:txt_setclip
  4.    
  5.    功能:把选取的多行文字写到剪切板上。
  6.    
  7.    说明:1、适合角度为0的水平大段文字的排版。
  8.         2、程序能自动判断文字中间的空格,完成排序
  9.         3、一行可以由多个文字组成,可以在一个文字中间的空格写其他文字
  10.         4、任何情况下,都可以完美处理
  11. |;
  12. (defun c:txt_setclip (/ $txt_setclip ss ss1)
  13.   (defun $txt_setclip (el / txt n m tf)
  14.     (prompt "\n正在往剪切板写......")
  15.     (setq txt "")
  16.     (foreach n el
  17.       (foreach m n
  18.         (xdrx_setenttodb m)
  19.         (setq txt (strcat txt (xdrx_getentdxf 1)))
  20.       )
  21.       (setq txt (strcat txt "\r\n"))
  22.     )
  23.     (if (setq tf (xdrx_setclipboard txt))
  24.       (prompt "完毕!")
  25.       (prompt "失败!")
  26.     )
  27.     tf
  28.   )
  29.   (prompt "\n请选取要拷贝到剪切板上的文字<退出>:")
  30.   (if (setq ss (ssget '((0 . "text"))))
  31.     (progn
  32.       (xdrx_begin)
  33.       (xdrx_setmark)
  34.       ($xdlsp_text_rspace1 ss t)
  35.       (if (setq ss1 (xdrx_getss))
  36.         (setq ss (xdrx_pickset_union ss ss1))
  37.       )
  38.       (if ($txt_setclip (setq len ($xdlsp_text_sort ss t)))
  39.         (prompt (strcat "\n往剪切板上写了 " (itoa (length len))
  40.                         " 行文字,在其他字处理软件里面用ctrl+v获得内容!"
  41.                 )
  42.         )
  43.       )
  44.       (xdrx_end)
  45.     )
  46.   )
  47.   (princ)
  48. )
  49. [/FONT]


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

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-8-10 15:50:45 | 显示全部楼层
TXT_SETCLIP 与 TXT_GETCLIP 配合测试结果:

1 TXT_SETCLIP往剪贴板写文字时,对SHX可能出现 %%xxx[/COLOR],不过再次粘贴进CAD后还会是源文字的

                               
登录/注册后可看大图


编辑器 Ctrl + V 效果


                               
登录/注册后可看大图


用 TXT_GETCLIP 写入CAD后效果


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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

 楼主| 发表于 2002-8-10 21:08:39 | 显示全部楼层
最初由 ll_j 发布
[B]建议晓东增加制表符模式。 [/B]


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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2002-8-10 21:33:59 | 显示全部楼层
最初由 XDSoft 发布


LJ,听听你的想法,在论坛说说吧。


有些时候需要将图中的表格导出进行编辑、计算,字符之间加上\t就可被Excel等识别,我以前写的Wr就是这样,不过不能到剪贴板。同时剪贴板上的文本导入到CAD中时,由于Shx文件不能识别\t,故也需要做点工作,将其按行列分离。
我的想法是,是否可以在程序中加入分支,最好做成像R14格式刷一样,在提示选择时增加一个选项,设定导出模式,ssget是不可以直接加的,如用Alisp完成有一定难度(DDmodify中有,很繁),好在你使用ARX,可能容易点。
至于文本导入,应该是容易的,只要设定行、列距就容易搞定了。
我想,既然文本系列工具已做到这一步,大可以再进一步完善。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

 楼主| 发表于 2002-8-10 21:57:44 | 显示全部楼层
最初由 ll_j 发布
[B]

有些时候需要将图中的表格导出进行编辑、计算,字符之间加上\t就可被Excel等识别,我以前写的Wr就是这样,不过不能到剪贴板。?.. [/B]


LJ,你在ACAD里面画个两行两列的表格吧,里面填上文字,截图贴论坛。

然后把应该写的格式\t加入什么文字,字符串给贴到论坛,我没有分析过EXCEL。

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-8-11 10:09:13 | 显示全部楼层
CAD表格文字 -> Word、EXCEl可以保证行,至于列情况比较复杂,中间如果有缺格,
转出后不可能和CAD的列一致。
应该在TXT_SETCIP中增加是否按表格转出,文字编辑编辑时可能希望将文字连接,不要中间的制表符。

Word、Excel表格 -> CAD用API可以实现。

对字符处理要用到 XDRX_String_xxx 函数

  1. [color=darkred]XdRx_String_Find[/color]

  2. 功    能:在给定的字符串中查找子串,识别大小写

  3. 调用格式:(xdrx_string_find <字符串> <子串>)

  4. 返 回 值:整数值(子串的位置),起始是0,若没找到,返回NIL

  5. [color=darkred]XdRx_String_Findoneof[/color]

  6. 功    能:在字符串中寻找第一在匹配字符串中的字符,并返回位置。区分大小写

  7. 调用格式:(xdrx_string_findoneof <字符串> <匹配字符串>)

  8. 返 回 值:若找到,返回整数值(位置,基于0),否,返回NIL.

  9. 示    例:(xdrx_string_findoneof "abcde" "xd")=3 ;匹配的字符是d

  10. [color=darkred]XdRx_String_Format[/color]

  11. 功    能:将任意个数的字符串,整数,长整数,实数连接成一个字符串

  12. 调用格式:(xdrx_string_format <参数1> [参数2]...[参数n])

  13. 返 回 值:字符串

  14. 说    明:参数N: 可以是字符串,整数,长整数,实数之一
  15.                  对于实数,后面跟的整数参数若小于等于5,作为小数点后的位数。
  16.                  若不给整数或大于5,则对实数求整。

  17. 示    例:(xdrx_string_format "abc" 1 2.332 5)="abc125"
  18.           (xdrx_string_format 1 "abc" 2.332 2 "b")="1abc2.33b"

  19. [color=darkred]XdRx_String_TrimLeft[/color]

  20. 功    能:删除字符串头部的所有连续出现的子字符串,若不给子字符串参数,则
  21.           删除字符串头部的空格,TAB符号,换行符号。

  22. 调用格式:(xdrx_string_trimleft <字符串> [子字符串])

  23. 返 回 值:字符串

  24. 示    例:(xdrx_string_trimleft "\r\n建筑" "\r\n")="建筑"
  25.           (xdrx_string_trimleft "\r\n建筑")="建筑" ;不带参数
  26.           (xdrx_string_trimleft "ababdddd" "ab")="dddd"

  27. 功    能:将由给定分割字符串分割的字符串组成表,若是"",忽略

  28. [color=darkred]XdRx_String_Tok[/color]

  29. 调用格式:(xdrx_string_tok <字符串> <分割字符串>)

  30. 返 回 值:字符串表

  31. 示    例:(xdrx_string_tok "abc;;def;;efg" ";;")=("abc" "def" "efg")
  32.           (xdrx_string_tok "abc;;def;;efg" ";")=("abc" "def" "efg")
  33.           (xdrx_string_tok "abcddefgddzdf" "d")=("abc" "efg" "z" "f")
  34.           (xdrx_string_tok "abcddefgddzdf" "dd")=("abc" "efg" "z" "f")
  35.           (xdrx_string_tok ",1,2" ",")=("1" "2) ;前面的""忽略
  36.           (xdrx_string_tok ",1,2,,,3,")=("1" "2" "3") ;;""忽略

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2002-8-11 10:36:29 | 显示全部楼层
最初由 XDSoft 发布


LJ,你在ACAD里面画个两行?..


继续昨天的话题。
昨天网络不稳定,所以早早就下线了。今天再补充一些。
下图是一个钢筋表(我有专门程序计算),其他专业还会有其他类型的材料表,有些表中项目还是不完整的,目前最好的办法就是将表格导入Excel中计算,再导回。以目前我们对Excel的了解,直接写Excel工作表文档是无法办到的,但我们可以用含制表符的文本文档过渡。
以你目前的工具系列,可以逐列选取文本到剪贴板,再到Excel,我的意思是建议将多步工作一步完成,程序将更实用。根据我以前写Wr及Ju的经验,我认为可以按以下步骤进行(Lisp):
1.将所有实体分行,赋予行号,构成表(如(en nl));
2.将所有实体分列,赋予列号,构成表(如(en nl nc));
3.逐行将实体字符串按列合成(如"12 23 _ 34"构成为"12\t23\t\t34");
4.将字符串导入剪贴板。
这样在Excel中可以直接粘贴剪贴板中的内容。
同样,将Excel中的内容复制到剪贴板中时,按文本方式理解,其格式也是如此,剪贴板到CAD时就需要有“按行、列”、“带空格字符串”(Shx中无09代码)及“按单词”等输出方式。
这是我个人理解,姑妄言之。
总之,一个好的程序可能影响一批人的绘图习惯。


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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-8-11 10:53:41 | 显示全部楼层
这种行列都有数值的处理起来现对简单,还有CAD表格中间某格内没有文字,如何控制加上 \t  ?从Excel -> CAD 对空格、合并格会自动加 \t 的。
我有个简单的例子,不限于数字转Excel,CAD转Word表格没有实际意义,因为WORD必须保证表格的粘贴区域一致,才可进行粘贴。

1 CAD中表格初始表格


                               
登录/注册后可看大图


2 将以上表格粘贴进Excel,以下容易实现


                               
登录/注册后可看大图


3  Excel源表格


                               
登录/注册后可看大图


4 将 3 表粘贴进CAD并绘制


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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-8-11 11:00:35 | 显示全部楼层
以上我说是直接开窗口选择,另外CAD中如果有空行,粘贴进Excel中会将下面行上移,和前一行接上。

实现这些还容易,非要将CAD表格原样的贴进Excel,为此增加选项以添加制表符,有必要吗?

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2002-8-11 11:09:38 | 显示全部楼层
最初由 eachy 发布
以上我说是直接开窗口选择,另外CAD中如果有空行,粘贴进Excel中会将下面行上移,和前一行接上。

实现这些还容易,非要将CAD表格原样的贴进Excel,为此增加选项以添加制表符,有必要吗?

CAD本身就是图形工具?..


你说呢?相信大多数搞结构的人都有的为材料统计伤脑筋,写程序也只是追求更方便些。

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-8-11 11:27:35 | 显示全部楼层
你贴的图中,每个格中都有数字,更通用些,就是如何处理表中的空格是难点,主要是写出CAD,写入的时候空格处自动添加了 \t

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

使用道具 举报

发表于 2002-8-11 11:53:52 | 显示全部楼层
为什么不在cad中直接编制计算材料表的程序呢?,我觉得编制专用材料表计算程序
非常有用,我现在使用自己编制的程序可以对钢筋、等肢角钢、钢板、钢管材料进行计算,非常好用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-8-11 15:30:23 | 显示全部楼层
最初由 tomtom 发布
[B]为什么不在cad中直接编制计算材料表的程序呢?,我觉得编制专用材料表计算程序...[/B]

好,行列都排好了,还用到 Excel 吗?直接计算后写上不就得了。

不过CAD表格尽量保持原行列情况下转到Excel,我提个思路,看看是否可行,利用 XDRX_API  及 晓东写的函数库, $xdlsp_text_sort [/COLOR]对文字选择集排序,返回值为以下格式
  1. [COLOR=BLACKRED]
  2. (((E11) (E12) (E13) .... )
  3.     (((E22) (E22) (E23) .... )
  4. .....
  5. )[/COLOR]
复制代码

已经按行(由上至下)列(由左至右)排布了,如果行中有空格的情况,那子表长度会不一样,找出最长表,就是表的列数,然后对表做X坐标的索引值,用短表和最长表对比,返回短表中的每个元素在长表中的索引值,有了索引值就知道文字前后是否该加和加几个[B] \t [/COLOR] [/B]。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-11 10:45:12 | 显示全部楼层
请问各位,一楼程序中,什么语句实现把文字拷贝到剪切板?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 10:15 , Processed in 0.452178 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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