明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3791|回复: 18

[测绘] 绘制公路曲线标准断面(源码)

[复制链接]
发表于 2016-2-12 22:20 | 显示全部楼层 |阅读模式
本帖最后由 ashleytgg 于 2016-2-12 22:18 编辑

程序简介:
1 主要是方便道路测量,将平面曲线,竖曲线、横坡 综合与断面上,以方便用GPS进行现场测量。
2  未对程序进行纠错处理,只是提供了一个大概的思路。
3 希望改程序能对测量的同行有所帮助,不足的地方乐于大家指出,好改正。虽然是小程序,但也花了我过年一周多的时间,改进和修正。
  在新的一年里,祝福我的家人我的亲人,新年快乐,身体健康,每天开心。也祝福大家 一切好。
{ 下面是部分代码  )
  1. ;;对一个二维点集合group_point 绕 点center 旋转 ang 弧度
  2. (defun rotate_group_point (group_point ang center / lst)
  3.   (setq  group_point
  4.    (mapcar '(lambda (point)
  5.         (list (- (car point) (car center))
  6.         (- (cadr point) (cadr center))
  7.         )
  8.       )
  9.      group_point
  10.    )
  11.   )
  12.   (setq  lst (list (list (cos ang) (* (sin ang) -1))
  13.       (list (sin ang) (cos ang))
  14.       )
  15.   )
  16.   (setq  group_point
  17.    (mapcar '(lambda (point)
  18.         (apply '(lambda (element_1 element_2)
  19.             (list (+ (* (car element_1) (car point))
  20.                (* (cadr element_1) (cadr point))
  21.             )
  22.             (+ (* (car element_2) (car point))
  23.                (* (cadr element_2) (cadr point))
  24.             )
  25.             )
  26.           )
  27.          lst
  28.         )
  29.       )
  30.      group_point
  31.    )
  32.   )
  33.   (setq
  34.     group_point
  35.      (mapcar '(lambda (x)
  36.     (list (+ (car x) (car center))
  37.           (+ (cadr x) (cadr center))
  38.     )
  39.         )
  40.        group_point
  41.      )
  42.   )
  43. )
  44. ;; 8888888888888888  88888888888888888888888  88888888888888888   

  45. ;;定义一个队group_data_out 数组进行群变换的函数 ,group_data_out 结构为:(Z_桩号 U ang_象限角 )  
  46. ;; 对点集合 group_point 首先进行镜像变换,然后把变换后的点集合从U_origin 以为到U_insert ,然后围绕U_insert点旋转制定的角度
  47. (defun transformation_group_data_out
  48.              (group_data_out
  49.               reflex     data_origin
  50.               data_insert  /
  51.               group_point  quadrant_ang
  52.               ang_Δ     ang
  53.               U_origin     U_insert
  54.               group     i
  55.              )

  56.   (setq group (append (list data_origin) group_data_out))
  57.   (if (= reflex -1)
  58.     (setq group
  59.      (mapcar '(lambda (lst / Z U ang)
  60.           (setq Z  (car lst)
  61.           U  (cadr lst)
  62.           ang  (caddr lst)
  63.           )
  64.           (list Z
  65.           (list (car U)
  66.           (* (cadr U) -1)
  67.           )
  68.           (* ang -1)
  69.           )
  70.         )
  71.        group
  72.      )
  73.     )
  74.   )          ; (if (= reflex -1) 函数结束
  75.   (setq  data_origin    (car group)
  76.   group_data_out (cdr group)

  77.   )
  78.   ;; 对group_data_out 数组进行平移,使得原坐标系中的U_origin点,和实际线元的起点U_insert向符合
  79.   (setq  U_origin (cadr data_origin)
  80.   U_insert (cadr data_insert)
  81.   )
  82.   (setq  group_data_out
  83.    (mapcar '(lambda (lst / Z U x y ang)
  84.         (setq Z   (car lst)
  85.         U   (cadr lst)
  86.         x   (+ (- (car U) (car U_origin))
  87.          (car U_insert)
  88.             )
  89.         y   (+ (- (cadr U) (cadr U_origin))
  90.          (cadr U_insert)
  91.             )
  92.         ang (caddr lst)
  93.         )
  94.         (list Z (list x Y) ang)
  95.       )
  96.      group_data_out
  97.    )
  98.   )
  99.   ;; 对 group_data_out 数组,以线元的起点U_insert进行旋转 quadrant_ang- ang 角度操作
  100.   (setq  ang       (caddr data_origin)
  101.   quadrant_ang (caddr data_insert)
  102.   )

  103.   (setq  group_point
  104.    (mapcar 'cadr group_data_out)
  105.   )
  106.   (setq  ang_Δ      (- quadrant_ang ang)
  107.   group_point (rotate_group_point group_point ang_Δ U_insert)
  108.   )
  109.   (setq  i 0
  110.   group_data_out
  111.    (mapcar '(lambda (lst / U ang)
  112.         (setq U   (nth i group_point)
  113.         ang (caddr lst)
  114.         i   (+ i 1)
  115.         )
  116.         (list (car lst) U (+ ang ang_Δ))

  117.       )
  118.      group_data_out
  119.    )
  120.   )
  121. )          ; (defun transformation_group_data_out 函数结束
  122. ;; (transformation_group_data_out group_data_out reflex   data_origin  data_insert)   





  123. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888  
  124. ;;  人口变量, 缓和曲线参数A,  缓和曲线长L  
  125. (defun solve_transition_curve_sub (A         L     /
  126.            group       U     deflection
  127.            functon_parameter
  128.           )
  129.   ;; (setq L 40.0 A 200 )   
  130.   (if (> L 0.000001)
  131.     (progn
  132.       (setq L (* L 1.0)
  133.       A (* A 1.0)
  134.       )
  135.       (setq functon_parameter
  136.        '(((1 0 1.0 1)
  137.     (5 4 40.0 -1)
  138.     (9 8 3456.0 1)
  139.     (13 12 599040.0 -1)
  140.     (17 16 1.75473e+007 1)
  141.          )
  142.          ((3 2 6.0 1)
  143.     (7 6 336.0 -1)
  144.     (11 10 42240.0 1)
  145.     (15 14 9.6768e+006 -1)
  146.     (19 18 3.5301e+009 1)
  147.          )
  148.         )
  149.       )
  150.       ;; 把 L A 带入函数 进行求值  
  151.       (setq group
  152.        (mapcar '(lambda (subset)
  153.       (mapcar  '(lambda (lst)
  154.            (apply '(lambda (a_1 a_2 a_3 a_4)
  155.                (*  (/ (expt L a_1)
  156.                (* (expt A a_2) a_3)
  157.             )
  158.             a_4
  159.                )
  160.              )
  161.             lst
  162.            )
  163.          )
  164.         subset
  165.       )
  166.           )
  167.          functon_parameter
  168.        )
  169.       )

  170.       (setq U
  171.        (mapcar '(lambda (subset)
  172.       (apply '+ subset)
  173.           )
  174.          group
  175.        )
  176.       )

  177.       (setq deflection
  178.        (/ (expt L 2.0) (* (expt A 2.0) 2.0))
  179.       )          ;  J为弧度
  180.       (list U deflection)
  181.     )          ; progn函数结束
  182.     ;; 当缓和曲线长L很小时
  183.     (list '(0 0) 0)
  184.   )          ;  if 函数结束
  185. )
  186. ;;  输出参数为切线支距坐标复数U,偏角deflection  
  187. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888888



  188. ;; 当线元是缓和曲线时, subset 数据结构为
  189. ;;  ( R_start R_end  transition_parameter    reflex   quadrant_ang    Z_start  U_insert )   
  190. (defun solve_transition_curve (group_Z     subset      /
  191.              A     Lh         lst
  192.              Lh_start     Lh_end      U_Z_start
  193.              β_start     Z_end       group_data_out
  194.              data_origin data_insert
  195.             )
  196.   (apply
  197.     '(lambda (R_start        R_end        transition_parameter
  198.         reflex        quadrant_ang    Z_start
  199.         U_insert
  200.        )

  201.        (setq Lh       (car transition_parameter) ; 缓和曲线长度  
  202.        A       (cadr transition_parameter) ; 缓和曲线参数
  203.        R_start (* R_start 1.0)
  204.        R_end   (* R_end 1.0)
  205.        )
  206.        (if (= R_start 0)
  207.    (setq R_start (expt 10.0 30))
  208.        )
  209.        (if (= R_end 0)
  210.    (setq R_end (expt 10.0 30))
  211.        )
  212.        (if (> R_start R_end)
  213.    ;; 正向缓和曲线时  
  214.    (progn
  215.      (setq Lh_start  (/ (expt A 2) R_start) ; 起点缓和曲线长度
  216.      lst     (solve_transition_curve_sub A Lh_start)
  217.      U_Z_start (car lst)  ; 缓和曲线的起点切线支距坐标
  218.      β_start  (cadr lst)  ;缓和曲线起点象限角
  219.      )
  220.      ;; 对桩号集合group_Z 进行操作
  221.      (setq group_data_out
  222.       (mapcar '(lambda (z / L lst U_Z β_Z)
  223.            (setq L (+ (- Z Z_start) Lh_start))
  224.            (setq lst  (solve_transition_curve_sub A L)
  225.            U_Z  (car lst)
  226.            β_Z  (cadr lst)
  227.            )
  228.            (list Z U_Z β_Z)
  229.          )
  230.         group_Z
  231.       )
  232.      )
  233.    )
  234.    ;; 反向缓和曲线时  
  235.    (progn
  236.      (setq Lh_start  (/ (expt A 2) R_start)
  237.      lst     (solve_transition_curve_sub A Lh_start)
  238.      U_Z_start (car lst)
  239.      β_start  (cadr lst)
  240.      )
  241.      (setq Lh_end  (/ (expt A 2) R_end) ; 终点缓和曲线长度
  242.      Z_end  (+ Z_start Lh)
  243.      )
  244.      (setq group_data_out
  245.       (mapcar '(lambda (z / L lst U_Z β_Z)
  246.            (setq L (+ (- Z_end Z) Lh_end))
  247.           ; 加桩点的缓和曲线长度,从完整缓和曲线的起点算起
  248.            (setq lst  (solve_transition_curve_sub A L)
  249.            U_Z  (car lst)
  250.            β_Z  (cadr lst)
  251.            )
  252.            (list Z U_Z β_Z)
  253.          )
  254.         group_Z
  255.       )
  256.      )
  257.      ;;此时生成的group_data_out与标准的正向缓和曲线线(原点0,启始方位角0,右手螺旋坐标系) 沿着X轴对称 ,
  258.      ;;所以要对group_data_ou 进行沿x轴镜像  
  259.      (setq group_data_out
  260.         (mapcar  '(lambda (lst / Z U ang)
  261.              (setq Z   (car lst)
  262.              U   (cadr lst)
  263.              ang (caddr lst)
  264.              )
  265.              (list Z
  266.              (list (* (car U) -1)
  267.                    (cadr U)
  268.              )
  269.              (* ang -1)
  270.              )
  271.            )
  272.           group_data_out
  273.         )

  274.      U_Z_start
  275.         (list (* (car U_Z_start) -1)
  276.               (cadr U_Z_start)
  277.         )

  278.      β_start
  279.         (* β_start -1)
  280.      )
  281.    )

  282.        )        ; (if (> R_start R_end)  函数结束  
  283.        ;; 创建transformation_group_data_out 函数用参数   data_origin  data_insert  
  284.        (setq data_origin (list 0 U_Z_start β_start)
  285.        data_insert (list 0 U_insert quadrant_ang)
  286.        )
  287.        ;; 对点集合 group_point 首先进行镜像变换,然后把变换后的点集合从U_origin 以为到U_insert ,然后围绕U_insert点旋转制定的角度
  288.        (transformation_group_data_out
  289.    group_data_out
  290.    reflex
  291.    data_origin
  292.    data_insert
  293.        )
  294.      )
  295.     subset
  296.   )
  297. )
  298. ;;88888888888888888888888888888888888888888888888888888888888888888   (expt 10.0 30)   










  299. ;; 当线元是圆曲线时 subset 数据结构为
  300. ;;  ( R_start R_end  lenth    reflex   quadrant_ang    Z_start  U_insert   )   
  301. (defun solve_circular_arc (group_Z   subset         /
  302.          i     group_data_out
  303.          U_center   data_origin   data_insert
  304.         )


  305.   ;; (tang_test   group_data_out )   
  306.   (apply
  307.     '(lambda (R_start R_end lenth reflex quadrant_ang Z_start U_insert)

  308.        ;; 设定圆曲线圆心为原点(0 R_start),方向为 右手坐标系,圆曲线线起点坐标(0   0 ),切线为X轴

  309.        (setq R_start  (* R_start 1.0)
  310.        U_center (list 0 R_start)
  311.        )
  312.        (setq group_data_out
  313.         (mapcar '(lambda (Z / L β U_Z ang)
  314.        (setq L   (- Z Z_start)
  315.              β  (/ L R_start)
  316.              ang (- β (/ pi 2))
  317.              U_Z (polar U_center ang R_start)
  318.        )
  319.        (list Z U_Z β)
  320.            )
  321.           group_Z
  322.         )
  323.        )
  324.        ;; 创建transformation_group_data_out 函数用参数   data_origin  data_insert  
  325.        (setq data_origin (list 0 (list 0 0) 0)
  326.        data_insert (list 0 U_insert quadrant_ang)
  327.        )
  328.        ;; 对点集合 group_point 首先进行镜像变换,然后把变换后的点集合从U_origin 以为到U_insert ,然后围绕U_insert点旋转制定的角度
  329.        (transformation_group_data_out
  330.    group_data_out
  331.    reflex
  332.    data_origin
  333.    data_insert
  334.        )
  335.      )
  336.     subset
  337.   )
  338. )
  339. ;;88888888888888888888888888888888888888888888888888888888888888888  





  340. ;; 当线元是直线时 subset 数据结构为
  341. ;;  ( R_start R_end  lenth    reflex   quadrant_ang    Z_start  U_insert   )   
  342. (defun solve_straightway
  343.        (group_Z subset / group_data_out)

  344.   ;; (tang_test   group_data_out )   
  345.   (apply
  346.     '(lambda (R_start R_end lenth reflex quadrant_ang Z_start U_insert)
  347.        (setq group_data_out
  348.         (mapcar '(lambda (Z / L U_Z)
  349.        (setq L   (- Z Z_start)
  350.              U_Z (polar U_insert quadrant_ang L)
  351.        )
  352.        (list Z U_Z quadrant_ang)
  353.            )
  354.           group_Z
  355.         )
  356.        )
  357.      )
  358.     subset
  359.   )
  360. )
  361. ;;88888888888888888888888888888888888888888888888888888888888888888  





  362. ;; 交点参数的文件格式, 当交点为完整缓和曲线时 :  [ ( 转点号I nil)   U_转点  ( Ls1 R Ls2 )  ] ,
  363. ;; 当交点为非完整缓和曲线交点时 :   [ ( 转点号I t)  U_转点   ( R_start  R  R_end  Ls1   Ls2) ]  
  364. ;; 输出变量turning_point_group : [ ( 转点号I nil)   U_转点  ( Ls1 R Ls2 )(α1  α2   Δ Dist_1   Dist_2 )]   
  365. (defun create_turning_point_group
  366.           (/      n       i        lst
  367.            fname    group    turning_point_group
  368.            f1
  369.            ;; 求交点距离角度时用到的参数  
  370.            α1      α2       Δ        Dist_1
  371.            Dist_2   lst_1    lst_2    lst_3
  372.            U_1      U_2       U_3
  373.           )
  374.   ;; turning_point_group 格式 [ ( 转点号I nil)   U_转点  ( Ls1 R Ls2 )  ]  , 完整缓和曲线时  
  375.   ;;  or [ ( 转点号I nil)  U_转点   ( R_start R  R_end  Ls1   Ls2) ]  , 非完整缓和曲线交点时   
  376.   (setq fname (getfiled "输入存放交点参数的文件" "" "txt" 1))
  377.   (setq f1 (open fname "r"))
  378.   (setq group nil)
  379.   (while (setq lst (read-line f1))
  380.     (setq group (cons lst group))
  381.   )          ; while (/= list  nil)循环函数结束
  382.   (close f1)
  383.   (setq  i 0
  384.   group_turning_point
  385.    nil
  386.   n (length group)
  387.   )
  388.   (repeat n
  389.     (setq lst          (read (nth i group))
  390.     group_turning_point
  391.             (cons lst group_turning_point)
  392.     )
  393.     (setq i (+ i 1))
  394.   )
  395.   (setq  group_turning_point
  396.    (vl-sort group_turning_point
  397.       '(lambda (lst1 lst2)
  398.          (<  (car (car lst1))
  399.       (car (car lst2))
  400.          )
  401.        )

  402.    )
  403.   )
  404.   ;; 对数组group_turning_point  [ ( 转点号I nil)  U_转点 ( Ls1 R Ls2 )  ] , 加入第三项 (α1  α2   Δ Dist_1   Dist_2 )  
  405.   (setq  i 0
  406.   group nil
  407.   )
  408.   (repeat n
  409.     (cond
  410.       ;;当转点为[第二个->倒数第二个] 转点时  
  411.       ((and (/= i 0) (/= i (- n 1)))
  412.        (progn
  413.    (setq lst_1 (nth (- i 1) group_turning_point))
  414.    (setq lst_2 (nth i group_turning_point))
  415.    (setq lst_3 (nth (+ i 1) group_turning_point))
  416.    (setq U_1 (cadr lst_1)
  417.          U_2 (cadr lst_2)
  418.          U_3 (cadr lst_3)
  419.    )
  420.    (setq Dist_1 (distance U_1 U_2)
  421.          Dist_2 (distance U_2 U_3)
  422.    )
  423.    (setq α1 (angle U_1 U_2)
  424.          α2 (angle U_2 U_3)
  425.          Δ  (- α2 α1)
  426.    )
  427.    ;; 对转角Δ 使其控制在(-pi pi) 之间
  428.    (cond
  429.      ((and (>= Δ (* -1 pi))
  430.      (< Δ pi)
  431.       )
  432.       (setq Δ Δ)
  433.      )
  434.      ((< Δ (* -1 pi))
  435.       (setq Δ (+ Δ (* 2 pi)))
  436.      )
  437.      ((> Δ pi)
  438.       (setq Δ (- Δ (* 2 pi)))
  439.      )
  440.    )
  441.    (setq lst   (list α1 α2 Δ Dist_1 Dist_2)
  442.          lst   (append lst_2 (list lst))
  443.          group (cons lst group)
  444.    )
  445.        )
  446.       )
  447.       ;;当为第一个转点时的情形 起始转点->下一转点
  448.       ((= i 0)
  449.        (progn
  450.    (setq lst_2 (nth i group_turning_point))
  451.    (setq lst_3 (nth (+ i 1) group_turning_point))
  452.    (setq
  453.      U_2 (cadr lst_2)
  454.      U_3 (cadr lst_3)
  455.    )
  456.    (setq Dist_1 0
  457.          Dist_2 (distance U_2 U_3)
  458.          α2    (angle U_2 U_3)
  459.          lst    (list 0 α2 0 0 Dist_2)
  460.    )
  461.    (setq lst   (append lst_2 (list lst))
  462.          group (cons lst group)
  463.    )
  464.        )
  465.       )
  466.       ;; 当转点为最后一个转点时的情形 上一转点->终点转点   
  467.       ((= i (- n 1))
  468.        (progn
  469.    (setq lst_1 (nth (- i 1) group_turning_point))
  470.    (setq lst_2 (nth i group_turning_point))
  471.    (setq U_1 (cadr lst_1)
  472.          U_2 (cadr lst_2)
  473.    )
  474.    (setq Dist_1 (distance U_1 U_2)
  475.          α1    (angle U_1 U_2)

  476.          lst    (list α1 0 0 Dist_1 0)
  477.    )
  478.    (setq lst   (append lst_2 (list lst))
  479.          group (cons lst group)
  480.    )
  481.        )
  482.       )
  483.     )          ; cond  函数结束  
  484.     (setq i (+ i 1))
  485.   )          ; (repeat n  函数结束
  486.   (setq group_turning_point (reverse group))

  487.           ; 排序函数结束
  488. )          ;  create_turning_point_group_2 函数结束  
  489. ;; (setq group_turning_point ( create_turning_point_group )  )   




  490. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888  
  491. ;;  人口变量缓和曲线长Lh, 缓和曲线半径R,  出口变量缓和曲线出口段内移值p,切线增量q ,偏角β,缓和曲线参数A   
  492. (defun evaluation_transition_curve
  493.            (Lh        R    /
  494.             A        p    q
  495.             β        group
  496.             functon_parameter
  497.            )
  498.   ;; (setq lh 50 r 480 )  
  499.   (setq  R  (* 1.0 R)
  500.   Lh (* 1.0 Lh)
  501.   )
  502.   (setq  functon_parameter
  503.    '(((2 1 24.0)
  504.       (4 3 -2688.0)
  505.       (6 5 506880.0)
  506.       (8 7 -1.54829e+008)
  507.      )
  508.      ((1 0 2.0)
  509.       (3 2 -240.0)
  510.       (5 4 34560.0)
  511.       (7 6 -8.38656e+006)
  512.       (9 8 3.15851e+009)
  513.      )
  514.     )
  515.   )
  516.   ;;把参数parameter_easement_curve  带入求值,
  517.   (setq  group
  518.    (mapcar '(lambda (subset)
  519.         (mapcar '(lambda (lst)
  520.              (apply '(lambda (a_1 a_2 a_3)
  521.            (/ (expt Lh a_1)
  522.               (* (expt R a_2) a_3)
  523.            )
  524.                )
  525.               lst
  526.              )
  527.            )
  528.           subset
  529.         )
  530.       )
  531.      functon_parameter
  532.    )
  533.   )
  534.   (setq  group
  535.    (mapcar '(lambda (subset)
  536.         (apply '+ subset)
  537.       )
  538.      group
  539.    )
  540.   )
  541.   (setq  p  (car group)
  542.   q  (cadr group)
  543.   β (/ Lh (* R 2.0))
  544.   A  (sqrt (* R Lh))
  545.   )
  546.   ;; 出口变量缓和曲线出口段内移值p,切线增量q ,偏角β,缓和曲线参数A   
  547.   (list p q β A)
  548. )          ;   evaluation_easement_curve 函数结束         
  549. ;;  (evaluation_transition_curve  50  480  )  (evaluation_transition_curve   50  480  )        
  550. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888888



  551. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888
  552. ;; (setq group_turning_point ( create_turning_point_group )  )   
  553. ;; 求基本对称路线平曲线的 曲线要素 入口变量: [ ( 转点号I nil)   U_转点  ( Lh R  Lh  )(α1  α2   Δ Dist_1   Dist_2 )]  
  554. ;; 出口变量:该转点各线元的数据[( 转点号I j)   R_start R_end  transition_parameter   reflex  quadrant_ang    Z_start  U_insert )  ]   
  555. (defun evaluation_symmetrical_curve (subset / Z_I U group_data_out)
  556.   ;; (setq subset (nth 15   group_turning_point ))
  557.   (setq  Z_I    (car (car subset))  ; 转点编号
  558.   subset (cdr subset)
  559.   )
  560.   ;; (setq U_ZD_real (car subset) lst1  (cadr subset) lst2  (caddr subset) )   
  561.   (apply '(lambda (U_ZD_real       lst1     lst2     /
  562.        ;; 计算交点用参数
  563.        quadrant_ang       Δ
  564.        ;; 计算切线长度 T1 T2 所用参数
  565.        T1      T2       a_1      a_2      tangent
  566.        cscΔ    cotΔ
  567.        ;; 计算缓和曲线的内蕴参数
  568.        parameter       Lh1      Lh2      R
  569.        A1      A2       p1        p2       q1
  570.        q2      β1       β2      βy      E
  571.        Ly      L       adjusted_value    reflex
  572.        ;; 建立线元坐标系所用参数
  573.        U_center U_JD     U_ZH     U_HY     U_QZ
  574.        U_YH      U_HZ
  575.        ;; 桩号用参数
  576.        Z_JD      Z_ZH     Z_HY     Z_QZ     Z_YH
  577.        Z_HZ
  578.        ;; 切线角用参数  
  579.        ang_JD   ang_ZH   ang_HY   ang_QZ   ang_YH
  580.        ang_HZ
  581.        ;; 对数组 group_data_out 进行移位,镜像,旋转 用参数
  582.        quadrant_ang       data_origin       data_insert
  583.        ;;创建线元列表所用参数  
  584.        lst      lst2     lst3     lst4     Line_segments
  585.       )
  586.       (setq Lh1         (car lst1)
  587.       R         (cadr lst1)
  588.       Lh2         (caddr lst1)
  589.       quadrant_ang
  590.              (car lst2) ; 设计交点的入口方位角  
  591.       Δ         (caddr lst2) ; 设计交点偏转系数

  592.       )
  593.       (if  (>= Δ 0)
  594.         (setq reflex 1)
  595.         (setq reflex -1
  596.         Δ     (* -1 Δ)
  597.         )
  598.       )
  599.       (setq
  600.         parameter
  601.       (evaluation_transition_curve Lh1 R)
  602.         ;; 出口变量缓和曲线出口段内移值p,切线增量q ,偏角β,缓和曲线参数A   
  603.         p1  (car parameter)
  604.         q1  (cadr parameter)
  605.         β1  (caddr parameter)
  606.         A1  (nth 3 parameter)
  607.       )
  608.       (cond
  609.         ((= Lh1 Lh2)
  610.          (setq
  611.      β2 β1
  612.      A2  A1
  613.          )
  614.          (setq tangent (/ (sin (/ Δ 2)) (cos (/ Δ 2)))
  615.          T1       (+ (* (+ R p1) tangent) q1)
  616.          T2       T1
  617.           ; 切线长度
  618.          )
  619.         )
  620.         ;; 当出口、进口缓和曲线长度不相等时
  621.         ((/= Lh1 Lh2)
  622.          (setq
  623.      parameter
  624.          (evaluation_transition_curve Lh2 R)
  625.      ;; 出口变量缓和曲线出口段内移值p,切线增量q ,偏角β,缓和曲线参数A   
  626.      p2     (car parameter)
  627.      q2     (cadr parameter)
  628.      β2     (caddr parameter)
  629.      A2     (nth 3 parameter)
  630.          )
  631.          (setq cscΔ (/ 1.0 (sin Δ))
  632.          cotΔ (/ (cos Δ) (sin Δ))
  633.          a_1   (* (+ R p2) cscΔ)
  634.          a_2   (* (+ R p1) cotΔ)
  635.          T1     (+ (- a_1 a_2)
  636.             q1
  637.          )
  638.          a_1   (* (+ R p1) cscΔ)
  639.          a_2   (* (+ R p2) cotΔ)
  640.          T2     (+ (- a_1 a_2)
  641.             q2
  642.          )
  643.          )
  644.         )
  645.       )        ; (cond  函数 结束
  646.       (setq a_1     (expt (+ R p1) 2)
  647.       a_2     (expt (- T1 q1) 2)
  648.       E     (- (sqrt (+ a_1 a_2)) R) ; 外距
  649.       βy     (- Δ (+ β1 β2))
  650.       Ly     (* βy R)
  651.           ; 圆曲线长度
  652.       L     (+ Ly (+ Lh1 Lh2))
  653.       adjusted_value (- (+ T1 T2) L) ; 切曲差  
  654.       )
  655.       ;; 以ZH点为坐标原点,该点的切线方向为X轴,建立右手螺旋坐标系 ,转角 Δ取正数   
  656.       ;;转点的桩号 Z_JD = z_QZ + adjusted_value
  657.       (setq ang_JD (/ Δ 2)
  658.       ;; 设置为U_JD ->U_center的垂直方向
  659.       ang_ZH 0
  660.       ang_HY β1
  661.       ang_QZ (+ β1 (/ βy 2))
  662.       ang_YH (- Δ β2)
  663.       ang_HZ Δ
  664.       )
  665.       ;;   (angtos   (+(/ (- pi Δ) 2)Δ)   1 6  )   
  666.       (setq
  667.         U_JD     (list T1 0)
  668.         U_center (list q1 (+ R p1))
  669.         U_ZH     (list 0 0)  ;向量U_center ->U_JD 的方位角 (+ (/ Δ 2)pi)   
  670.         U_HY     (polar U_center (- ang_HY (* pi 0.5)) R)
  671.         U_QZ     (polar U_center (- ang_QZ (* pi 0.5)) R)
  672.         U_YH     (polar U_center (- ang_YH (* pi 0.5)) R)
  673.         U_HZ     (polar U_JD Δ T2)
  674.       )
  675.       (setq Z_JD T1
  676.       Z_ZH 0
  677.       Z_HY Lh1
  678.       Z_QZ (+ Lh1 (/ Ly 2))
  679.       Z_YH (+ Lh1 Ly)
  680.       Z_HZ L
  681.       )
  682.       (setq group_data_out
  683.        (list
  684.          (list Z_JD U_JD ang_JD)
  685.          (list Z_ZH U_ZH ang_ZH)
  686.          (list Z_HY U_HY ang_HY)
  687.          (list Z_QZ U_QZ ang_QZ)
  688.          (list Z_YH U_YH ang_YH)
  689.          (list Z_HZ U_HZ ang_HZ)
  690.        )
  691.       )
  692.       ;; 创建transformation_group_data_out 函数用参数   data_origin  data_insert  
  693.       (setq
  694.         data_origin (list 0 U_JD 0)
  695.         data_insert (list 0 U_ZD_real quadrant_ang)
  696.       )
  697.       ;; 对点集合 group_point 首先进行镜像变换,然后把变换后的点集合从U_origin 以为到U_insert ,然后围绕U_insert点旋转制定的角度quadrant_ang
  698.       (setq group_data_out
  699.        (transformation_group_data_out
  700.          group_data_out
  701.          reflex
  702.          data_origin
  703.          data_insert
  704.        )
  705.       )
  706.       ;;利用group_data_out数组 设置线元参数: (( 转点号I j)  R_start R_end  transition_parameter  reflex quadrant_ang  Z_start  U_insert )
  707.       (cond
  708.         ((and (/= Lh1 0)
  709.         (/= Lh2 0)
  710.          )
  711.          (setq lst  (list 1 2 4)
  712.          lst3 (list 0 1 2)
  713.          )
  714.         )
  715.         ((and (= Lh1 0)
  716.         (/= Lh2 0)

  717.          )
  718.          (setq lst  (list 2 4)
  719.          lst3 (list 1 2)
  720.          )
  721.         )
  722.         ((and (/= Lh1 0)
  723.         (= Lh2 0)
  724.          )
  725.          (setq lst  (list 1 2)
  726.          lst3 (list 0 1)
  727.          )
  728.         )
  729.         ((and (= Lh1 0)
  730.         (= Lh2 0)
  731.          )
  732.          (setq lst  (list 2)
  733.          lst3 (list 1)
  734.          )
  735.         )
  736.       )        ; cond  函数结束  
  737.       (setq
  738.         group
  739.           (mapcar '(lambda (i / lst2)
  740.                (setq lst2 (nth i group_data_out))
  741.                (list (caddr lst2) (car lst2) (cadr lst2))
  742.              )
  743.             (list 1 2 4)
  744.           )
  745.         lst_4      (list (list (list Z_I 0) 0 R (list Lh1 A1) reflex)
  746.           (list (list Z_I 1) R R Ly reflex)
  747.           (list (list Z_I 2) R 0 (list Lh2 A2) reflex)
  748.           )
  749.         Line_segments (mapcar '(lambda (i)
  750.                (append (nth i lst_4) (nth i group))
  751.              )
  752.             lst3
  753.           )
  754.       )
  755.       (list Line_segments (list T1 T2 adjusted_value))
  756.     )
  757.    subset
  758.   )

  759. )          ;   evaluation_easement_curve 函数结束
  760. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888888   





  761. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888  
  762. ;; (setq group_turning_point ( create_turning_point_group )  )   
  763. ;; 求包含非完整缓和曲线的线元要素 入口变量: [ ( 转点号I T)   U_转点  ( R_start R R_end   Lh1  Lh2  )(α1  α2   Δ Dist_1   Dist_2 )]
  764. ;; 出口变量:该转点各线元的数据[( 转点号I j)   R_start R_end  transition_parameter   reflex  quadrant_ang    Z_start  U_insert )  ]   
  765. (defun evaluation_no_symmetrical_curve (subset / Z_I U group_data_out)
  766.   ;; (setq subset (nth 11   group_turning_point ))
  767.   (setq  Z_I   (car (car subset))  ; 转点编号
  768.   subset_2 (cdr subset)
  769.   )
  770.   ;; (setq U_ZD_real (car subset_2) lst1  (cadr subset_2) lst2  (caddr subset_2) )   
  771.   (apply '(lambda (U_ZD_real lst1      lst2   /
  772.        ;; 计算交点用参数
  773.        quadrant_ang         Δ
  774.        ;; 计算切线长度 T1 T2 所用参数
  775.        T1       T2         group_Z   Lh1_start Lh2_start
  776.        ;; 计算缓和曲线的内蕴参数
  777.        parameter Lh1       Lh2   R     A1
  778.        A2       p1         p2   q1     q2
  779.        β1       β2       βy   E     Ly
  780.        L       adjusted_value   reflex
  781.        ;; 建立线元坐标系所用参数
  782.        U_center  U_ZD      U_ZH   U_HY     U_QZ
  783.        U_YH       U_HZ
  784.        ;; 桩号用参数
  785.        Z_JD       Z_ZH      Z_HY   Z_QZ     Z_YH
  786.        Z_HZ
  787.        ;; 切线角用参数  
  788.        ang_JD    ang_ZH    ang_HY   ang_QZ     ang_YH
  789.        ang_HZ
  790.        ;; 对数组 group_data_out 进行移位,镜像,旋转 用参数
  791.        quadrant_ang         data_origin     data_insert
  792.        ;;创建线元列表所用参数  
  793.        lst       lst2      lst3   lst4     Line_segments
  794.       )
  795.       (setq R_start (car lst1)
  796.       R (cadr lst1)
  797.       R_end  (caddr lst1)
  798.       Lh1 (nth 3 lst1)
  799.       Lh2 (nth 4 lst1)
  800.       quadrant_ang
  801.        (car lst2)    ; 设计交点的入口方位角  
  802.       Δ (caddr lst2)  ; 设计交点偏转系数
  803.       )
  804.       (if  (= R_start 0)
  805.         (setq R_start (expt 10.0 30))
  806.       )
  807.       (if  (= R_end 0)
  808.         (setq R_end (expt 10.0 30))
  809.       )
  810.       (if  (>= Δ 0)
  811.         (setq reflex 1)
  812.         (setq reflex -1
  813.         Δ     (* -1 Δ)
  814.         )        ; (setq Δ (/ pi 3))   
  815.       )
  816.       ;; 当出口 缓和曲线长度不相等时
  817.       (if  (/= Lh1 0)
  818.         (progn
  819.     ;; 创建lst结构 ( ( 转点号I j)  R_start R_end  transition_parameter    reflex   quadrant_ang    Z_start  U_insert )  
  820.     (setq
  821.       A1
  822.          (abs (- (/ 1.0 R)
  823.            (/ 1.0 R_start)
  824.         )
  825.          )
  826.       A1
  827.          (sqrt (/ Lh1 A1))
  828.     )
  829.     ;; 求入口非完整缓和曲线的HY点 ( z_桩号 U_z ang  )  
  830.     (setq lst     (list R_start
  831.             R
  832.             (list Lh1 A1)
  833.             1
  834.             0  ; 线元的起点方位角
  835.             0
  836.             (list 0 0)
  837.             )
  838.           group_Z (list Lh1)
  839.     )
  840.     (setq group (solve_transition_curve group_Z lst)
  841.           U_HY  (cadr (car group))
  842.           β1   (caddr (car group))
  843.     )
  844.     ;; (setq group_data_out (solve_transition_curve  ( create_group_Z  0  Lh1   1)  lst ))  (tang_test   group_data_out )
  845.         )
  846.         (setq β1 0)    ; 当Lh1长度为0 时 , β1 偏角为0  
  847.       )
  848.       ;; 求出口口非完整缓和曲线的HY点 ( z_桩号 U_z ang  ) (以YH点为0点,右手螺旋坐标系,过YH点的切线为0度 )
  849.       (if  (/= Lh2 0)
  850.         (progn
  851.     ;; 创建lst结构 ( R_start R_end  transition_parameter    reflex   quadrant_ang    Z_start  U_insert )  
  852.     (setq
  853.       A2
  854.          (abs (- (/ 1.0 R)
  855.            (/ 1.0 R_end)
  856.         )
  857.          )
  858.       A2
  859.          (sqrt (/ Lh2 A2))
  860.     )
  861.     (setq lst     (list R
  862.             R_end
  863.             (list Lh2 A2)
  864.             1
  865.             0  ; 线元的起点方位角
  866.             0
  867.             (list 0 0)
  868.             )
  869.           group_Z (list Lh2)
  870.     )
  871.     (setq group (solve_transition_curve group_Z lst)
  872.           β2   (caddr (car group))
  873.     )
  874.         )
  875.         (setq β2 0)    ; 当Lh2长度为0 时 , β2 偏角为0  
  876.       )        ; (if  (/= Lh2 0) 函数结束

  877.       ;; 计算圆曲线的偏角
  878.       (setq βy (- Δ (+ β2 β1))
  879.       Ly  (* R βy)    ; 圆曲线长度  
  880.       )

  881.       ;; 创建lst结构 ( R_start R_end  lenth    reflex   quadrant_ang    Z_start  U_insert )  
  882.       (setq lst    (list R R Ly 1 β1 0 U_HY)
  883.       group_Z (list Ly)  ; YH 点的桩号
  884.       )
  885.       (setq group  (solve_circular_arc group_Z lst)
  886.           ; 求圆曲线的终点坐标
  887.       U_YH  (cadr (car group))
  888.       )
  889.       ;; (setq group_data_out (solve_circular_arc  ( create_group_Z  0  Ly  1)  lst ))  (tang_test   group_data_out )  
  890.       (if  (/= Lh2 0)
  891.         (progn
  892.     ;;求HZ点的 group_data_out 的数组( z_桩号 U_z ang  )  
  893.     (setq lst     (list R
  894.             R_end
  895.             (list Lh2 A2)
  896.             1
  897.             (+ βy β1) ; 线元的起点方位角
  898.             0  ; 线元的起始桩号   
  899.             U_YH
  900.             )
  901.           group_Z (list Lh2) ; HZ点桩号
  902.     )
  903.     (setq group (solve_transition_curve group_Z lst)
  904.           U_HZ  (cadr (car group))
  905.           ; 求第二缓和曲线在 以HZ点为坐标原点,起点缓和曲线切线为X轴方向
  906.     )
  907.     ;; (setq group_data_out (solve_transition_curve  ( create_group_Z  0  Lh2   1)  lst ))  (tang_test   group_data_out )  
  908.         )
  909.         (setq U_HZ U_YH)
  910.       )        ; (if  (/= Lh2 0) 函数结束

  911.       ;; 求次坐标系中的转点坐标 U_ZD
  912.       (setq U_HZ_2 (polar U_HZ Δ 100.0)
  913.       U_ZD   (inters U_HZ
  914.          U_HZ_2
  915.          (list 0 0)
  916.          (list 10000 0)
  917.          nil
  918.        )
  919.       )
  920.       ;;  (setq tang99 (list  (list 0 0) U_HY  U_YH   U_HZ  U_ZD  ))( create_LWPOLYLINE  tang99 nil  "0"  )      

  921.       (setq T1     (car U_ZD)
  922.       T2     (distance U_ZD U_HZ)
  923.       L     (+ Ly (+ Lh1 Lh2))
  924.       adjusted_value (- (+ T1 T2) L) ; 切曲差  
  925.       )

  926.       ;; 以ZH点为坐标原点,该点的切线方向为X轴,建立右手螺旋坐标系 ,转角 Δ取正数   
  927.       ;;转点的桩号 Z_JD = z_QZ + adjusted_value
  928.       (setq ang_JD (/ Δ 2)
  929.       ;; 设置为U_JD ->U_center的垂直方向
  930.       ang_ZH 0
  931.       ang_HY β1
  932.       ang_QZ (+ β1 (/ βy 2))
  933.       ang_YH (- Δ β2)
  934.       ang_HZ Δ
  935.       )
  936.       ;;   (angtos   (+(/ (- pi Δ) 2)Δ)   1 6  )   
  937.       (setq
  938.         U_center (polar U_HY (+ ang_HY (* pi 0.5)) R)
  939.         U_ZH     (list 0 0)  ;向量U_center ->U_JD 的方位角 (+ (/ Δ 2)pi)   
  940.         U_QZ     (polar U_center (- ang_QZ (* pi 0.5)) R)
  941.       )
  942.       (setq Z_JD T1
  943.       Z_ZH 0
  944.       Z_HY Lh1
  945.       Z_QZ (+ Lh1 (/ Ly 2))
  946.       Z_YH (+ Lh1 Ly)
  947.       Z_HZ L
  948.       )
  949.       (setq group_data_out
  950.        (list
  951.          (list Z_JD U_ZD ang_JD)
  952.          (list Z_ZH U_ZH ang_ZH)
  953.          (list Z_HY U_HY ang_HY)
  954.          (list Z_QZ U_QZ ang_QZ)
  955.          (list Z_YH U_YH ang_YH)
  956.          (list Z_HZ U_HZ ang_HZ)
  957.        )
  958.       )
  959.       ;; 创建transformation_group_data_out 函数用参数   data_origin  data_insert  
  960.       (setq
  961.         data_origin (list 0 U_ZD 0)
  962.         data_insert (list 0 U_ZD_real quadrant_ang)
  963.       )
  964.       ;; 对点集合 group_point 首先进行镜像变换,然后把变换后的点集合从U_origin 以为到U_insert ,然后围绕U_insert点旋转制定的角度quadrant_ang
  965.       (setq group_data_out
  966.        (transformation_group_data_out
  967.          group_data_out
  968.          reflex
  969.          data_origin
  970.          data_insert
  971.        )
  972.       )
  973.       ;;利用group_data_out数组 设置线元参数: ( R_start R_end  transition_parameter  reflex quadrant_ang  Z_start  U_insert )
  974.       (cond
  975.         ((and (/= Lh1 0)
  976.         (/= Lh2 0)
  977.          )
  978.          (setq lst  (list 1 2 4)
  979.          lst3 (list 0 1 2)
  980.          )
  981.         )
  982.         ((and (= Lh1 0)
  983.         (/= Lh2 0)

  984.          )
  985.          (setq lst  (list 2 4)
  986.          lst3 (list 1 2)
  987.          )
  988.         )
  989.         ((and (/= Lh1 0)
  990.         (= Lh2 0)
  991.          )
  992.          (setq lst  (list 1 2)
  993.          lst3 (list 0 1)
  994.          )
  995.         )
  996.         ((and (= Lh1 0)
  997.         (= Lh2 0)
  998.          )
  999.          (setq lst  (list 2)
  1000.          lst3 (list 1)

  1001.          )
  1002.         )
  1003.       )        ; cond  函数结束  
  1004.       (setq
  1005.         group
  1006.           (mapcar '(lambda (i / lst2)
  1007.                (setq lst2 (nth i group_data_out))
  1008.                (list (caddr lst2) (car lst2) (cadr lst2))
  1009.              )
  1010.             (list 1 2 4)
  1011.           )
  1012.         lst_4      (list (list (list Z_I 0) R_start R (list Lh1 A1) reflex)
  1013.           (list (list Z_I 1) R R Ly reflex)
  1014.           (list (list Z_I 2) R R_end (list Lh2 A2) reflex)
  1015.           )
  1016.         Line_segments (mapcar '(lambda (i)
  1017.                (append (nth i lst_4) (nth i group))
  1018.              )
  1019.             lst3
  1020.           )
  1021.       )
  1022.       (list Line_segments (list T1 T2 adjusted_value))
  1023.     )
  1024.    subset_2
  1025.   )


  1026. )          ;   evaluation_easement_curve 函数结束
  1027. ;;888888888888888888888888888888888888888888888888888888888888888888888888888888888   




  1028. ;;  (setq group_turning_point ( create_turning_point_group )  )
  1029. ;; 求线路的线元参数group_Line_segments [( 转点号I j) R_start R_end  transition_parameter   reflex  quadrant_ang   Z_start  U_insert ]  
  1030. ;; 以及转点参数  group_data_JD  ( Z_JD U ang JD  reflex )  
  1031. (defun create_group_Line_segments
  1032.           (group_turning_point
  1033.            Z_road_start     /
  1034.            group_turning_point_2
  1035.            lst       state
  1036.            i       dist
  1037.            quadrant_ang     num
  1038.            T_front     Δ
  1039.            U_insert     U
  1040.            Z       group_parameter
  1041.            group_Line_segments
  1042.            group_data_JD
  1043.           )
  1044.   ;; 去掉group_turning_point 中的第一和最后一个转点,不进行处理
  1045.   (setq  group_turning_point_2
  1046.    (cdr group_turning_point)
  1047.   group_turning_point_2
  1048.    (reverse group_turning_point_2)
  1049.   group_turning_point_2
  1050.    (cdr group_turning_point_2)
  1051.   group_turning_point_2
  1052.    (reverse group_turning_point_2)
  1053.   )
  1054.   ;; 创建线元集合group_Line_segments [( 转点号I j) R_start R_end  transition_parameter   reflex  quadrant_ang    Z_start  U_insert ]   
  1055.   ;; 和 转点用的参数集合 group_parameter (list T1 T2 adjusted_value)
  1056.   (setq
  1057.     group_Line_segments
  1058.      nil
  1059.     group_parameter
  1060.      nil
  1061.   )
  1062.   (mapcar '(lambda      ; (setq subset (nth 9 group_turning_point ) )   
  1063.        (subset / Line_segments state lst lst2)
  1064.         (setq state (cadr (car subset)))
  1065.           ; 判断该转点是否包含非完整缓和曲线   
  1066.         (if state
  1067.     (setq lst
  1068.            (evaluation_no_symmetrical_curve subset)
  1069.           Line_segments
  1070.            (car lst)
  1071.           lst2 (cadr lst)

  1072.     )
  1073.     (setq lst
  1074.            (evaluation_symmetrical_curve subset)
  1075.           Line_segments
  1076.            (car lst)
  1077.           lst2 (cadr lst)

  1078.     )
  1079.         )
  1080.         (setq group_Line_segments
  1081.          (cons Line_segments group_Line_segments)
  1082.         group_parameter
  1083.          (cons lst2 group_parameter)
  1084.         )
  1085.      )
  1086.     group_turning_point_2
  1087.   )
  1088.   (setq  group_Line_segments
  1089.    (reverse group_Line_segments)
  1090.   group_parameter
  1091.    (reverse group_parameter)
  1092.   )
  1093.   ;;利用参数group_parameter (list T1 T2 adjusted_value)   和group_turning_point  把直线线元加进group_Line_segments 中
  1094.   (setq  i 0
  1095.   n (length group_Line_segments)
  1096.   )
  1097.   ;; 把第二个转点至最后一个转点的直线线元加进数组group_Line_segments 中
  1098.   (setq  group_Line_segments
  1099.    (mapcar
  1100.      '(lambda
  1101.         (lst   /     dist       lst2      T_back
  1102.          T_now   T_front   Δ       U_JD      quadrant_ang
  1103.          U_insert   element   num       Z_start
  1104.         )
  1105.          (cond
  1106.      ((/= i (- n 1))  ; 当转点num 不是最后一个转点时  
  1107.       (setq  T_now         (cadr (nth i group_parameter))
  1108.       T_back         (car (nth i group_parameter))
  1109.       adjusted_value (caddr (nth i group_parameter))
  1110.       T_front         (car (nth (+ i 1) group_parameter))
  1111.       lst2         (nth (+ i 1) group_turning_point)
  1112.           ; 线元所对应的转点号  
  1113.       dist         (nth 4 (nth 3 lst2))
  1114.       quadrant_ang   (cadr (nth 3 lst2))
  1115.       Δ         (- dist (+ T_now T_front))
  1116.           ;直线线元的长度
  1117.       num         (car (car lst2)) ; 转点号
  1118.       Z_start         (- (+ T_now T_back) adjusted_value)
  1119.           ;线元的起点桩号  
  1120.       )
  1121.      )
  1122.      ;;   当转点num  是最后一个转点时   
  1123.      ((= i (- n 1))
  1124.       (setq  T_now         (cadr (nth i group_parameter))
  1125.       T_back         (car (nth i group_parameter))
  1126.       adjusted_value (caddr (nth i group_parameter))
  1127.       T_front         0;  最后一个转点的切线长度设置为0   
  1128.       lst2         (nth (+ i 1) group_turning_point)
  1129.           ; 线元所对应的转点号  
  1130.       dist         (nth 4 (nth 3 lst2))
  1131.       quadrant_ang   (cadr (nth 3 lst2))
  1132.       Δ         (- dist (+ T_now T_front))
  1133.       num         (car (car lst2)) ; 转点号
  1134.       Z_start         (- (+ T_now T_back) adjusted_value)
  1135.           ;线元的起点桩号  
  1136.       )
  1137.      )
  1138.          )
  1139.          (setq i (+ i 1))
  1140.          ;; 当 Δ 长度大于0.1米 时, 在该转点处加进直线线元
  1141.          (if (> Δ 0.1)
  1142.      (progn
  1143.        (setq U_JD    (cadr lst2)
  1144.        U_insert (polar U_JD quadrant_ang T_now)
  1145.        num    (car (car lst2))
  1146.        )
  1147.        ;; 创建直线线元[( 转点号I 3)  0  0   Δ    reflex  quadrant_ang    Z_start  U_insert ]  
  1148.        (setq element (list (list num 3)
  1149.                0
  1150.                0
  1151.                Δ
  1152.                1
  1153.                quadrant_ang
  1154.                Z_start
  1155.                U_insert
  1156.          )
  1157.        lst   (append lst (list element))
  1158.        )
  1159.      )
  1160.          )      ; (if (> Δ 0.1) 函数结束
  1161.          lst
  1162.       )
  1163.      group_Line_segments
  1164.    )
  1165.   )
  1166.   ;; 把第一直线线元加进数组 group_Line_segments  
  1167.   (setq  lst       (car group_turning_point)
  1168.   dist       (nth 4 (nth 3 lst))
  1169.   quadrant_ang (cadr (nth 3 lst))
  1170.   U_insert     (cadr lst)    ; 第一个转点的 坐标
  1171.   num       (car (car lst))  ; 第一个线元的转点号   
  1172.   lst       (car group_parameter)
  1173.   T_front       (car lst)    ; 第二个转点 的入口方向切线长度
  1174.   Δ       (- dist T_front)
  1175.   )
  1176.   ;; 判断第一个线元的转点是否存在
  1177.   (if (> Δ 0.1)
  1178.     (progn
  1179.       (setq element (list (list num 3)
  1180.         0
  1181.         0
  1182.         Δ
  1183.         1
  1184.         quadrant_ang
  1185.         0
  1186.         U_insert
  1187.         )

  1188.       )
  1189.       (setq group_Line_segments
  1190.        (append (list (list element)) group_Line_segments)
  1191.       )
  1192.     )
  1193.   )
  1194.   ;; 对线元数组 group_Line_segments 中的起始桩号进行处理,  
  1195.   (if (not Z_road_start)
  1196.     (setq Z_road_start 0)    ; 当线路起始桩号没有定义时,设置为0  
  1197.   )
  1198.   (setq Z Z_road_start)      ; 初始化桩号Z 为路线的起始桩号
  1199.   (setq  group_Line_segments
  1200.    (mapcar
  1201.      '(lambda (lst / element lenth)
  1202.         (setq lst
  1203.          (mapcar
  1204.            '(lambda  (subset)
  1205.         (apply '(lambda (x_0 x_1 x_2 x_3 x_4 x_5 x_6 x_7)
  1206.             (list x_0 x_1 x_2 x_3 x_4 x_5 (+ Z x_6) x_7)
  1207.           )
  1208.          subset
  1209.         )
  1210.       )
  1211.            lst
  1212.          )
  1213.         )        ;  (mapcar '(lambda  (subset) 函数结束
  1214.         ;; 当一个转点 的全部线元处理完毕后, 对该转点的最后一个线元的结束桩号,赋值给Z
  1215.         (setq element (last lst))  ; 该转点的最后一个线元
  1216.         (if (= (cadr (car element)) 2)
  1217.     (setq lenth (car (nth 3 element)))
  1218.           ; 当最后一个线元是缓和曲线时  
  1219.     (setq lenth (nth 3 element))
  1220.         )
  1221.         (setq Z (+ (nth 6 element) lenth))
  1222.         lst      ; 保证输出结果为想要的group_Line_segments 数组  
  1223.       )
  1224.      group_Line_segments
  1225.    )
  1226.   )
  1227.   ;; 对group_turning_point 中的交点 ,求其交点桩号,病并求其象限角,以转角的一半为切线方向   

  1228.   (setq group_data_JD nil)    ; 利用数组group_Line_segments和group_parameter (list T1 T2 adjusted_value) 求解
  1229.   (setq i 1)
  1230.   (setq  group_data_JD
  1231.    (mapcar '(lambda (lst / T1 Z Z_JD lst2 U ang JD Δ reflex)
  1232.         (setq T1   (car lst)
  1233.         lst2   (nth i group_Line_segments)
  1234.         Z   (nth 6 (car lst2))
  1235.           ; 该交点中的第一个线元的起点桩号
  1236.         Z_JD   (+ Z T1)
  1237.         reflex (nth 4 (car lst2))
  1238.         )
  1239.         (setq lst2 (nth i group_turning_point)
  1240.         U    (cadr lst2)
  1241.         JD   (car (car lst2))
  1242.         Δ   (caddr (nth 3 lst2))
  1243.         ang  (car (nth 3 lst2))
  1244.         ang  (+ (* 0.5 Δ) ang)
  1245.         )
  1246.         (setq i (+ i 1))
  1247.         (list Z_JD U ang JD reflex)
  1248.       )
  1249.      group_parameter
  1250.    )
  1251.   )


  1252.   (list group_Line_segments group_data_JD)
  1253. )
  1254. ;; 88888888888           88888888888888            88888888888888888          88888888888888888888   





  1255. ;; 计算线路加宽值8888888888            8888888888888888888              88888888888888888888           88888888888888888888   
  1256. ;;从文件中写入加宽数组 ,  输出 数组group_widen 其格式为 ( 转点号   widen 线路加宽值)  
  1257. (defun write_into_group_widen (/ lst fname f1 group group_widen)

  1258.   (setq fname (getfiled "\n输入存放线路交点加宽参数的文件" "" "txt" 1))
  1259.   (if (/= fname nil)
  1260.     (progn
  1261.       (setq f1 (open fname
  1262.          "r"
  1263.          )
  1264.       )
  1265.       (while (setq list_1 (read-line f1))
  1266.   (setq group (cons list_1 group))
  1267.       )
  1268.       (setq group (reverse group))
  1269.       (setq
  1270.   group_widen
  1271.    nil
  1272.       )
  1273.       (setq group_widen
  1274.        (mapcar '(lambda (x)
  1275.       (read x)
  1276.           )
  1277.          group
  1278.        )
  1279.       )
  1280.       (close f1)      ;关闭文件fname
  1281.     )          ;  progn 函数结束
  1282.   )          ;if (/= fname nil) 函数结束
  1283.   group_widen
  1284. )          ; write_into_group_widen 函数结束
  1285. ;; 88888888888888888888888888888888888       (write_into_group_widen )      
  1286. ;;  (setq  group_widen (write_into_group_widen))  




  1287. ;; 输入参数 线元 Line_segments [( 转点号I j) R_start R_end  transition_parameter   reflex  quadrant_ang    Z_start  U_insert ]   
  1288. ;; mold加宽类型 ,mold为0时, 绘制普通加宽,mold=1 时,按直线加宽
  1289. (defun calculate_Transition-curve_widen
  1290.           (Z    group_widen
  1291.            Line_segments     mold
  1292.            /    L     widen
  1293.            k    k_2     k_3
  1294.            l_x    T_1     T_2
  1295.            T_3    widen_x  lenth
  1296.            lst    Z_end
  1297.           )
  1298.   (apply
  1299.     '(lambda (x_0 x_1 x_2 transition_parameter reflex x_5 Z_start x_7)
  1300.        (setq I   (car x_0)    ; 转点的编号
  1301.        num (cadr x_0)    ; 线元在转点中的编号
  1302.        )
  1303.        (setq lst   (assoc I group_widen)
  1304.           ; 寻找转点I 所对应的加宽值   
  1305.        widen (cadr lst)
  1306.        )
  1307.        (if (not widen)
  1308.    (setq widen 0)
  1309.        )
  1310.        (if (or (= num 0)
  1311.          (= num 2)
  1312.      )
  1313.    ;; 当线元为缓和曲线时  
  1314.    (progn
  1315.      (setq lenth (car transition_parameter)
  1316.      lenth (* lenth 1.0)
  1317.      Z_end (+ Z_start lenth)
  1318.      )
  1319.      (if (and
  1320.      (>= Z z_start)
  1321.      (<= Z z_end)
  1322.          )
  1323.        (progn
  1324.          (cond
  1325.      ;; 当线元为进口缓和曲线时  
  1326.      ((= num 0)
  1327.       (setq L (- Z z_start))
  1328.      )
  1329.      ;; 当线元为出口缓和曲线时  
  1330.      ((= num 2)
  1331.       (setq L (- z_end z))
  1332.      )
  1333.          )      ; cond 函数结束   
  1334.          (setq k (/ L lenth))
  1335.          ;; 当 mold为0时, 绘制普通加宽,mold=1 时,按直线加宽
  1336.          (cond
  1337.      ((= mold 0)
  1338.       (setq  k_2  (* (expt k 3) 4)
  1339.       k_3  (* (expt k 4) 3)
  1340.       widen_x  (* (- k_2 k_3) widen)
  1341.       )
  1342.      )
  1343.      ((= mold 1)
  1344.       (setq widen_x (* k widen))
  1345.      )
  1346.          )      ; 判断 缓和曲线是否为普通或直线加宽的函数 结束   
  1347.        )
  1348.      )        ; (if (and  (>= Z z_start) (< Z z_end) ) 函数结束
  1349.    )
  1350.        )        ; 处理缓和曲线线元加宽值的 函数结束
  1351.        (if (= num 1)
  1352.    ;; 当线元为圆曲线时   
  1353.    (progn
  1354.      (setq lenth (* transition_parameter 1.0)
  1355.      Z_end (+ Z_start lenth)
  1356.      )
  1357.      (if (and
  1358.      (>= Z z_start)
  1359.      (<= Z z_end)
  1360.          )
  1361.        (setq widen_x widen)
  1362.      )        ; (if (and  (>= Z z_start) (< Z z_end) ) 函数结束
  1363.    )
  1364.        )        ; 处理圆曲线线元加宽值的 函数结束
  1365.        (if (not widen_x)
  1366.    (setq widen_x 0)
  1367.    widen_x
  1368.        )
  1369.      )
  1370.     Line_segments
  1371.   )
  1372. )          ; calculate_Transition-curve_widen函数结束
  1373. ;; (calculate_Transition-curve_widen 7530  group_widen Line_segments  0 )   
  1374. ;;  (setq  group_widen (write_into_group_widen))  
  1375. ;; (setq Line_segments  (cadr(nth 2 tang99 )))  (setq   mold 0  z 7570  I 25  )     





  1376. ;; 绘图用函数88888    绘图用函数88888     绘图用函数88888     绘图用函数88888    绘图用函数88888    绘图用函数88888    绘图用函数88888  



  1377. ;; 创建一个 桩号的函数  
  1378. (defun create_group_Z (Z_start Z_end Z_Δ / lst group_Z z residue)

  1379.   (setq  group_z  (list Z_start)
  1380.   Z  (+ (fix Z_start) 1)
  1381.   )
  1382.   ;; 对Z取摸5,使得group_z 为Z_Δ的倍数
  1383.   (setq  residue  (rem Z Z_Δ)
  1384.   Z  (- Z residue)
  1385.   )
  1386.   (if (>= Z Z_start)
  1387.     (setq Z Z)
  1388.     (setq Z (+ Z Z_Δ))
  1389.   )

  1390.   (while (< Z Z_end)
  1391.     (setq group_Z (cons z group_Z))
  1392.     (setq z (+ z Z_Δ))
  1393.   )
  1394.   (setq  group_z
  1395.    (reverse group_z)
  1396.   )
  1397. )
  1398. ;; (setq  group_Z ( create_group_Z 10784.9 10834  20 )  )  





  1399. (defun f_zhuanghao (Z / 桩号1 桩号2 Z_1 z_2 z_3 桩号3 桩号)
  1400.   (setq  Z_1 (fix Z)
  1401.   Z_2 (rem Z_1 1000)    ;整数桩号
  1402.   Z_3 (/ (- Z_1 Z_2) 1000)  ;公里桩号
  1403.   Z_4 (- Z Z_1)      ;小数桩号
  1404.   )
  1405.   (setq  桩号1 (itoa Z_3)    ;获得整公里桩号
  1406.   桩号2 (itoa Z_2)    ;获得桩号的小里程数
  1407.   桩号3 (substr (rtos Z_4 2 3) 2 4) ;获得桩号的小数  
  1408.   )
  1409.   (cond
  1410.     ((and (= Z_2 0) (= Z_4 0))
  1411.      (setq 桩号 (strcat "K" 桩号1 "+000"))
  1412.           ; 获得桩号的字符表达式如"K3+000" 的形式
  1413.     )
  1414.     ((and (= (rem Z_2 10) 0) (= Z_4 0))
  1415.      (setq 桩号 (strcat "K" 桩号1 "+" 桩号2))
  1416.           ; 获得桩号的字符表达式如"+860" 的形式
  1417.     )
  1418.     (t (setq 桩号 (strcat "K" 桩号1 "+" 桩号2 桩号3)))
  1419.   )
  1420. )          ;zhuanghao函数结束
  1421. ;;8888888888888888888888888888888888888888888888


  1422. ;; 对线元参数group_Line_segments [( 转点号num j) R_start R_end  transition_parameter   reflex  quadrant_ang   Z_start  U_insert ]  
  1423. ;; 求出一个新的数组 group_transition ( 转点号num j) (i j k) ,i 和 k 分别为该线元的 前后线元编号  i k 取值为0 ,1 ,2 ,3  
  1424. (defun create_group_transition
  1425.              (group_Line_segments
  1426.         /        group_transition
  1427.         group        n_1
  1428.         n        group_i
  1429.         lst        num
  1430.              )
  1431.   (setq group (apply 'append group_Line_segments))
  1432.   ;; 为了计算方便,在数组group的头和尾巴各加入一个数组  
  1433.   (setq  lst   (car (car group))
  1434.   num   (car lst)
  1435.   lst   (list (list num 3))
  1436.   group (append (list lst) group)
  1437.   lst   (car (last group))
  1438.   num   (car lst)
  1439.   lst   (list (list num 3))
  1440.   group (append group (list lst))
  1441.   )
  1442.   (setq  n  (length group)
  1443.   n_1  1
  1444.   group_i  nil
  1445.   )
  1446.   (repeat (- n 2)
  1447.     (setq group_i (cons n_1 group_i))
  1448.     (setq n_1 (+ n_1 1))
  1449.   )
  1450.   (setq group_i (reverse group_i))
  1451.   (setq group_transition nil)
  1452.   (mapcar '(lambda (n_1 / lst lst_back lst_front i j k)
  1453.        (setq lst (nth n_1 group)
  1454.        j   (cadr (car lst))
  1455.        )
  1456.        (setq lst_back  (nth (- n_1 1) group)
  1457.        lst_front
  1458.            (nth (+ n_1 1) group)
  1459.        )
  1460.        (setq i (cadr (car lst_back))
  1461.        k (cadr (car lst_front))
  1462.        )
  1463.        (setq group_transition
  1464.         (cons (list (car lst) (list i j k))
  1465.         group_transition
  1466.         )
  1467.        )
  1468.      )
  1469.     group_i
  1470.   )
  1471.   (reverse group_transition)
  1472. )          ; (defun create_group_transition   函数结束  
  1473. ;; (setq group_transition ( create_group_transition group_Line_segments ) )   






  1474. ;; 创建  group_data_out 和 加宽值  
  1475. (defun create_group_data_out_sub (Line_segments   mold
  1476.           /     lst
  1477.           Line_segments_type
  1478.           str
  1479.          )
  1480.   ;; (setq Width 5  number 0 )   
  1481.   (mapcar        ;  (setq subset (nth 0 (nth 11 group_Line_segments )) )      
  1482.     '(lambda (subset  /    lst      group_Z   num
  1483.         Z_start  Z_end    len      group_data_out
  1484.         subset_2  i    array      color
  1485.        )
  1486.        (setq array    (car subset)
  1487.        num      (cadr array)
  1488.        ;; 去除 [( 转点号I j)   R_start R_end  transition_parameter   reflex  quadrant_ang    Z_start  U_insert )]中的第一个元素  
  1489.        subset_2 (cdr subset)
  1490.        reflex   (nth 3 subset_2)
  1491.        Z_start  (nth 5 subset_2)
  1492.        )
  1493.        (cond
  1494.    ((or (= num 0)
  1495.         (= num 2)
  1496.     )
  1497.     (progn
  1498.       (setq len    (car (caddr subset_2))
  1499.       Z_end    (+ Z_start len)
  1500.       group_Z (create_group_Z Z_start Z_end 5)
  1501.       )
  1502.       (setq group_data_out
  1503.        (solve_transition_curve group_Z subset_2)
  1504.       )
  1505.     )
  1506.    )
  1507.    ((= num 1)
  1508.     (progn
  1509.       (setq len    (caddr subset_2)
  1510.       Z_end    (+ Z_start len)
  1511.       group_Z (create_group_Z Z_start Z_end 5)
  1512.       )
  1513.       (setq group_data_out (solve_circular_arc group_Z subset_2))
  1514.     )
  1515.    )
  1516.    ((= num 3)
  1517.     (progn
  1518.       (setq len    (caddr subset_2)
  1519.       Z_end    (+ Z_start len)
  1520.       group_Z (create_group_Z Z_start Z_end 5)
  1521.       )
  1522.       (setq group_data_out (solve_straightway group_Z subset_2))
  1523.     )
  1524.    )
  1525.        )        ; cond 函数结束
  1526.        ;; 求group_Z 中每个桩号的加宽值
  1527.        (if (not mold)
  1528.    (setq mold 1)      ; mold没有定义时,设置为直线加宽  
  1529.        )
  1530.        (if (and  (/= num 3)
  1531.     (assoc (car array) group_widen) ; 判断该转点是否加宽  
  1532.      )
  1533.    (setq group_width
  1534.     (mapcar
  1535.       '(lambda (z / Width)
  1536.          (setq Width
  1537.           (calculate_Transition-curve_widen
  1538.             Z
  1539.             group_widen
  1540.             subset
  1541.             mold
  1542.           )
  1543.          )
  1544.          (* Width reflex)  ; 对确定加宽值的左右方向   
  1545.        )
  1546.       group_Z
  1547.     )
  1548.    )
  1549.    ;; 直线线元加宽值设置为0
  1550.    (setq group_width
  1551.     (mapcar
  1552.       '(lambda (z / Width)
  1553.          0
  1554.        )
  1555.       group_Z
  1556.     )
  1557.    )
  1558.        )
  1559.        ;;  group_transition ( 转点号num j) (i j k) ,i 和 k 分别为该线元的 前后线元编号  i k 取值为0 ,1 ,2 ,3  
  1560.        (setq lst (cadr (assoc array group_transition)))
  1561.        (cond
  1562.    ((= (cadr lst) 3)    ; 直线线元时
  1563.     (setq  color 1
  1564.     Line_segments_type
  1565.      "  直线"
  1566.     )
  1567.    )
  1568.    ((= (cadr lst) 1)    ;圆曲线线元时
  1569.     (setq  color 2
  1570.     Line_segments_type
  1571.      "  圆曲线"
  1572.     )        ; 黄色  
  1573.    )
  1574.    ;; 当缓和曲线时接直线和圆时   
  1575.    ((or (equal lst '(3 0 1))
  1576.         (equal lst '(1 2 3))
  1577.     )
  1578.     (setq  color 3
  1579.     Line_segments_type
  1580.      "  缓和曲线"
  1581.     )        ; 绿色  
  1582.    )
  1583.    ;; 当缓和曲线时接缓和曲线和圆时   
  1584.    ((or (equal lst '(2 0 1))
  1585.         (equal lst '(1 2 0))
  1586.     )
  1587.     (progn
  1588.       (if  (= (cadr lst) 0)
  1589.         (setq color 6)    ; 洋红色 入口缓和曲线  
  1590.         (setq color 5)    ;蓝色  出口缓和曲线  
  1591.       )
  1592.       (setq Line_segments_type
  1593.        "  缓和曲线"
  1594.       )        ; 洋红色
  1595.     )
  1596.    )
  1597.    ;; 当缓和曲线是接圆和圆时   
  1598.    ((or (equal lst '(1 0 1))
  1599.         (equal lst '(1 2 1))
  1600.     )
  1601.     (setq  color 4
  1602.     Line_segments_type
  1603.      "  缓和曲线"
  1604.     )        ; 青色  
  1605.    )
  1606.    (t
  1607.     (setq  color 0
  1608.     Line_segments_type
  1609.      "  缺省状态"
  1610.     )
  1611.    )
  1612.        )
  1613.        ;; 判断线元的起点是什么型号,如ZH HY   
  1614.        (setq
  1615.    array_2 (list (car lst) (cadr lst))
  1616.        )
  1617.        (cond
  1618.    ((equal array_2
  1619.      '(3 0)
  1620.     )
  1621.     (setq str "ZH")
  1622.    )
  1623.    ((equal array_2
  1624.      '(3 1)
  1625.     )
  1626.     (setq str "ZY")
  1627.    )
  1628.    ((equal array_2
  1629.      '(0 1)
  1630.     )
  1631.     (setq str "HY")
  1632.    )
  1633.    ((equal array_2
  1634.      '(1 0)
  1635.     )
  1636.     (setq str "YH")
  1637.    )
  1638.    ((equal array_2
  1639.      '(1 2)
  1640.     )
  1641.     (setq str "YH")
  1642.    )
  1643.    ((equal array_2
  1644.      '(1 3)
  1645.     )
  1646.     (setq str "YZ")
  1647.    )
  1648.    ((equal array_2
  1649.      '(2 3)
  1650.     )
  1651.     (setq str "HZ")
  1652.    )
  1653.    ((equal array_2
  1654.      '(2 0)
  1655.     )
  1656.     (setq str "HH")
  1657.    )
  1658.    ((equal array_2
  1659.      '(2 1)
  1660.     )
  1661.     (setq str "HY")
  1662.    )
  1663.    (t
  1664.     (setq str "88")
  1665.    )
  1666.        )        ; cond 函数结束
  1667.        ;; 创建group_Z 的高程值
  1668.        (setq group_h_slope
  1669.         (mapcar '(lambda (z / h slope)
  1670.           ; ( setq z (car group_Z ))  
  1671.        (setq h     (QH2_10N Z group_vertical_curve_2)
  1672.              slope (calculate_superelevation
  1673.                z
  1674.                group_superelevation
  1675.                subset
  1676.              )
  1677.        )
  1678.        (if h
  1679.          (list h slope)
  1680.          (list 100 slope)
  1681.        )
  1682.            )
  1683.           group_Z
  1684.         )
  1685.        )

  1686.        ;; 把 group_data_out 、 group_width 和 group_h_slope 合并起来 组成新的数组 { z U ang width h  ( superelevation_L  superelevation_R )}
  1687.        (setq i 0)
  1688.        (setq group
  1689.         (mapcar '(lambda (lst / width lst2)
  1690.        (setq width (nth i group_width)
  1691.              lst2  (nth i group_h_slope)
  1692.              i     (+ i 1)
  1693.        )
  1694.        (append lst (list width) lst2)
  1695.            )
  1696.           group_data_out
  1697.         )
  1698.        )

  1699.        (setq i 0)
  1700.        (mapcar
  1701.    '(lambda (lst        /     string      j
  1702.        residue    U_page   U_move      ang
  1703.        group_U    superelevation_L      superelevation_R
  1704.        W_L        W_R   h_L      h_R
  1705.        lst2        lst3
  1706.       )
  1707.       (setq residue (rem number n_grid)
  1708.           ; n_grid 为Uniform_group_center 中的格子数
  1709.       j    (/ (- number residue) n_grid) ; 页数
  1710.       U_page  (polar U_insert 0 (* j (* frame_wide 1.2)))
  1711.       U    (nth residue Uniform_group_center)
  1712.           ; 桩号Z 在Uniform_group_center 域中的插入点  
  1713.       U_move  (list  (+ (car U_page) (car U))
  1714.         (+ (cadr U_page) (cadr U))
  1715.         )
  1716.       )
  1717.       ;; 把z U ang width 桩号、坐标、方位角、加宽值 写入 图中
  1718.       (setq U  (cadr lst)  ;  (setq lst (car group))   
  1719.       width  (nth 3 lst)
  1720.       lst2  (cons width U)
  1721.       lst2  (mapcar 'rtos lst2)
  1722.       桩号  (f_zhuanghao (car lst))
  1723.       ang  (caddr lst)
  1724.       ang  (angtos (* (- ang (* 0.5 pi)) -1) 1 6)
  1725.           ; 把象限角转换成方位角
  1726.       lst2  (append (list 桩号 ang) lst2)
  1727.       lst2  (mapcar  '(lambda (i)
  1728.            (nth i lst2)
  1729.          )
  1730.         (list 0 4 3 1 2)
  1731.       )
  1732.       )
  1733.       (if  (/= i 0)
  1734.         (setq
  1735.     lst3 (list Line_segments_type "\n N(X):"
  1736.          "E(Y):"        "\n 方位角:"
  1737.          "\n 加宽值:"
  1738.         )
  1739.         )
  1740.         (setq
  1741.     lst3 (list str "\n N(X):" "E(Y):" "\n 方位角:"
  1742.          "\n 加宽值:")
  1743.         )
  1744.       )
  1745.       (setq
  1746.         lst2 (append lst2 lst3)
  1747.       )
  1748.       (setq lst2 (mapcar '(lambda  (i)
  1749.           (nth i lst2)
  1750.         )
  1751.              (list 0 5 6 1 7 2 8 3 9 4)
  1752.            )
  1753.       )
  1754.       (setq string (vl-princ-to-string lst2)
  1755.       string (vl-string-left-trim "\(" string)
  1756.       string (vl-string-right-trim "\)" string)
  1757.       )
  1758.       (entmake
  1759.         (list
  1760.     '(0 . "MTEXT")
  1761.     '(100 . "AcDbEntity")
  1762.     '(100 . "AcDbMText")
  1763.     (cons 62 color)
  1764.     (cons 40 (* road_wide 0.1))
  1765.     (cons 71 5)
  1766.     (cons 72 5)
  1767.     (cons '1 string)
  1768.     (cons 10 (polar U_move (* pi 0.5) (* road_wide -0.25)))
  1769.         )
  1770.       )
  1771.       ;; 用 group 数组和路面宽度road_wide 创建 桩号Z 的标准横断面控制点 U_cen U_L U_R U_L_2 U_R_2  
  1772.       ;; U_L_2 U_R_2 路面宽度road_wide 加 土路肩宽度的值
  1773.       (setq h (nth 4 lst)
  1774.       width  (nth 3 lst)
  1775.       superelevation_L
  1776.        (car (nth 5 lst))
  1777.       superelevation_R
  1778.        (cadr (nth 5 lst))
  1779.       )
  1780.       (if  (> width 0)    ; 在Ucs坐标系中以向右为正
  1781.         (setq W_L  (+ road_wide width)
  1782.         W_R
  1783.       (* road_wide -1)
  1784.         )
  1785.         (setq W_L  road_wide
  1786.         W_R
  1787.       (+ (* road_wide -1) width)
  1788.         )
  1789.       )
  1790.       ;; 在Ucs坐标系中以向右为正 , 所以对 W_L W_R 反向  
  1791.       (setq W_L (* W_L -1)
  1792.       W_R (* W_R -1)
  1793.       )
  1794.       ;; 创建 U   U_L U_R U_L_2 U_R_2 各点的高程  
  1795.       (setq
  1796.         superelevation_L (* superelevation_L 0.01)
  1797.         superelevation_R (* superelevation_R 0.01)
  1798.         h_L
  1799.              (* superelevation_L W_L)
  1800.         h_R
  1801.              (* superelevation_R W_R)
  1802.       )
  1803.       (setq lst2 (list (- h_L 0.015)
  1804.            h_L
  1805.            (* h_L 0.5)
  1806.            0
  1807.            (* h_R 0.5)
  1808.            h_R
  1809.            (- h_R 0.015)
  1810.            (* h_L 0.85)
  1811.           ; 标识横坡superelevation_L 所用点
  1812.            (* h_L 0.15)
  1813.           ; 标识横坡superelevation_L 所用点
  1814.            (* h_R 0.15)
  1815.           ; 标识横坡superelevation_R 所用点
  1816.            (* h_R 0.85)
  1817.           ; 标识横坡superelevation_R 所用点
  1818.            )
  1819.       lst3 (list (- W_L 0.5)
  1820.            W_L
  1821.            (* W_L 0.5)
  1822.            0
  1823.            (* W_R 0.5)
  1824.            W_R
  1825.            (+ W_R 0.5)
  1826.            (* W_L 0.85)
  1827.           ; 标识横坡superelevation_L 所用点
  1828.            (* W_L 0.15)
  1829.           ; 标识横坡superelevation_L 所用点
  1830.            (* W_R 0.15)
  1831.           ; 标识横坡superelevation_R 所用点
  1832.            (* W_R 0.85)
  1833.           ; 标识横坡superelevation_R 所用点
  1834.            )
  1835.       U    (list (car U_move) (+ (cadr U_move) (* road_wide 0.25)))
  1836.       )
  1837.       (setq j 0)      ; (setq U_move (getpoint "输入插入点:"))  
  1838.       (setq group_U (mapcar '(lambda (x / y)
  1839.              (setq y (nth j lst2)
  1840.              j (1+ j)
  1841.              )
  1842.              (list (+ (car U) x)
  1843.              (+ (cadr U) y)
  1844.              )
  1845.            )
  1846.           lst3
  1847.         )
  1848.       )
  1849.       (setq group_h (mapcar '(lambda (i / y)
  1850.              (setq y (nth i lst2))
  1851.              (+ h y)
  1852.            )
  1853.           (list 0 3 6)
  1854.         )
  1855.       )
  1856.       ;; 把 U_L U U_R 二维多段线写入图中
  1857.       (setq pt (mapcar '(lambda (i / U)
  1858.         (setq U (nth i group_U))
  1859.         U
  1860.             )
  1861.            (list 0 1 3 5 6)
  1862.          )
  1863.       )
  1864.       (entmake
  1865.         (append (list '(0 . "LWPOLYLINE")
  1866.           '(100 . "AcDbEntity")
  1867.           '(100 . "AcDbPolyline")
  1868.           (cons 62 color)
  1869.           (cons 90 (length pt))
  1870.           (cons 70 0)
  1871.           )
  1872.           (mapcar '(lambda (U) (cons 10 U)) pt)
  1873.         )
  1874.       )
  1875.       ;; 对group_U 中U_L U U_R 顶点绘制 等边三角形  
  1876.       (setq j    0
  1877.       lst2
  1878.            (mapcar '(lambda  (U / U_2 U_3)
  1879.           (if (or (= j 1) (= j 3))
  1880.             (setq U_2 (polar U (* (/ pi 3.0) 1) (/ road_wide 15.0))
  1881.             U_3 (polar U (* (/ pi 3.0) 2) (/ road_wide 15.0))
  1882.             )
  1883.             (setq U_2 (polar U (* (/ pi 3.0) 1) (/ road_wide 9.0))
  1884.             U_3 (polar U (* (/ pi 3.0) 2) (/ road_wide 9.0))
  1885.             )
  1886.           )
  1887.           (setq j (1+ j))
  1888.           (list U_2 U U_3)
  1889.         )
  1890.              pt
  1891.            )
  1892.       )
  1893.       (mapcar '(lambda (pt)
  1894.            (entmake
  1895.        (append (list '(0 . "LWPOLYLINE")
  1896.                '(100 . "AcDbEntity")
  1897.                '(100 . "AcDbPolyline")
  1898.                (cons 62 (+ color 1))
  1899.                (cons 90 (length pt))
  1900.                (cons 70 1)
  1901.          )
  1902.          (mapcar '(lambda (U) (cons 10 U)) pt)
  1903.        )
  1904.            )
  1905.          )
  1906.         lst2
  1907.       )
  1908.       ;; 绘制用以标识 superelevation_L 和 superelevation_R 的箭头  
  1909.       (setq pt
  1910.        (mapcar '(lambda (i / U)
  1911.             (setq U (nth i group_U))
  1912.             (polar U (* pi 0.5) (/ road_wide 15.0))
  1913.           )
  1914.          (list 7 8 9 10)
  1915.        )
  1916.       )
  1917.       (setq
  1918.         lst2
  1919.          (apply
  1920.      '(lambda (x_0 x_1 x_3 x_4 / x_5 x_6 group_L group_R)
  1921.         (if  (>= superelevation_L 0)
  1922.           (setq
  1923.       x_5  (polar x_0 (/ pi 6) (/ road_wide 15.0))
  1924.       group_L  (list x_5 x_0 x_1)
  1925.           )
  1926.           (setq
  1927.       x_5  (polar x_1 (* 0.8333 pi) (/ road_wide 15.0))
  1928.       group_L  (list x_0 x_1 x_5)
  1929.           )
  1930.         )
  1931.         (if  (< superelevation_R 0)
  1932.           (setq
  1933.       x_6  (polar x_4 (* 0.8333 pi) (/ road_wide 15.0))
  1934.       group_R  (list x_3 x_4 x_6)
  1935.           )
  1936.           (setq
  1937.       x_6  (polar x_3 (/ pi 6) (/ road_wide 15.0))
  1938.       group_R  (list x_6 x_3 x_4)
  1939.           )
  1940.         )
  1941.         (list group_L group_R)
  1942.       )
  1943.      pt
  1944.          )
  1945.       )
  1946.       (mapcar '(lambda (pt)
  1947.            (entmake
  1948.        (append (list '(0 . "LWPOLYLINE")
  1949.                '(100 . "AcDbEntity")
  1950.                '(100 . "AcDbPolyline")
  1951.                (cons 62 (+ color 2))
  1952.                (cons 90 (length pt))
  1953.                (cons 70 0)
  1954.          )
  1955.          (mapcar '(lambda (U) (cons 10 U)) pt)
  1956.        )
  1957.            )
  1958.          )
  1959.         lst2
  1960.       )
  1961.       ;; 把group 中    h_L h  h_R ( superelevation_L  superelevation_R )  W_L W_R   写入图中
  1962.       (setq
  1963.         pt (mapcar '(lambda (i / U U_2)
  1964.           (setq U (nth i group_U))
  1965.           (if  (or (= i 2) (= i 4))
  1966.             (polar U (* pi 0.5) (* road_wide 0.3))
  1967.             (polar U (* pi 0.5) (* road_wide 0.15))
  1968.           )
  1969.         )
  1970.        (list 0 2 3 4 6)
  1971.      )
  1972.       )
  1973.       (setq
  1974.         U    (car pt)
  1975.         U    (list  (car U)
  1976.       (- (cadr U) (* road_wide 0.35))
  1977.       )
  1978.         U_2 (last pt)
  1979.         U_2 (list  (car U_2)
  1980.       (- (cadr U_2) (* road_wide 0.35))
  1981.       )
  1982.         pt  (append pt (list U) (list U_2))
  1983.       )
  1984.       (setq
  1985.         lst2 (append group_h
  1986.          (nth 5 lst)  ; ( superelevation_L  superelevation_R )  
  1987.          (list (abs W_L))
  1988.          (list W_R)
  1989.        )
  1990.         lst2 (mapcar '(lambda (x) (rtos x 2 2)) lst2)
  1991.         lst2 (apply '(lambda (h_L h h_R slope_L slope_R W_L W_R)
  1992.            (list h_L
  1993.            (strcat slope_L " %")
  1994.            h
  1995.            (strcat slope_R " %")
  1996.            h_R
  1997.            (strcat "左宽:" W_L)
  1998.            (strcat "右宽:" W_R)
  1999.            )
  2000.          )
  2001.         lst2
  2002.        )
  2003.       )
  2004.       (setq j 0)
  2005.       (mapcar '(lambda (str / U_move)
  2006.            (setq U_move (nth j pt))
  2007.            (entmake
  2008.        (list '(0 . "TEXT")
  2009.              (cons 62 color)
  2010.              (append '(10) U_move)
  2011.              (cons 40 (* road_wide 0.1))
  2012.              (cons '1 str)
  2013.              (cons '71 0)
  2014.              (cons '72 1)
  2015.              (append '(11) U_move)
  2016.        )
  2017.            )
  2018.            (setq j (+ j 1))
  2019.          )
  2020.         lst2
  2021.       )
  2022.       (setq number (+ number 1)
  2023.       i   (+ i 1)
  2024.       )
  2025.     )
  2026.    group
  2027.        )
  2028.      )
  2029.     Line_segments
  2030.   )
  2031. )
  2032. ;; (setq  group_Line_segments (car ( create_group_Line_segments   group_turning_point  6782.755 ))  )  
  2033. ;; (setq  tang (cadr ( create_group_Line_segments   group_turning_point  6782.755 ))  )   
  2034. ;;   (setq e (entlast)) (command "zoom" "e")        (setq e   (car ( entsel)) )  ( entget e )
  2035. ;;  (setq group_turning_point (create_turning_point_group))   (setq group_widen (write_into_group_widen))   










  2036. ;;  (setq group_turning_point ( create_turning_point_group ))  
  2037. ;;  (setq  group_widen (write_into_group_widen))
  2038. ;;  (setq group_vertical_curve  (create_group_vertical_curve )) 创建竖曲线交点参数数组  
  2039. ;; (setq group_vertical_curve_2 ( create_group_vertical_curve_2  group_vertical_curve ) )   
  2040. ;;  (setq group_superelevation (create_group_superelevation ) )     创建左右边坡数组   
  2041. (defun create_group_data_out (group_Line_segments
  2042.             group_widen   group_vertical_curve_2
  2043.             group_superelevation
  2044.             road_wide     frame_wide
  2045.             U_insert     mold
  2046.             /       number
  2047.             Uniform_group_center
  2048.             group_transition   group_move
  2049.             group     n_x
  2050.             n_y     scale
  2051.            )

  2052.   (setq group_transition (create_group_transition group_Line_segments))
  2053.   (if (not road_wide)      ; 路面宽度
  2054.     (setq road_wide 5.0)
  2055.   )
  2056.   (if (not frame_wide)      ; 图框宽度
  2057.     (setq frame_wide 297)
  2058.   )
  2059.   (setq  n_x    (/ frame_wide (* road_wide 3.5))
  2060.   n_x    (fix n_x)
  2061.   n_y    (/ (* n_x 210) 297)
  2062.   n_y    (fix n_y)
  2063.   n_grid (* n_x n_y)
  2064.   )
  2065.   (setq  Uniform_group_center
  2066.    (create_Uniform_distribution
  2067.      n_x
  2068.      n_y
  2069.      frame_wide
  2070.    )
  2071.   )
  2072.   ;; (setq U_insert (getpoint "输入插入点:"))   
  2073.   (setq number 0)
  2074.   (mapcar '(lambda (Line_segments / group)
  2075.        (create_group_data_out_sub
  2076.          Line_segments
  2077.          mold
  2078.        )
  2079.      )
  2080.     group_Line_segments
  2081.   )
  2082.   ;; 绘制每页的边框
  2083.   (if (not (tblobjname "block" "图框"))
  2084.     (make_drawing_frame frame_wide U_insert "图框") ;创建一图框
  2085.   )
  2086.   (setq  residue  (rem number n_grid)
  2087.   n  (/ (- number residue) n_grid) ; 页数
  2088.   )
  2089.   (if (> residue 0)
  2090.     (setq n (+ n 1))
  2091.   )
  2092.   (setq  i     0
  2093.   scale (/ frame_wide 297.0)
  2094.   )
  2095.   (repeat n
  2096.     (setq b (* (/ frame_wide 297) 210)
  2097.     U (list (+ (car U_insert) (* (* frame_wide 1.2) i))
  2098.       (cadr U_insert)
  2099.       )
  2100.     )
  2101.     (entmake (list '(0 . "INSERT")
  2102.        (cons 2 "图框")
  2103.        (cons 10 U)
  2104.        (cons 41 scale)
  2105.        (cons 42 scale)
  2106.        (cons 43 scale)
  2107.        )
  2108.     )
  2109.     (setq i (+ i 1))
  2110.   )
  2111. )
  2112. ;; defun create_group_data_out 函数结束
  2113. ;; ( create_group_data_out group_Line_segments group_widen  road_wide  frame_wide   U_insert  mold)  





















  2114. ;; 在一个给定的长方形页面中 建立一个点集合 ,该点集合均匀的分布在页面中,页面左下角点为原点(list 0 0 )   
  2115. (defun create_Uniform_distribution
  2116.            (n_x       n_y      Width    /
  2117.             n_grid   i        j         n_1
  2118.             n_grid   finite_field
  2119.            )
  2120.   ;;   (setq U_insert (getpoint "输入插入点:"))  
  2121.   (if (not n_x)
  2122.     (setq n_x 8)
  2123.   )
  2124.   (if (not n_y)
  2125.     (setq n_y 4)
  2126.   )

  2127.   (setq  n_grid (* n_x n_y)
  2128.   n_1    0
  2129.   group  nil
  2130.   )
  2131.   (repeat n_grid
  2132.     ;;确定行数 i  列数j  ,group 的方向是由:下->上,再从:左->右  
  2133.     (setq j (rem n_1 n_y)
  2134.     i (/ (- n_1 j) n_y)
  2135.     )
  2136.     (setq group (cons (list i j) group))
  2137.     (setq n_1 (+ n_1 1))
  2138.   )

  2139.   (setq finite_field (reverse group))
  2140.   ;; 对新建有限域finite_field 从原点:(0 0) 移位到 (0.75 0.75)  
  2141.   (setq  group
  2142.    (mapcar '(lambda (U)
  2143.         (apply '(lambda (x y)
  2144.             (list (+ x 0.75)
  2145.             (+ y 0.75)
  2146.             )
  2147.           )
  2148.          U
  2149.         )
  2150.       )
  2151.      finite_field
  2152.    )
  2153.   )
  2154.   ;; 对数组group (i j)    按原点0 进行放大 ,放大为 图框297*210 大 ,   
  2155.   (setq  scale_x  (/ 297.0 (+ n_x 0.5))
  2156.   scale_y  (/ 210.0 (+ n_y 0.5))
  2157.     ;; n_y  n_x 加0.5 是为了留下页面的左右、上下空间
  2158.   )
  2159.   (setq  k  (/ width 297.0)    ; 指定的图框大小
  2160.   scale_x  (* scale_x k)
  2161.   scale_y  (* scale_y k)
  2162.   )
  2163.   (mapcar '(lambda (U)
  2164.        (apply '(lambda (x y)
  2165.            (list (* x scale_x)
  2166.            (* y scale_y)
  2167.            )
  2168.          )
  2169.         U
  2170.        )
  2171.      )
  2172.     group
  2173.   )
  2174. )          ; (defun create_Uniform_distribution 函数结束   
  2175. ;; (setq  Uniform_group_center  ( create_Uniform_distribution 5 4 600    )  )   


  2176. ;;  (setq ss (ssget) )   (setq pt (getpoint "输入插入点:"))   
  2177. ;;  (emkblk ss pt "tang")    (setq name "tang" )   
  2178. (defun emkblk (ss pt name / i)
  2179.   (entmake
  2180.     (list '(0 . "block")
  2181.     (cons 2 name)
  2182.     '(70 . 0)
  2183.     (cons 10 '(0 0))
  2184.     )
  2185.   )
  2186.   (repeat (setq i (sslength ss))
  2187.     (entmake (cdr (entget (ssname ss (setq i (1- i))))))
  2188.   )
  2189.   (entmake '((0 . "ENDBLK")))
  2190.   (command "_.erase" ss "")
  2191.   (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
  2192. )


  2193. ;; 绘制图框  (setq U_insert  (getpoint "输入插入点:"))  
  2194. (defun make_drawing_frame
  2195.        (a U_insert name / b d U ss group i group_string)
  2196.   (if (not a)
  2197.     (setq a 600.0)
  2198.   )
  2199.   (setq b (* (/ a 297.0) 210))
  2200.   (setq
  2201.     group
  2202.      (list '(0 0)
  2203.      (list a 0)
  2204.      (list a b)
  2205.      (list 0 b)
  2206.      )
  2207.   )
  2208.   (entmake
  2209.     (append (list '(0 . "LWPOLYLINE")
  2210.       '(100 . "AcDbEntity")
  2211.       '(100 . "AcDbPolyline")
  2212.       (cons 90 (length group))
  2213.       (cons 70 1)    ; 二维曲线闭合
  2214.       )
  2215.       (mapcar '(lambda (U) (cons 10 U)) group)
  2216.     )
  2217.   )
  2218.   (setq ss (ssget "L"))      ;用刚刚生成的图形创造一个选择集合ss
  2219.   (setq d (/ b 29.0))
  2220.   (entmakex
  2221.     (list '(0 . "line")
  2222.     (cons 10 (list 0 d))
  2223.     (cons 11 (list a d))
  2224.     )
  2225.   )
  2226.   (ssadd (entlast) ss)
  2227.   (setq  L     (/ a 5)
  2228.   U     (list L 0)
  2229.   i     1
  2230.   group nil

  2231.   )
  2232.   (repeat 4
  2233.     (entmakex
  2234.       (list '(0 . "line")
  2235.       (cons 10 (list (* L i) 0))
  2236.       (cons 11 (list (* L i) d))
  2237.       )
  2238.     )
  2239.     (ssadd (entlast) ss)
  2240.     (setq U  (list (* L (- i 1)) (* 0.1 d))
  2241.     group  (cons U group)
  2242.     )
  2243.     (setq i (+ i 1))
  2244.   )
  2245.   (setq  U     (list (* L (- i 1)) (* 0.1 d))
  2246.   group (cons U group)
  2247.   group (reverse group)
  2248.   )
  2249.   (setq  group_string
  2250.    (list "项目名称:" "设计单位:" "监理单位:" "施工单位:"
  2251.          "制图人:ashleytgg")
  2252.   )
  2253.   (setq i 0)
  2254.   (repeat 5
  2255.     (entmake
  2256.       (list '(0 . "TEXT")
  2257.       (append '(10) (nth i group)) ;第一对齐点(在 OCS 中)
  2258.       (cons 40 (* d 0.65))  ; 文字高度  
  2259.       (cons '1 (nth i group_string)) ; 内容
  2260.       )
  2261.     )
  2262.     (ssadd (entlast) ss)
  2263.     (setq i (+ i 1))
  2264.   )
  2265.   (if (not name)
  2266.     (setq name "tang")
  2267.   )
  2268.   (emkblk ss U_insert name)
  2269. )          ;  make_drawing_frame  函数结束
  2270. ;;   (setq U_insert  (getpoint "输入插入点:"))   ( make_drawing_frame  600  U_insert  "tang"  )   






  2271. ;; 绘图用函数函数结束 88888    绘图用函数函数结束88888     绘图用函数函数结束88888    绘图用函数函数结束88888    绘图用函数函数结束88888   绘图用函数函数结束   






  2272. ;; dcl 使用函数  888888888888888888        dcl 使用函数  888888888888888888  dcl 使用函数  888888888888888888dcl   使用函数  888888888888888888    dcl 使用函数  888888888888888888


  2273. (defun Dcl_write (lst / dcl_file str file)
  2274.   (vl-load-com)
  2275.   (setq dcl_file (vl-filename-mktemp nil nil ".dcl"))
  2276.   (setq file (open dcl_file "w"))
  2277.   (foreach str lst (write-line str file))
  2278.   (close file)
  2279.   (setq id (load_dialog dcl_file))
  2280. )
  2281. (setq string_dcl
  2282.        '("JD_item:list_box{  key="JD_list"; label="交点参数表:"; value=0;"
  2283.    "list=" ( 转点号  转点状态nil) 转点坐标  ( Lh1 R  Lh2  ) \\n ( 转点号  转点状态t) 转点坐标 (R_start R R_end  Lh1 Lh2 )";"
  2284.    "fixed_width=true; width=90; allow_accept=true;}"
  2285.    "table_wide :list_box{  key="table_wide"; label="交点加宽参数参数表:"; value=0;"
  2286.    "list=" 交点号  交点加宽值 ";"
  2287.    "allow_accept=true;}"
  2288.    "scfg:toggle{  label="曲线加宽方式,选中为直线加宽,不选一般加宽";  key="scfg";}"
  2289.    "Z_road_start :edit_box {label="请选择线路起点桩号:";  key= "Z_road_start";value="6782.775";allow_accept=true;}"
  2290.    "calculate :button {label="计算线元参数:";  key= "calculate";   fixed_width=true;width=20;}"
  2291.    "insert_table_J :button {label="请选择交点参数列表:";  key= "insert_table_J"; fixed_width=true;width=20; }"
  2292.    "insert_table_W :button {label="请选择加宽参数列表:";  key= "insert_table_W"; fixed_width=true;width=20; }"
  2293.    "JD_item_vertical:list_box{  key="JD_list_vertical"; label="竖曲线交点参数表:"; value=0;"
  2294.    "list=" ( 转点号  转点桩号 转点高程  转点半径 )    ";"
  2295.    "allow_accept=true;}"
  2296.    "insert_table_J_V :button {label="请选择竖曲线交点参数列表:";  key= "insert_table_J_V";  fixed_width=true;width=20;   }"
  2297.    "display :button {label="显示竖曲线、平面曲线交点参数:";  key= "display";  fixed_width=true;width=40;   }"
  2298.    "vertical_segments :list_box{  key="vertical_segments"; label="竖曲线线元参数表:"; value=0;"
  2299.    "list="( 转点号I j)Z_start Z_end  起点高程  线元起点象限角  R  转角Δ) ";"
  2300.    "allow_accept=true;}"
  2301.    "Line_segments :list_box{  key="Line_segments"; label="线元参数参数表:"; value=0;"
  2302.    "list="( 转点号I j) 起点半径 终点半径  曲线长度  偏转系数  线元起点象限角  起点桩号  起点坐标 ) ";"
  2303.    "allow_accept=true;}"
  2304.    "N_x :edit_box {label="N(X):";  key= "N_x";value="0";allow_accept=true;}"
  2305.    "E_Y :edit_box {label="E(Y):";  key= "E_Y";value="0";allow_accept=true;}"
  2306.    "insert_point : button {label="请选择插入点:";  key= "insert_point";  fixed_width=true;width=20;} "
  2307.    "road_wide :edit_box {label="请选择路面宽度:(不包括土路肩):";  key= "road_wide";value="5.0";allow_accept=true;}"
  2308.    "frame_wide :edit_box {label="请选择设计图框的宽度:";  key= "frame_wide";value="297";allow_accept=true;}"
  2309.    "table_superelevation :list_box{  key="table_superelevation"; label="交点超高参数参数表:"; value=0;"
  2310.    "list=" 交点号  交点超高值 ";"
  2311.    "allow_accept=true;}"
  2312.    "insert_table_slope :button {label="请选择超高参数列表:";  key= "insert_table_slope"; fixed_width=true;width=20; }"
  2313.    "draw_standard_section:"
  2314.    "dialog{  label="绘制公路标准断面";  spacer;"
  2315.    "fixed_width=true;width=120;"
  2316.    ": boxed_row  {JD_item;"
  2317.    ": column {"
  2318.    "insert_table_J;  spacer;"
  2319.    "Z_road_start ;"
  2320.    "calculate ;"
  2321.    "}"
  2322.    "}"
  2323.    ": boxed_row  {JD_item_vertical;"
  2324.    ": column {  fixed_width=true;width=20;"
  2325.    ": column { insert_table_J_V ;display ; }"
  2326.    "}"
  2327.    "}"
  2328.    ": boxed_row  {"
  2329.    ": boxed_column   { fixed_width=true;width=40;"
  2330.    "table_wide ;"
  2331.    ": column { scfg ; insert_table_W ; }"
  2332.    "}"
  2333.    ": boxed_column   { fixed_width=true;width=60;"
  2334.    "table_superelevation ;"
  2335.    "insert_table_slope;"
  2336.    "}"
  2337.    "}"
  2338.    ": boxed_row   {"
  2339.    ": column { fixed_width=true;width=50;"
  2340.    "N_x ;  E_Y ;  insert_point;"
  2341.    "}"
  2342.    ":  column    { road_wide ; frame_wide;   ok_cancel; }"
  2343.    "}"
  2344.    "}"
  2345.    "display_calculate_message:"
  2346.    "dialog{  label="显示计算信息";  spacer;"
  2347.    "fixed_width=true;width=140;"
  2348.    "Line_segments ;"
  2349.    "vertical_segments ;"
  2350.    ": boxed_row    { ok_cancel;       }"
  2351.    "}"
  2352.   )
  2353. )
  2354. (defun C:use_dcl (/           id
  2355.       sdt           group_vertical_curve
  2356.       group_vertical_curve_2
  2357.       parameter         list_key
  2358.       U           group
  2359.       group_JD_list         group_JD_plane
  2360.       group_JD_Width       group_JD_slope
  2361.       group_vertical_segments
  2362.       mold           group_turning_point
  2363.       group_Line_segments  group_widen
  2364.       group_superelevation
  2365.      )
  2366.   (if nil
  2367.     (setq ID
  2368.      (load_dialog
  2369.        "D:\\工作文件\\新建文件夹\\work\\公路曲线简易程序\\用变换群绘制公路曲线\\绘制标准断面\\绘制标准断面"
  2370.      )
  2371.     )
  2372.     (Dcl_write string_dcl)
  2373.   )
  2374.   (setq  sdt   1
  2375.   list_key (list "JD_list"    "Z_road_start"
  2376.            "JD_list_vertical" "table_wide"
  2377.            "scfg"      "table_superelevation"
  2378.            "N_x"      "E_Y"
  2379.            "road_wide"    "frame_wide"
  2380.           )
  2381.   )
  2382.   (while (>= sdt 0)
  2383.     (if  (< sdt 10)
  2384.       (progn
  2385.   (if (not (new_dialog "draw_standard_section" id))
  2386.     (exit)
  2387.   )
  2388.   ;; 对对对话框中的参数进行重新设置  
  2389.   (if (or (= sdt 3) (= sdt 6))
  2390.     (progn
  2391.       (if  (or group_JD_plane
  2392.         group_JD_list
  2393.         group_JD_Width
  2394.         group_JD_slope
  2395.     )
  2396.         (progn
  2397.     (start_list "JD_list" 3)
  2398.     (mapcar 'add_list group_JD_plane)
  2399.     (end_list)
  2400.     (start_list "JD_list_vertical" 3)
  2401.     (mapcar 'add_list group_JD_list)
  2402.     (end_list)
  2403.     (start_list "table_wide" 3)
  2404.     (mapcar 'add_list group_JD_Width)
  2405.     (end_list)
  2406.     (start_list "table_superelevation" 3)
  2407.     (mapcar 'add_list group_JD_slope)
  2408.     (end_list)
  2409.         )
  2410.       )
  2411.       (set_inform_dialog parameter list_key)
  2412.     )
  2413.   )
  2414.   (action_tile
  2415.     "cancel"
  2416.     "(done_dialog -2 )"
  2417.   )
  2418.   (action_tile      ; 竖曲线交点参数 插入表格的动作函数   
  2419.     "insert_table_J_V"
  2420.     "(action_insert_table_J_V)"
  2421.   )
  2422.   (action_tile      ; 平面曲线交点参数 插入表格的动作函数  
  2423.     "insert_table_J"
  2424.     "(action_insert_table_J)"
  2425.   )
  2426.   (action_tile      ; 计算平面曲线交点参数 的线元参数列表   
  2427.     "calculate"
  2428.     "(action_calculate \t group_turning_point)
  2429.      (setq parameter(get_inform_dialog \t list_key))(done_dialog 18 )"
  2430.   )

  2431.   (action_tile      ; 平面曲线交点的加宽参数插入的动作函数  
  2432.     "insert_table_W"
  2433.     "(action_insert_table_W)"
  2434.   )
  2435.   (action_tile
  2436.     "insert_point"
  2437.     "(setq parameter(get_inform_dialog \t list_key))(done_dialog 3 )"
  2438.   )
  2439.   (action_tile      ; 绘制标准断面  
  2440.     "accept"
  2441.     "(setq parameter(get_inform_dialog \t list_key))(done_dialog -8 )"
  2442.   )
  2443.   (action_tile
  2444.     "display"
  2445.     "(setq parameter(get_inform_dialog \t list_key)) (done_dialog 18 )"
  2446.   )

  2447.   (action_tile      ;交点的超高参数插入的动作函数  
  2448.     "insert_table_slope"
  2449.     "(action_insert_table_slope)"
  2450.   )
  2451.   (setq sdt (start_dialog))
  2452.       )
  2453.     )          ; (if (< sdt 10) 函数结束
  2454.     (if  (>= sdt 10)
  2455.       (progn
  2456.   (if (not (new_dialog "display_calculate_message" id))
  2457.     (exit)
  2458.   )
  2459.   (action_display group_vertical_segments group_Line_segments)
  2460.   (action_tile
  2461.     "accept"
  2462.     "(done_dialog 6 )"
  2463.   )
  2464.   (action_tile
  2465.     "cancel"
  2466.     "(done_dialog -2 )"
  2467.   )
  2468.   (setq sdt (start_dialog))
  2469.       )
  2470.     )          ; (if (>= sdt 10) 函数结束
  2471.     (if  (= sdt 3)
  2472.       (setq u        (getpoint "请选择插入点:")
  2473.       U        (list (cadr U) (car U))
  2474.       U        (mapcar 'rtos U)
  2475.       parameter
  2476.           (mapcar '(lambda (i)
  2477.          (nth i parameter)
  2478.              )
  2479.             (list 0 1 2 3 4 5 8 9)
  2480.           )
  2481.       parameter (append parameter U)
  2482.       parameter
  2483.           (mapcar '(lambda (i)
  2484.          (nth i parameter)
  2485.              )
  2486.             (list 0 1 2 3 4 5 8 9 6 7)
  2487.           )
  2488.       )
  2489.     )          ; (if  (= sdt 3) 函数结束  
  2490.   )          ; (while (> sdt 0) 函数结束  


  2491.   (unload_dialog id)
  2492.   (if (= sdt -8)
  2493.     (progn
  2494.       ;; lst 结构为 mold   "N_x"  "E_Y"  "road_wide" "frame_wide"   
  2495.       (setq lst         (mapcar '(lambda  (i)
  2496.           (nth i parameter)
  2497.         )
  2498.              (list 4 6 7 8 9)
  2499.            )
  2500.       mold       (atoi (car lst))
  2501.       lst         (cdr lst)
  2502.       lst         (mapcar 'atof lst)
  2503.       U_insert   (list (cadr lst) (car lst))
  2504.       road_wide  (caddr lst)
  2505.       frame_wide (nth 3 lst)
  2506.       )
  2507.       (if  group_Line_segments  
  2508.   (create_group_data_out
  2509.     group_Line_segments  group_widen
  2510.     group_vertical_curve_2
  2511.     group_superelevation  road_wide
  2512.     frame_wide    U_insert
  2513.     mold
  2514.    )        ; mold 为加宽方式
  2515.   (princ "您还没有输入完整的线路参数!")
  2516.       )
  2517.     )
  2518.   )          ;  (if (= sdt 8) 函数结束  
  2519. )


  2520. ;; 定义"insert_table_J_V" 按钮的动作
  2521. (defun action_insert_table_J_V
  2522.              (/ lst n group)
  2523.   (setq group_vertical_curve (create_group_vertical_curve))
  2524.   (setq  group_vertical_curve_2
  2525.    (create_group_vertical_curve_2
  2526.      group_vertical_curve
  2527.    )
  2528.   )
  2529.   (setq n (length group_vertical_curve))
  2530.   (setq  group_JD_list
  2531.    (mapcar '(lambda (lst)
  2532.         (apply '(lambda (JD Z h R)
  2533.             (strcat "JD: "
  2534.               (itoa JD)
  2535.               "   转点桩号:"
  2536.               (rtos Z 2 3)
  2537.               "   转点高程:"
  2538.               (rtos h 2 2)
  2539.               "   转点半径:"
  2540.               (rtos R 2 2)
  2541.             )
  2542.           )
  2543.          lst
  2544.         )
  2545.       )
  2546.      group_vertical_curve
  2547.    )
  2548.   )
  2549.   (setq  group_vertical_segments
  2550.    (mapcar '(lambda (lst    ; (setq lst ( nth 5 group_vertical_curve_2 ) )   
  2551.          / lst2 lst3 element i j)
  2552.         (setq lst2    (mapcar '(lambda (i)
  2553.                (rtos (nth i lst) 2 2)
  2554.              )
  2555.             (list 1 2 3 5)
  2556.           )
  2557.         lst3    (mapcar '(lambda (i)
  2558.                (angtos (nth i lst) 1 6)
  2559.              )
  2560.             (list 4 6)
  2561.           )
  2562.         element (car lst) ; 对第一个元素进行处理  
  2563.         i    (itoa (car element))
  2564.         j    (itoa (cadr element))
  2565.         element (strcat i "-" j)
  2566.         lst    (append (list element) lst2 lst3)
  2567.           ; lst 顺序为 (list 0 1 2 3 5 4 6 )  
  2568.         ;; 对lst 进行逆置换, 对 (list 0  1 2 3 5 4 6 )  用 (list 0 1 2 3  5 4 6 ) 置换   
  2569.         lst    (mapcar '(lambda (i)
  2570.                (nth i lst)
  2571.              )
  2572.             (list 0 1 2 3 5 4 6)
  2573.           )
  2574.         )
  2575.         ;; 对lst数组进行注释
  2576.         (setq
  2577.           lst2 (list "JD:"      "Z_start:" "Z_end:"
  2578.          "H:"      "α0:"     "R:"
  2579.          "α_Δ:"
  2580.         )
  2581.           lst  (append lst lst2)
  2582.           lst  (mapcar '(lambda (i)
  2583.               (nth i lst)
  2584.             )
  2585.            (list 7 0 8 1 9 2 10 3 11 4 12 5 13 6)
  2586.          )
  2587.         )
  2588.         (setq lst (vl-princ-to-string lst)
  2589.         lst (vl-string-left-trim "\(" lst)
  2590.         lst (vl-string-right-trim "\)" lst)
  2591.         )
  2592.       )
  2593.      group_vertical_curve_2
  2594.    )
  2595.   )
  2596.   (start_list "JD_list_vertical" 3)
  2597.   (mapcar 'add_list group_JD_list)
  2598.   (end_list)
  2599.   (set_tile "JD_list_vertical" (itoa n))
  2600. )



  2601. ;; 用参数parameter 对控件集合list_key 进行参数重置
  2602. (defun set_inform_dialog
  2603.        (parameter list_key / i lst)
  2604.   (setq i 0)
  2605.   (mapcar '(lambda (x / str)
  2606.        (setq str (nth i parameter))
  2607.        (set_tile x str)
  2608.        (setq i (+ 1 i))
  2609.      )
  2610.     list_key
  2611.   )
  2612. )
  2613. ;;( set_inform_dialog  parameter  list_key )     

  2614. ;;获取控件集合list_key 的参数parameter   
  2615. (defun get_inform_dialog
  2616.        (list_key / lst)
  2617.   (mapcar '(lambda (x) (get_tile x))
  2618.     list_key
  2619.   )
  2620. )

  2621. ;; 定义平面曲线插入交点文件按钮的函数     
  2622. (defun action_insert_table_J (/ lst group)
  2623.   (setq group_turning_point (create_turning_point_group))
  2624.   ;; 用group_turning_point 数组分别对列表框 "JD_list"   
  2625.   (setq  group
  2626.    (mapcar
  2627.      '(lambda (lst / state subset_label)
  2628.         (apply '(lambda (x_0 x_1 x_2 x_3)
  2629.       (setq x_1 (mapcar 'rtos x_1)
  2630.             x_1 (list "N:" (cadr x_1) " E:" (car x_1))
  2631.             x_1 (apply 'strcat x_1)
  2632.       )
  2633.       (if (cadr x_0)
  2634.         (progn
  2635.           (setq state "Yes")
  2636.           (setq
  2637.             x_2 (apply '(lambda (y_0 y_1 y_2 y_3 y_4)
  2638.               (setq subset_label (list "R_s"
  2639.                      "R"
  2640.                      "R_e"
  2641.                      "Lh1"
  2642.                      "Lh2")
  2643.               subset       (list y_0 y_1 y_2 y_3 y_4)
  2644.               subset       (append subset subset_label)
  2645.               )
  2646.               (mapcar '(lambda (i)
  2647.                    (nth i subset)
  2648.                  )
  2649.                 (list 5 0 6 1 7 2 8 3 9 4)
  2650.               )
  2651.             )
  2652.            x_2
  2653.           )
  2654.           )
  2655.         )
  2656.         (progn
  2657.           (setq state "No")
  2658.           (setq x_2 (apply '(lambda (y_0 y_1 y_2)
  2659.             (setq subset_label (list "Lh1" "R" "Lh2")
  2660.                   subset     (list y_0 y_1 y_2)
  2661.                   subset     (append subset subset_label)
  2662.             )
  2663.             (mapcar  '(lambda (i)
  2664.                  (nth i subset)
  2665.                )
  2666.               (list 3 0 4 1 5 2)
  2667.             )
  2668.                 )
  2669.                x_2
  2670.               )
  2671.           )
  2672.         )
  2673.       )    ; (if (cadr x_0) 函数结束
  2674.       (setq x_2 (vl-princ-to-string x_2)
  2675.             x_2 (vl-string-left-trim "\(" x_2)
  2676.             x_2 (vl-string-right-trim "\)" x_2)
  2677.       )
  2678.       (list "JD:" (car x_0) state x_1 x_2)
  2679.           )
  2680.          lst
  2681.         )
  2682.       )
  2683.      group_turning_point
  2684.    )
  2685.   )
  2686.   (setq  group_JD_plane
  2687.    (mapcar '(lambda (lst / string)
  2688.         (setq string (vl-princ-to-string lst)
  2689.         string (vl-string-left-trim "\(" string)
  2690.         string (vl-string-right-trim "\)" string)
  2691.         )
  2692.       )
  2693.      group
  2694.    )
  2695.   )

  2696.   (start_list "JD_list" 3)
  2697.   (mapcar 'add_list group_JD_plane)
  2698.   (end_list)
  2699. )          ;   action_insert_table_J 函数结束



  2700. (defun action_insert_table_W (/ lst group)
  2701.   (setq group_widen (write_into_group_widen))
  2702.   ;; 用group_widen 数组分别对列表框 "table_wide" 进行填充  
  2703.   (setq  group_JD_Width
  2704.    (mapcar '(lambda (lst
  2705.          /
  2706.          JD
  2707.          W
  2708.         )
  2709.         (setq JD (itoa (car lst))
  2710.         W  (rtos (cadr lst) 2 3)
  2711.         )
  2712.         (strcat "JD: " JD "  加宽:" W)

  2713.       )
  2714.      group_widen
  2715.    )
  2716.   )
  2717.   (start_list "table_wide" 3)
  2718.   (mapcar 'add_list group_JD_Width)
  2719.   (end_list)
  2720. )          ;   action_insert_table_W 函数结束




  2721. (defun action_calculate
  2722.        (group_turning_point / lst group road_start group_sum n)
  2723.   (setq  road_start (get_tile "Z_road_start")
  2724.   road_start (atof road_start)
  2725.   )
  2726.   (if group_turning_point
  2727.     (setq
  2728.       lst
  2729.         (create_group_Line_segments group_turning_point road_start)
  2730.       group_Line_segments
  2731.         (car lst)
  2732.     )
  2733.   )
  2734. )          ;   action_calculate 函数结束


  2735. ;; 显示按钮 display 的动作函数
  2736. (defun action_display
  2737.           (group_vertical_segments
  2738.            group_Line_segments /
  2739.            n       group
  2740.            group_sum
  2741.           )
  2742.   (if group_vertical_segments
  2743.     (progn
  2744.       (start_list "vertical_segments" 3)
  2745.       (mapcar 'add_list group_vertical_segments)
  2746.       (end_list)
  2747.       (setq n (length group_vertical_curve_2))
  2748.       (set_tile "vertical_segments" (itoa n))
  2749.     )
  2750.   )
  2751.   (if group_Line_segments
  2752.     (progn
  2753.       (setq group_sum (apply 'append group_Line_segments))
  2754.       ;; 用 group_Line_segments 填充列表框 "Line_segments"
  2755.       (setq group_sum
  2756.        (mapcar      ; (setq lst (car group_sum))  (setq x_7 ( nth 7  lst))   
  2757.          '(lambda  (lst / lenth lst_label)
  2758.       (apply '(lambda (x_0 x_1 x_2 x_3 x_4 x_5 x_6 x_7)
  2759.           (setq x_0 (mapcar 'itoa x_0)
  2760.           x_0 (list (car x_0) "-" (cadr x_0))
  2761.           x_0 (apply 'strcat x_0)
  2762.           )
  2763.           (setq x_7 (mapcar 'rtos x_7)
  2764.           x_7 (list "N:" (cadr x_7) " E:" (car x_7))
  2765.           x_7 (apply 'strcat x_7)
  2766.           )
  2767.           (setq
  2768.             x_6 (f_zhuanghao x_6)
  2769.           )
  2770.           (if  (atom x_3)
  2771.             (setq lenth x_3)
  2772.             (setq lenth (car x_3))
  2773.           )
  2774.           (setq lenth  (* lenth 1.0)
  2775.           x_3  (rtos lenth 2 2)
  2776.           x_5  (angtos x_5 1 6)
  2777.           )
  2778.           ;; 对(list x_0 x_1 x_2 x_3 x_4 x_5 x_6 x_7 ) 进行标注
  2779.           (setq lst      (list x_0 x_1 x_2 x_3 x_4 x_5 x_6 x_7)
  2780.           lst_label (list "R_s:"
  2781.               "R_e:"
  2782.               "lenth:"
  2783.               "reflex:"
  2784.               "α_s:"
  2785.              )
  2786.           lst      (append lst lst_label)
  2787.           )
  2788.           ;;  lst顺序为 (0 1 2 3 4 5 6 7 8 9 10 11 12 )
  2789.           (mapcar '(lambda (i)
  2790.                (nth i lst)
  2791.              )
  2792.             (list 0 8 1 9 2 10 3 11 4 12 5 6 7)
  2793.           )
  2794.         )
  2795.        lst
  2796.       )
  2797.     )
  2798.          group_sum
  2799.        )
  2800.       )
  2801.       (setq group      ; (setq lst (car group_sum ))  
  2802.        (mapcar '(lambda (lst / string)
  2803.       (setq string (vl-princ-to-string lst))
  2804.       (setq string (vl-string-left-trim "\(" string)
  2805.             string (vl-string-right-trim "\)" string)
  2806.       )
  2807.           )
  2808.          group_sum
  2809.        )
  2810.       )
  2811.       (start_list "Line_segments" 3)
  2812.       (mapcar 'add_list group)
  2813.       (end_list)
  2814.     )
  2815.     ;; 当group_Line_segments  数组为空时
  2816.     (progn
  2817.       (start_list "Line_segments" 2)
  2818.       (mapcar 'add_list
  2819.         (list "group_Line_segments 交点数组为空!")
  2820.       )
  2821.       (end_list)
  2822.     )
  2823.   )
  2824.   (setq n (length group))
  2825.   (set_tile "Line_segments" (itoa n))
  2826. )
  2827. ;;  ( action_display  group_vertical_segments  group_Line_segments )  



  2828. ;; 定义插入 交点超高参数 的动作函数   
  2829. (defun action_insert_table_slope (/ n)
  2830.   (setq group_superelevation (create_group_superelevation))
  2831.   (setq  group_JD_slope
  2832.    (mapcar '(lambda (lst / JD slope lst2 slope_back slope_front)
  2833.         (if  (= (length lst) 2)
  2834.           (setq JD    (itoa (car lst))
  2835.           slope (rtos (cadr lst))
  2836.           lst2  (strcat "JD: " JD " 超高值: " slope " %")
  2837.           )
  2838.         )
  2839.         (if  (= (length lst) 3)
  2840.           (setq JD    (itoa (car lst))
  2841.           slope_bakc  (rtos (car (cadr lst)))
  2842.           slope  (rtos (cadr (cadr lst)))
  2843.           slope_front  (rtos (car (caddr lst)))
  2844.           lst2  (strcat  "JD: "
  2845.             JD
  2846.             " 超高开始值: "
  2847.             slope_bakc
  2848.             " %"
  2849.             " 超高值: "
  2850.             slope
  2851.             " %"
  2852.             " 超高结束值: "
  2853.             slope_front
  2854.             " %"
  2855.                  )
  2856.           )
  2857.         )
  2858.         lst2
  2859.       )
  2860.      group_superelevation
  2861.    )
  2862.   )
  2863.   (start_list "table_superelevation" 3)
  2864.   (mapcar 'add_list group_JD_slope)
  2865.   (end_list)
  2866.   (setq n (length group_JD_slope))
  2867.   (set_tile "table_superelevation" (itoa n))
  2868. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 工具|主题: 71, 订阅: 4
发表于 2019-10-11 15:07 | 显示全部楼层
迷失1786 发表于 2018-4-20 22:51
还是很厉害,一般都用维地和鸿业

请问下,纬地超高地方有问题咋回事?图纸上是不超高的,按照条件输入,有超高,很郁闷。
还有路槽放坡开挖,量纬地好像也不好算吧。
发表于 2023-7-3 19:23 | 显示全部楼层
源码对于编程的人是好东西,谢谢开心版主的奉献。顶起!
发表于 2019-10-12 09:54 | 显示全部楼层
楼主厉害,这么长的代码。请问是公路专业的吧,向您学习
发表于 2016-2-13 11:23 来自手机 | 显示全部楼层
还是很厉害,一般都用维地和鸿业
发表于 2017-9-30 09:23 | 显示全部楼层
路桥行业,学习的榜样,始终追随楼主!
发表于 2017-10-5 20:17 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
发表于 2017-10-6 21:41 | 显示全部楼层
感谢楼主的无私分享 谢谢,祝双节过得愉快!
发表于 2017-10-12 22:08 来自手机 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 !下载学习!谢谢
发表于 2017-10-13 19:24 | 显示全部楼层
顶顶顶顶顶顶顶
发表于 2017-10-16 09:44 | 显示全部楼层
好,好,好,我也是修公路的,学习。
发表于 2018-4-11 15:52 | 显示全部楼层
感谢楼主的无私分享
发表于 2018-4-20 22:51 | 显示全部楼层

还是很厉害,一般都用维地和鸿业
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 16:07 , Processed in 0.543198 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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