snight523 发表于 2015-8-12 13:48:48

求助能否帮忙修改一下lisp,使得导出数据前加一列文字。

(defun c:tqzb (/)
    (setq cm (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (if (setq wjm (getfiled "请指定要保存的坐标文件" "e:\\" "txt" 1))
      (if (setq ssa (ssget '((0 . "LWPOLYLINE"))))
   (progn
         (setq fff (open wjm "w")
      n   (sslength ssa)
      i   0
      no0
    )
         (repeat n
         (setq dxf (entget (ssname ssa i))
      i   (1+ i)
      ptb (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 10)) dxf))
      ptb (mapcar '(lambda(x)(trans x 0 1)) ptb)
          )
          (foreach pt ptb
       (setq no (1+ no))
       (write-line
            (strcat ;(itoa no) ","
                  (rtos (carpt) 2 3) ","
                  (rtos (cadr pt) 2 3)
             )
             fff
       )
                )
         )
         (close fff)
         (princ (strcat "\n坐标已存入\"" wjm "\"中"))
   )
)
    )
    (setvar "cmdecho" cm)
    (princ)
)

以上是找的导出复合线坐标的命令,能否在导出的txt文件前加一列相同的数字,就是输入的文件名。
例如 使用命令后输入了该断面的里程 导出数据为: 偏距,高程 能否修改后使得导出数据为 里程,偏距,高程
求助各位大神。谢谢



feng83 发表于 2015-8-12 22:12:42

写得不是很清楚,不知道下面的效果是不是你要的

(defun c:tqzb (/)
    (setq cm (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (if (setq wjm (getfiled "请指定要保存的坐标文件" "e:\\" "txt" 1))
      (if (setq ssa (ssget '((0 . "LWPOLYLINE"))))
   (progn
       (setq fff (open wjm "w") n (sslength ssa) i 0no 0)
       (write-line"该断面的里程"fff)
       (repeat n
       (setq dxf (entget (ssname ssa i))
             i (1+ i)
             ptb (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 10)) dxf))
             ptb (mapcar '(lambda(x)(trans x 0 1)) ptb)
          )
       (foreach pt ptb
           (setq no (1+ no))
           (write-line(strcat "里程" (itoa no) "," "偏距" (rtos (carpt) 2 3) "," "高程" (rtos (cadr pt) 2 3))fff)
                )
         )
         (close fff)
         (princ (strcat "\n坐标已存入\"" wjm "\"中")))
          ))
    (setvar "cmdecho" cm)
    (princ)
)

llsheng_73 发表于 2015-8-13 21:16:36

本帖最后由 llsheng_73 于 2015-8-13 22:29 编辑

feng83 发表于 2015-8-12 22:12 http://bbs.mjtd.com/static/image/common/back.gif
写得不是很清楚,不知道下面的效果是不是你要的

(defun c:tqzb (/)


估计理解错了楼主的意思
按楼主的说法是希望点一条线,然后输入这条线的里程
然后文件里边在原来输出数据基础上,每一个开始都写上刚才输入的那个数值

文件名以里程来命名

这样楼主或者他的同事才知道哪个文件是哪条断面,所以文件中里程位置是同一个,不需要进行计数

另外这种断面数据文件一般都会有专门的断面绘制程序来处理,所以数据格式及内容都得严格按程序所规定的来

feng83 发表于 2015-8-13 21:39:14

llsheng_73 发表于 2015-8-13 21:16 static/image/common/back.gif
估计理解错了楼主的意思
按楼主的说法是希望点一条线,然后输入这条线的里程
然后文件里边在原来输出 ...

还是不明白,,,什么叫里程,量程什么的

feng83 发表于 2015-8-13 21:48:39

楼主把要表达的意思说明白点啊,这里面很多人不是从事你那个行业的,都不明白你说什么,如果说不清,可以上张图表达一下,你想要得到的效果

llsheng_73 发表于 2015-8-13 22:30:38

feng83 发表于 2015-8-13 21:39 static/image/common/back.gif
还是不明白,,,什么叫里程,量程什么的

打字打错了回去我问下是哪个手指乱打的。。。。。

feng83 发表于 2015-8-14 18:39:57

llsheng_73 发表于 2015-8-13 22:30 static/image/common/back.gif
打字打错了回去我问下是哪个手指乱打的。。。。。

呵呵,,,,

snight523 发表于 2015-8-25 13:44:45

谢谢各位大侠的帮助,怪我没说的清楚,这个lisp启动后需要输入保存的文件名 这个文件名就输成里程桩号,然后输出的数据前面就添加这个固定的里程桩号。如下图

feng83 发表于 2015-8-25 20:58:17

本帖最后由 feng83 于 2015-8-25 21:00 编辑

snight523 发表于 2015-8-25 13:44 static/image/common/back.gif
谢谢各位大侠的帮助,怪我没说的清楚,这个lisp启动后需要输入保存的文件名 这个文件名就输成里程桩号,然后 ...
里程桩号是多线段的长度还是什么?
你的文件名是1206,前面固定的里程桩号是150?
你给一个要导出的CAD图档,然后指明要导出哪个,然后附上一个你想要的结果,这样大家即使看不懂你说的,也可以从图形中找答案的

fl202 发表于 2015-8-26 09:16:56

snight523 发表于 2015-8-25 13:44 static/image/common/back.gif
谢谢各位大侠的帮助,怪我没说的清楚,这个lisp启动后需要输入保存的文件名 这个文件名就输成里程桩号,然后 ...

我也觉得你没说清楚。你应该上2张图,1张是现在的图。另1张是你希望改造后的效果图。

2个对比就能看清楚了。否则光说专业术语,听不懂。
页: [1]
查看完整版本: 求助能否帮忙修改一下lisp,使得导出数据前加一列文字。