求助能否实现将断面数据导入图中绘制成复合线的命令
本帖最后由 snight523 于 2015-10-30 11:47 编辑断面线数据格式为.txt数据如下:(分别为复合线的坐标X和Y)
-5.145,449.757
-2.091,449.623
0.174,449.214
1.826,448.779
3.308,448.400
7.106,446.958
能否通过lisp命令 选择txt文件将这些数据用复合线绘制在图中?
求大侠帮忙。。
(defun str-lst (lj / data_list ff data)
(setq data_list '()
ff (open lj "r")
data (read-line ff)
)
(while data
(setq data_list (cons data data_list)
data (read-line ff)
)
)
(reverse data_list)
)
(defun sparser (str delim / ptr lst)
(while (setq ptr (vl-string-search delim str))
(setq lst (cons (substr str 1 ptr) lst))
(setq str (substr str (+ ptr 2)))
)
(reverse (cons str lst))
)
(defun c:tt ()
(setq strlst0 (str-lst (getfiled "选择数据文件"
"C:\\"
"txt"
2
)
)
)
(setq lst (mapcar '(lambda (x / lst)
(mapcar '(lambda (y)
(atof y)
)
(sparser x ",")
)
)
strlst0
)
)
(entmake (append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length lst))
)
(mapcar '(lambda (pt)
(cons 10 pt)
)
lst
)
)
)
)
复制以上代码,打开记事本后粘贴,然后另存为tt.lsp(注意修改文件类型),然后在CAD中使用AP命令加载这个lsp文件,加载成功后使用TT命令,找到你保存有数据的txt文件,然后就生成了。
若还有不明白的,可在帖子中继续留言
革天明 发表于 2015-10-30 12:53 static/image/common/back.gif
(defun str-lst (lj / data_list ff data)
(setq data_list '()
ff (open lj "r")
真是太感激了, 已经可以解决问题了。如果数据的格式是这样的能否导入呢?
120,-36.485,457.523
120,-31.516,457.472
120,-29.564,457.257
120,-19.012,456.399
120,-14.897,456.042
120,-12.791,455.813
120,-4.181,454.899
120,2.454,454.257
120,4.036,454.094
120,11.18,451.29
数据第一列是断面里程,第二列是坐标X 第三列是坐标Y 如何能剔除第一个数据汇总后边的坐标
snight523 发表于 2015-10-30 14:31 static/image/common/back.gif
真是太感激了, 已经可以解决问题了。如果数据的格式是这样的能否导入呢?
120,-36.485,457.523
120,-3 ...
也可以导入啊 将二楼的程序改一下就可以了
至于你说汇总坐标的话 也简单啊,将读取的坐标重新写入一个新文件就好
或者使用批处理 (defun str-lst (lj / data_list ff data)
(setq data_list '()
ff (open lj "r")
data (read-line ff)
)
(while data
(setq data_list (cons data data_list)
data (read-line ff)
)
)
(reverse data_list)
)
(defun sparser (str delim / ptr lst)
(while (setq ptr (vl-string-search delim str))
(setq lst (cons (substr str 1 ptr) lst))
(setq str (substr str (+ ptr 2)))
)
(reverse (cons str lst))
)
(defun c:tt ()
(setq strlst0 (str-lst (getfiled "选择数据文件"
"C:\\"
"txt"
2
)
)
)
(setq lst (mapcar '(lambda (x / lst)
(mapcar '(lambda (y)
(atof y)
)
(sparser x ",")
)
)
strlst0
)
)
(setq lst (mapcar '(Lambda (x)
(list (nth 1 x) (nth 2 x))
)
lst
)
)
(entmake (append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length lst))
)
(mapcar '(lambda (pt)
(cons 10 pt)
)
lst
)
)
)
) 革天明 发表于 2015-11-3 18:35 http://bbs.mjtd.com/static/image/common/back.gif
(defun str-lst (lj / data_list ff data)
(setq data_list '()
ff (open lj "r")
将你的整理了下,去掉了一个函数
(defun str-lst(wj / a l )
(setq wj(open wj "r"))
(while(setq a(read-line wj))
(setq l(cons(read(strcat"("(vl-string-translate";, "" "x)")"))l)))
(close wj)
(reverse l))
(defun c:tt (/ pt)
(setq pt(mapcar'(lambda(x)(cons 10(cdr x)))(str-lst(getfiled "选择数据文件" "C:\\" "txt" 2))))
(entmakex(append'((0 . "LWPOLYLINE")(100 . "AcDbEntity")(100 . "AcDbPolyline"))
(list(cons 90 (length pt)))pt))
)
llsheng_73 发表于 2015-11-3 22:19 static/image/common/back.gif
将你的整理了下,去掉了一个函数
谢谢,越精简越好 能否批量生成 大神的代码不错。。支持 不断学习,顶一个
页:
[1]