明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1708|回复: 2

高程与坐标

[复制链接]
发表于 2015-3-23 20:47 | 显示全部楼层 |阅读模式
指定起点按照顺序一次性提取多段线各端点高程及坐标
发表于 2015-3-24 10:36 | 显示全部楼层
从网上搜了个获取三维多段线顶点坐标高程的函数,希望对你有用。
  1. (Defun ayGetPolyLineVTX        (LwPolyEntName /      entData1            entName1
  2.                          pel        ptp    wpl    wpll   plp    par
  3.                          ct        pen    rl     pn     clk    pt
  4.                          al        gx     bj     np     xc            gg
  5.                          rr        cp     retList
  6.                         )
  7.   (setq entName1 LwPolyEntName)
  8.   (setq retList nil)
  9.   (setq entData1 (entget entName1))
  10.   (if (= "POLYLINE" (Cdr (Assoc 0 entData1)))
  11.     (progn
  12.       (setq pel             entData1                ;取出对象表.
  13.             ptp             (Cdr (Assoc 70 pel)) ;取出结束片段型.
  14.             wpl             '()                ;自建的点位数表.
  15.             wpll     '()
  16.             entName1 (EntNext entName1)
  17.             pen             entName1
  18.       )                                        ;end_setq
  19.       (While (/= "SEQEND" (Cdr (Assoc 0 (entget pen)))) ;如果没束.
  20.         (setq pel  (entget pen)                ;取得顶点对象数据表.
  21.               plp  (Cdr (Assoc 10 pel))        ;取出控制点点位.
  22.               par  (Cdr (Assoc 42 pel))        ;取出弓弦比.
  23.               wpl  (Cons (List plp par) wpl) ;将数据加到WPL表中.
  24.               wpll (cons plp wpll)
  25.         )                                ;end_setq
  26.         (setq pen (EntNext pen))        ;搜索下一个对象.
  27.       )                                        ;end_while
  28.       (setq wpll (Reverse wpll))
  29.                                         ;以下代码暂时没有用!
  30.       (setq ct (If (= 0 (Cadr (Car wpl)))
  31.                  "直线片段封闭"
  32.                  "弧片段封闭"
  33.                )
  34.       )
  35.       (setq wpl        (Cons (Last wpl) wpl)        ;加入封闭点.
  36.             wpl        (Reverse wpl)                ;整理WPL表.
  37.             rl        (Length wpl)
  38.             pn        0
  39.       )                                        ;end_setq
  40.       (setq clk        (If (Or (= 0 ptp) (= 128 ptp))
  41.                   "开口"
  42.                   "封闭"
  43.                 )
  44.       )
  45.       (Repeat (1- rl)                        ;逐点分析.
  46.         (setq al (Nth pn wpl)                ;取出点数据表.
  47.               pt (Car al)                ;取出点位.
  48.         )                                ;end_setq
  49.         (If (And (/= 0.0 (Cadr al)) (Nth pn wpl)) ;如果是断.
  50.           (Progn (setq gx (Cadr al)        ;取出弓比.
  51.                        bj (* (ATAN (ABS gx)) 4) ;计算包角.
  52.                        np (Car (Nth (1+ pn) wpl)) ;取出下一点位.
  53.                        xc (* 0.5 (Distance pt np)) ;半弦长计算.
  54.                        gg (* gx xc)        ;弓高计算.
  55.                        rr (/ (+ (* xc xc) (* gg gg)) (* 2 gg))
  56.                  )                        ;end_setq  
  57.                  (setq cp (Polar pt (setq pa (Angle pt np)) xc)
  58.                        cp (Polar cp (+ pa (* 0.5 PI)) (- rr gg))
  59.                  )                        ;end_setq
  60.           )                                ;end_progn
  61.         )                                ;end_if
  62.         (setq pn (1+ pn))
  63.       )                                        ;end_repeat
  64.       (setq retList wpll)
  65.     )                                        ;end_progn
  66.   )                                        ;end_if
  67. )
发表于 2015-12-23 19:13 | 显示全部楼层
不错的东西,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 05:34 , Processed in 0.265007 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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