将lst写出到cad做表,求高手指点....
想模拟院长的xyp-List2TableAuto ,可惜新手太笨,尽是错误代码.写不下去了,不知道错在哪里~~~只循环一次就没后文了,求高手指点下...;将lst写出到cad做表
;pt表格左上角 LST表 ZG字体高度
;(LST2TAB (getpoint "\n指定表格左上角") LST 3.5)
(defun lst2tab (pt lst zg)
(setq h (* zg 2);单元格高
n (length lst);总行数4
nn (apply 'max (mapcar 'length lst));子表最大长度,决定总列数11
len 0
i 0);循环计数1
(entmake (list '(0 . "LINE") '(62 . 2)(cons 10 pt) (cons 11 (polar pt (* pi 1.5) (* n h)))));绘制左边第一条竖线
(repeat nn;重复写出;repeat1
(setq lsti (mapcar '(lambda (x) (nth i x)) lst);取相应列数据
leni(1+ (apply 'max (mapcar 'strlen lsti)));列宽度
len (+ len leni)
pt1 (polar pt 0 len);竖线起点
ii 0);循环计数2
(entmake (list '(0 . "LINE") '(62 . 2)(cons 10 pt1) (cons 11 (polar pt1 (* pi 1.5) (* n h)))));绘制文字右侧竖线
(repeat n ;重复写出列文字,repeat2
(setq str (vl-princ-to-string (nth ii lsti)));取出字符
(if (not str)(setq str ""))
(setq pti (polar pt1 pi (* leni 0.5)))
(setq ptii (polar pti (* pi 1.5) (* (+ 0.5 ii) h)));文字位置
(entmake (list '(0 . "TEXT") (cons 1 str) (cons 10 ptii)(cons 73 2) (cons 72 1)(cons 11 ptii) (cons 40 zg) (cons 41 1.0)));写出文字
(setq ii (1+ ii))
);repeat2
(setq i (1+ i))
);repeat1
)
;==============程序开始===================
(defun C:TT()
(setq LST '(
("项目" "列1" "列2" "列3" "列4" "列5" "列6" "列7")
("行1" 1 12 123 1234 12345 123456 1234567 12345678 123456780 1234567890)
("行2" 1 12 123 1234 12345 123456 1234567 12345678 123456789)
("行3" "后面空" "" "前面空" "1234" "文本" "ABCDE")
)
)
(setq pt (getpoint "\n指定表格左上角"))
(setq zg 1)
(LST2TAB pt LST zg)
) 初步判断,错误发生在这里,当数据为空的时候,就终止了~ 参数类型错误: stringp nil
(setq lsti (mapcar '(lambda (x) (nth i x)) lst);取相应列数据
leni(1+ (apply 'max (mapcar 'strlen lsti))));列宽度
可以
d:\QQ图片20140707170557.jpg (if (not str)(setq str ""))这句话好像没起作用啊~
页:
[1]