明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1229|回复: 5

[提问] ★★★★★求高手完善下这个程序!提取完数据后再复制一遍★★★★★

[复制链接]
发表于 2013-9-28 11:00 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 spp_wall 于 2013-9-28 19:28 编辑

       完善下面这个程序   

1.现在点取距离没问题 但是有时候输入距离会出问题      是否能实现手输入距离和点取距离都不出现问题
2.每次提取完数据后自动复制一次数据

起止桩号中分带行车道附加车道硬路肩土路肩
起点
0
0
16.5
0
0
0
终点
107.977
0
16.5
0
0
0
起点
107.977
0
16.5
0
0
0
终点
137.977
0
11.5
0
0
0

3:如果能实现提取距离前提示  那就更完美了  提示上面的 中分带、行车道、附加车道、硬路肩、土路肩 然后再提取距离或者手工输入距离   如果是没有就手输入0记录下来
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-9-28 11:00 | 显示全部楼层

  1. (vl-load-com)

  2. (defun c:wid (/        a ang ang2 e en        fh file        len leng leng1 leng2 lst nn1 nn2 obj old_lay perpt pt pt0
  3.               pt1 pt2 pt4 px pxy py str_1) ;桩号查询
  4.   (prompt "2013-9-22  vectra 待兔  惠州路桥 2010-07-27 zo roo  CGGC 武赤公路")
  5.   (prompt "*查询线路任意点桩号* << C:zhcx>> *计算中桩坐标*")
  6.   (setq old_lay (getvar "clayer"))
  7.   (if (= (tblobjname "LAYER" "桩号标注") nil)
  8.     (progn
  9.       (entmake (list
  10.                  '(0 . "LAYER")
  11.                  '(100 . "AcDbSymbolTableRecord")
  12.                  '(100 . "AcDbLayerTableRecord")
  13.                  '(6 . "CONTINUOUS")
  14.                  '(62 . 3)
  15.                  '(70 . 0)
  16.                  (cons 2 "桩号标注")
  17.                )
  18.       )
  19.     )
  20.   )
  21.   (setvar "clayer" "桩号标注")
  22.   (setq        en (entsel "\n选择道路中心线: ")
  23.         a  (getreal "\n请输入起点桩号:")
  24.         e  (car en)
  25.         pt (cadr en)
  26.   )
  27.   (if (setq len (getreal "\n输入垂线长度(道路半幅宽):")) ;此处要加入非法输入的控制
  28.     (progn
  29.       (setq obj (vlax-ename->vla-object (car en)))
  30.     )
  31.   )

  32.   ;; A1 追加方式打开保存文件
  33.   (if (null filename)
  34.     (setq filename (getfiled
  35.                      "保存到文件"
  36.                      (strcat (getvar "dwgprefix")
  37.                              (vl-filename-base (getvar "dwgname"))
  38.                      )
  39.                      "txt"
  40.                      1
  41.                    )
  42.     )
  43.   )
  44.   (setq file (open filename "a"))
  45.   (setvar "DIMZIN" 0)



  46.   (while (setq pt0 (getpoint "\n选择查询点:"))
  47.                                         ;画曲线的垂线
  48.     (setq perpt        (vlax-curve-getclosestpointto obj pt0 t)
  49.           lst        (vlax-curve-getfirstderiv obj (vlax-curve-getparamatpoint obj perpt))
  50.           ang        (atan (/ (cadr lst) (car lst)))
  51.           pt1        (polar perpt (+ ang (* 0.5 pi)) len)
  52.           pt2        (polar perpt (- ang (* 0.5 pi)) len)
  53.                                         ;此处就是你画出来的是水平线的原因,变量换个方向即可
  54.     )
  55.     (setq ang2 (angtos (angle pt2 pt1) 0 4))
  56.     (command "pline" pt1 pt2 "")
  57.                                         ;计算桩号
  58.     (setq leng        (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
  59.           leng1        (+ a (vlax-curve-getdistatpoint e perpt))
  60.           leng2        (- leng leng1)
  61.     )
  62.                                         ;计算桩号
  63.     (if        (< leng1 0.0)
  64.       (setq fh "-")
  65.       (setq fh "+")
  66.     )
  67.     (setq nn1 (fix (/ leng1 1000.0)))
  68.     (setq nn2 (abs (- leng1 (* 1000.0 nn1))))
  69.     (if        (= nn2 0.0)
  70.       (setq str_1 (strcat fh "00"))
  71.     )
  72.     (if        (and (> nn2 0) (< nn2 10.0))
  73.       (setq str_1 (strcat (strcat fh "00") (rtos nn2 2 3)))
  74.     )
  75.     (if        (and (> nn2 10.0) (< nn2 100.0))
  76.       (setq str_1 (strcat (strcat fh "0") (rtos nn2 2 3)))
  77.     )
  78.     (if        (>= nn2 100.0)
  79.       (setq str_1 (strcat fh (rtos nn2 2 3)))
  80.     )

  81.     (setq str_1 (strcat "K" (rtos nn1 2 0) "+" (rtos nn2 2 3)))
  82.     (setq pt4 (polar pt1 (+ (* pi 0.45) ang) (* -2 (* 1.65406 0.67))))
  83.     (command "text" "j" "MC" pt4 "0.3" ang2 str_1)

  84.     ;; A2 保存数据
  85.     (setq strout (rtos leng1 2 3))
  86.     (get-distance "中分带" 'wid-dist1 'strout)
  87.     (get-distance "行车道" 'wid-dist2 'strout)
  88.     (get-distance "附加车道" 'wid-dist3 'strout)
  89.     (get-distance "硬路肩" 'wid-dist4 'strout)
  90.     (get-distance "土路肩" 'wid-dist5 'strout)
  91.     (write-line strout file)
  92.     (write-line strout file)

  93.     (setq py (rtos (nth 0 pt0)))        ;提取测量坐标系Y值
  94.     (setq px (rtos (nth 1 pt0)))        ;提取测量坐标洗X值
  95.     (setq pxy (strcat str_1 "中桩坐标:X=" px ",Y=" py))
  96.     (princ pxy)
  97.   )

  98.   ;; A3 关闭文件
  99.   (close file)
  100.   (princ)
  101. )

  102. (defun get-distance (msg default buffer / dist)
  103.   (if (null (vl-symbol-value default))
  104.     (set default 0.0)
  105.   )
  106.   (setq dist (getdist (strcat "\n输入" msg "距离 <" (rtos (vl-symbol-value default) 2 2) ">:")))
  107.   (if (null dist)
  108.     (setq dist (vl-symbol-value default))
  109.     (set default dist)
  110.   )
  111.   (set buffer (strcat (vl-symbol-value buffer) "\t" (rtos dist 2 2)))
  112. )
回复

使用道具 举报

发表于 2013-9-28 12:57 | 显示全部楼层
"每次提取完数据后自动复制一次数据“这句话是什么意思?
回复

使用道具 举报

发表于 2013-9-28 13:08 | 显示全部楼层
我试 了,上面的代码很好用啊,可以用来读钻孔里程及偏移
回复

使用道具 举报

 楼主| 发表于 2013-9-28 16:42 | 显示全部楼层
本帖最后由 spp_wall 于 2013-9-28 16:44 编辑
清风明月名字 发表于 2013-9-28 12:57
"每次提取完数据后自动复制一次数据“这句话是什么意思?

现在的格式  不太符合我需要的格式

我想把每次提取的桩号和距离 重复一次

比如   

现在的桩号只是每一段道路的起点的桩号  我的数据还需要每段的终点桩号  

而这个终点桩号  其实就是下一段道路的起点桩号   

所以把每次提取的桩号和距离 重复一遍  就可以完成了

点评

不明白  发表于 2013-9-28 20:45
回复

使用道具 举报

 楼主| 发表于 2013-9-29 08:29 | 显示全部楼层
vectra 发表于 2013-9-28 11:00

谢谢!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-11 04:49 , Processed in 0.177626 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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