明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1377|回复: 9

[提问] 求助能否实现将断面数据导入图中绘制成复合线的命令

[复制链接]
发表于 2015-10-30 11:46 | 显示全部楼层 |阅读模式
本帖最后由 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文件将这些数据用复合线绘制在图中?
求大侠帮忙。。
发表于 2015-10-30 12:53 | 显示全部楼层
(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 14:31 | 显示全部楼层
革天明 发表于 2015-10-30 12:53
(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 如何能剔除第一个数据汇总后边的坐标
发表于 2015-10-30 19:33 | 显示全部楼层
snight523 发表于 2015-10-30 14:31
真是太感激了, 已经可以解决问题了。如果数据的格式是这样的能否导入呢?
120,-36.485,457.523
120,-3 ...

也可以导入啊 将二楼的程序改一下就可以了
至于你说汇总坐标的话 也简单啊,将读取的坐标重新写入一个新文件就好
或者使用批处理
发表于 2015-11-3 18:35 | 显示全部楼层
(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 22:19 | 显示全部楼层
革天明 发表于 2015-11-3 18:35
(defun str-lst (lj / data_list ff data)
  (setq        data_list '()
        ff          (open lj "r")


将你的整理了下,去掉了一个函数
  1. (defun str-lst(wj / a l )
  2.   (setq wj(open wj "r"))
  3.   (while(setq a(read-line wj))
  4.     (setq l(cons(read(strcat"("(vl-string-translate";,        ""   "x)")"))l)))
  5.   (close wj)
  6.   (reverse l))
  7. (defun c:tt (/ pt)
  8.   (setq pt(mapcar'(lambda(x)(cons 10(cdr x)))(str-lst(getfiled "选择数据文件" "C:\\" "txt" 2))))
  9.   (entmakex(append'((0 . "LWPOLYLINE")(100 . "AcDbEntity")(100 . "AcDbPolyline"))
  10.                  (list(cons 90 (length pt)))pt))
  11.          )

发表于 2015-11-9 09:29 | 显示全部楼层
llsheng_73 发表于 2015-11-3 22:19
将你的整理了下,去掉了一个函数

谢谢,越精简越好
发表于 2019-9-21 09:39 来自手机 | 显示全部楼层
能否批量生成
发表于 2020-11-12 20:22 来自手机 | 显示全部楼层
大神的代码不错。。支持
发表于 2022-9-8 14:20 | 显示全部楼层
不断学习,顶一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-11 11:09 , Processed in 0.158817 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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