CAD中怎么导入导出文本
在使用CAD绘图软件进行工作时,有时需要把用文字编辑器写好的段落文字插入到图形中,并用CAD的文字编辑命令进行修改;但CAD中并没有直接提供关于文本插入和文本输出的命令,遇到这样的问题该怎么办通过剪贴板进行OLE方式的复制与粘贴是无法实现上述要求的。下面我介绍的方法能够解决在CAD与文字编辑器之间进行纯文本的导入和导出的问题。
1 导入文本
虽然CAD中没有提供插入文本的命令,但是利用多行文字编辑Mtext可以实现文本插入。在Mtext的`对话框中右键菜单中有“输入文字”的功能,可以选择磁盘上的“txt”、“rtf”格式的文件进行插入,注意插入文件大小不得超过16KB,这显得美中不足。还有一种比较麻烦的方法就是利用文字编辑软件先打开文本,然后在输入单行文字或多行文字的时候将文字内容复制粘贴到CAD中。CAD还可以将默认的文字编辑器设置为记事本或WORD,设置方法如下:
1、 在选项对话框中设置。输入OP命令,打开选项对话框,在“文件”选项卡中找到文本编辑器应用程序,可以浏览设置成记事本、WORD的执行文件。
2、 直接输入mtexted命令,回车,输入notepad,可以将编辑器设置成记事本,如果想设置回来,输入mtexted,回车,输入“”,回车,就可以回复为CAD默认的编辑器。
如果要导入文本,无论是粘贴、插入,实际上都不太复杂,改变编辑器一般人很少用。
2 导出文本
如果仅有少量文字需要导出,那么在单行和多行文字的编辑框中,选择文字进行复制,然后粘贴到文字编辑器中即可。但是如果图纸中有大量散落的文字需要导出,上述方法就不太适用了。下面给大家介绍两个在网上看到的小程序,可以快速将CAD中的单行文字输出为文本文件(csv),这个文件用记事本或EXCEL都可以打开。
A、选择文字输出
可以框选文字进行输出,自动将文字保存为csv。
(defun c:exx ( / &ss %fir ~fir @tex #si #sn &tex %lay %tex @cl %ctx )
(vl-load-com) (princ "\n请选择要输出的文字对象")
(if (setq &ss (ssget (list (cons 0 "TEXT"))))
(progn
(setq %fir (strcat "C:\\" (vl-filename-base (getvar "dwgname")) "csv") ~fir (open %fir "w"))
(repeat (setq @tex '() #si 0 #sn (sslength &ss))
(setq &tex (vlax-ename->vla-object (ssname &ss #si)) #si (1+ #si))
(setq %lay (vla-get-layer &tex) %tex (vla-get-textstring &tex))
(if (setq @cl (assoc %lay @tex))
(setq @tex (subst (append @cl (list %tex)) @cl @tex))
(setq @tex (cons (list %lay %tex) @tex))
)
)
(setq @tex (vl-sort @tex (function (lambda (a b) (> (length a) (length b))))))
(setq #si 0 #sn (length (car @tex)))
(setq @tex (vl-sort @tex (function (lambda (a b) (< (car a) (car b))))))
(repeat #sn
(setq %tex "")
(foreach @tx @tex
(if (null (setq %ctx (nth #si @tx))) (setq %ctx "") )
(if (/= %tex "")
(setq %tex (strcat %tex "," %ctx))
(setq %tex %ctx)
)
)
(write-line %tex ~fir) (setq #si (1+ #si))
)
(close ~fir) (vlax-release-object &tex)
(princ (strcat "\n成功输出 " (itoa (sslength &ss)) "个文字输出到 " %fir " 中"))
)
(princ "\n未选择文字对象,退出")
)
(princ)
)
将上面代码复制到记事本中,另存为exxlsp,在CAD中输入AP命令,加载exxlsp,加载成功后,在命令行输入EXX,回车,在图中框选要输出的单行文字即可。
B、输出同图层文字
可以选择图层上的一个单行文字,就可以将此图层上所有单行文字都输出为一个csv文件。
(defun c:ecx ( / &tex &ss %fir ~fir %lay #si #sn )
(if (null vlax-dump-object) (vl-load-com) )
(if (setq &tex (entsel "\n请选择要输出图层的文字对象: "))
(if (= (vla-get-objectname (setq &tex (vlax-ename->vla-object (car &tex)))) "AcDbText")
(progn
(setq %fir (strcat "C:\\" (vl-filename-base (getvar "dwgname")) "csv") ~fir (open %fir "w"))
(setq %lay (vla-get-layer &tex) &ss (ssget "X" (list (cons 0 "TEXT") (cons 8 %lay))))
(repeat (setq #si 0 #sn (sslength &ss))
(write-line (vla-get-textstring (vlax-ename->vla-object (ssname &ss #si))) ~fir)
(setq #si (1+ #si))
)
(close ~fir) (vlax-release-object &tex)
(princ (strcat "\n已输出图层 [" %lay "]中的 " (itoa #sn) " 个文字到文件 " %fir "中"))
)
(princ "\n选择的不是文字对象")
)
(princ "\n未选择对象")
)
(princ)
)
将上面代码复制到记事本中,另存为ecxlsp,在CAD中输入AP命令,加载ecxlsp,加载成功后,在命令行输入EcX,回车,在图中点取一个要输出图层上的单行文字即可。
;1、差集命令已有缩写命令SU,交集命令已有缩写命令IN;2、增加CAD简化命令是可以不用单独编写LSP程序的,可以直接编写“acadpgp”文件(如果程序使用的是是新的Ribbon界面,请点击“管理”选项卡中“自定义设置”面板里的“编辑别名”,如果是原来的菜单界面,请点击“工具”>“自定义”>“编辑程序参数”)。
例如:在打开的文件的底部输入:
SUB, SUBTRACT
则将原SUBTRACT命令定义成简写SUB了。
3、如果确实需要自定义SUB来代表SUBTRACT,可编写如下简单代码:
(defun C:SUB ()
(command "_SUBTRACT") ;SUBTRACT命令前面的“_”也可以省略
)
将此代码保存为sublsp文件(文件名也可另取),并在调用前使用AP命令或load函数加载就OK了。CAD插件,分为Visual LISP开发的 lsp,编译后的fas,vlx,,,,,,还有就是,VBA,ObjectARX,NET开发的DLL。
第一种,用计算机自带的笔记本就可以写。也可以用CAD中的 命令 vlide 打开的程序写。上手快。适用于一般的,自己用的小程序开发。VBA高版本的CAD已经不包含了,要自己独立下载相应程序才可以用。 后两种,是C++ 和C#的CAD开发。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)