我写了个提取cad中的文字、坐标、图层、颜色的程序,太不理想了(非常蹩脚),有大哥能给改下改成用vla对象写的么?- (defun c:Q2(/ ff ffn i ss ssdata ssn sstyp sx sy sz txt txtxy)
- (setvar "cmdecho" 0) ;;关闭变量
- (setvar "blipmode" 0);;关闭控制点
- (vl-load-com) ;;加载vlax扩展函数
-
-
-
- ;(setq ffn (getfiled "写出文件" "C:/Users/Administrator/Desktop/" "csv" 1)) ;弹对话框提示设置保存路径及名称
- (princ "\n选取文字:") ;提示选取文字
- (setq ff (open "C://Users//Administrator//Desktop//文字.xls" "w")) ;建立文本;W会把文本里面的内容清除
- (setq i 0 ss '()) ;设置i初始值
- (if (setq ss (ssget '((0 . "*TEXT")))) ;星号通配符,TEXT或者MTEXT都可以。
- (repeat (sslength ss) ;对循环体中的表达式求SS图元个数值
- (setq ssn (ssname ss i)) ;返回SS集中第i个图元名称
- (setq ssdata (entget ssn)) ;返回图元的数据集
- (setq txt (cdr (assoc 1 ssdata))) ;取文本数值
- (setq txtxy (cdr (assoc 10 ssdata))) ;取文本坐标
- (setq sx (rtos (nth 1 txtxy) 2 3)) ;将X坐标值实数转换成字符(目前没单独提取)
- (setq sy (rtos (nth 0 txtxy) 2 3)) ;将y坐标值实数转换成字符(目前没单独提取)
- (setq sz (rtos (nth 2 txtxy) 2 3)) ;将z坐标值实数转换成字符(目前没单独提取)
- (setq tc (cdr (assoc 8 ssdata)))
- (progn
- (or
- (setq col(cdr(assoc 62 ssdata)))
- (setq col(cdr(assoc 62(tblsearch "layer" tc)))) ;随层颜色提取方式
- )
- col
- )
-
- (princ txt ff)
- (princ "\t" ff);这个格式就是在同一行下一个内容
- (princ txtxy ff)
- (princ "\t" ff);这个格式就是在同一行下一个内容
- (princ tc ff)
- (princ "\t" ff);这个格式就是在同一行下一个内容
- (princ col ff)
- (princ "\t" ff);这个格式就是在同一行下一个内容
- (princ sx ff)
- (princ "\t" ff);这个格式就是在同一行下一个内容
- (princ sy ff)
- (princ "\t" ff);这个格式就是在同一行下一个内容
- (princ sz ff)
- (princ "\t" ff);这个格式就是在同一行下一个内容
- (princ "\n" ff);这个格式就换行
- ;write-line不用换行,princ要用/n换行,princ要用/t下一列,(在同一行下一个内容)
- (setq i (1+ i))
- )
- )
- (close ff) ;关闭ff文件
- ;(princ (strcat "\n写出文件 " ffn)) ;提示提取文字完成
- (princ) ;让提示行只显示一行
- )
CAD带文字的文件我就不传了,随便在CAD中新建几个文字提取试试就行。先谢谢大神了哈,我这是在研究CAD跟excel的转换问题,没整明白。
|