明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: skg123

《求助》lsp程序如何从地形图上提取断面数据?

  [复制链接]
发表于 2011-10-18 11:12:45 | 显示全部楼层
我想要这个程序
发表于 2012-2-6 05:45:35 | 显示全部楼层
不谋而合,该怎么办啊
发表于 2013-4-18 20:41:50 | 显示全部楼层
很好,可惜要币
发表于 2013-4-18 21:27:11 | 显示全部楼层
好东西,但是没有明经币了
发表于 2013-4-30 20:42:55 | 显示全部楼层
测量成图剖面计算 有个 横剖面计算
下载地址 pmq.ys168.com
发表于 2013-5-17 11:32:42 | 显示全部楼层
用的吧,不过收费500,嘿嘿,有点贵,却值得,无论多少数据,一键搞定,呵呵,QQ58635053
发表于 2013-5-17 13:06:39 | 显示全部楼层
这么多人有兴趣啊
  1. (defun c:dmcj ( / a b curve dislst dist ele file filename fistdist fistgcd fistpt gcdz i ispt lst msg name nn ob ob_pl obj
  2.                   objname osmode p1 p2 p3 p4 pathname pl pl1 points pt ptlst ss startpt str textstring use v xx zxd)
  3.   ;;;高程点按曲线进行排序
  4.   (defun dmcj_gcdsort (points curve / pl1 xx nn)
  5.     (if (= (type curve) 'ENAME) (setq curve (vlax-ename->vla-object curve)))
  6.     (setq pl1 (mapcar '(lambda (xx /) (vlax-curve-getParamAtPoint curve (vlax-curve-getClosestPointTo curve xx))) points))
  7.     (mapcar '(lambda (nn) (nth nn points)) (vl-sort-i pl1 '<))
  8.   )
  9.   (defun dmcj_getstr (pt use / a b dislst dist i ispt lst Name ob obj p1 p2 p3 p4 textstring)
  10.     (setq p1 (polar pt 3.92699 (* use 0.01))
  11.           p2 (polar pt 5.49779 (* use 0.01))
  12.           p3 (polar pt 0.785398 (* use 0.01))
  13.           p4 (polar pt 2.35619 (* use 0.01))
  14.     )
  15.     (setq lst (list p1 p2 p3 p4))
  16.     (setq ob (ssget "_CP" lst (list '(-4 . "<OR") '(0 . "*TEXT") '(-4 . "OR>"))))
  17.     (cond
  18.       ((= ob nil) (setq TextString ""))
  19.       ((= (sslength ob) 1)
  20.          (setq TextString (Vlax-Get (vlax-ename->vla-object (ssname ob 0)) 'TextString ))
  21.          (if (or (= (substr TextString 1 1) "k") (= (substr TextString 1 1) "K")) (setq TextString ""))
  22.       )
  23.       ((>= (sslength ob) 2)
  24.          (setq i 0 dislst nil)
  25.          (repeat (sslength ob)
  26.            (setq Name (ssname ob i))
  27.            (setq obj (vlax-ename->vla-object Name))
  28.            (setq isPt (Vlax-get obj 'InsertionPoint ))
  29.            (setq TextString (Vlax-Get obj 'TextString ))
  30.            (if (or (/= (substr TextString 1 1) "k") (/= (substr TextString 1 1) "K"))
  31.              (progn
  32.                (setq dist (list (distance pt isPt) TextString))
  33.                (setq dislst (cons dist dislst))
  34.              )
  35.            )
  36.            (setq i (1+ i))
  37.          )
  38.          (setq dislst (vl-sort dislst (function (lambda (a b) (< (car a) (car b))))))
  39.          (setq TextString (cadr (car dislst)))
  40.       )
  41.     )
  42.     TextString
  43.   )
  44.   (if (= (getvar "USERR1") 0.0)
  45.       (progn
  46.           (setq use (getint "\n绘图比例1:<200>"))
  47.           (if (= use nil) (setq use 200))
  48.           (setvar "USERR1" use)
  49.       )
  50.   )
  51.   (vl-load-com)
  52.   (setq use (getvar "USERR1"))
  53.   (setq osmode (getvar "osmode"))
  54.   (setvar "osmode" 0)
  55.   (setvar "cmdecho" 0)
  56.   (if (setq PL (car (entsel "\n请选择断面线:")))
  57.     (progn
  58.       (setq ob_PL (vlax-ename->vla-object PL))
  59.       (setq objname (Vlax-Get ob_pl 'ObjectName ))
  60.       (setvar "osmode" 33)
  61.       (setq zxd (getpoint "\n拾取断面起点:")
  62.             zxd (list (car zxd) (cadr zxd))
  63.       )
  64.       (setvar "osmode" 0)
  65.       (cond
  66.         ((= objname "AcDbLine")
  67.           (setq StartPt (Vlax-Get ob_pl 'StartPoint ))
  68.         )
  69.         ((= objname "AcDbPolyline")
  70.           (setq Ele (Vlax-Get ob_pl 'Elevation ))
  71.           (cond
  72.             ((/= Ele 0) (alert "请将断面线标高修改为0") (exit))
  73.             ((= Ele 0)
  74.               (setq ptlst (Vlax-Get ob_pl 'Coordinates ))
  75.               (setq StartPt (list (car ptlst) (cadr ptlst) 0))
  76.             )
  77.           )
  78.         )
  79.       )
  80.       (princ "\n选择和断面线高程点")
  81.       (setq lst nil)
  82.       (if (setq i -1 ss (ssget '((0 . "INSERT") (2 . "GC200"))))
  83.         (progn
  84.           (repeat (sslength ss)
  85.             (setq Name (ssname ss (setq i (1+ i))))
  86.             (setq pt (cdr (assoc 10 (entget Name))))
  87.             (setq lst (cons pt lst))
  88.           )
  89.           (setq lst (dmcj_gcdsort lst ob_PL)) ;高程点按曲线进行排序
  90.           (setq fistgcd (car lst))
  91.           (setq fistPt (vlax-curve-getClosestPointTo ob_PL fistgcd)) ;第一个高程点垂足断面线的坐标
  92.           (setq fistdist (distance zxd fistPt)) ;第一个高程点垂足断面线上的坐标点离断面线起点的距离
  93.           (if (null **Name) (setq **Name "D:\\K0+000"))
  94.           (if (setq file (getfiled "保存数据" **Name "csv" 1))
  95.             (progn
  96.               (setq FileName (vl-filename-base file))
  97.               (setq PathName (vl-filename-directory file))
  98.               (cond
  99.                 ((or (= PathName "C:\") (= PathName "D:\") (= PathName "E:\") (= PathName "F:\"))
  100.                    (setq msg (strcat PathName FileName))
  101.                 )
  102.                 ((or (/= PathName "C:\") (/= PathName "D:\") (/= PathName "E:\") (/= PathName "F:\"))
  103.                    (setq msg (strcat PathName "\" FileName))
  104.                 )
  105.               )
  106.               (if (null msg)
  107.                 (setq msg **Name) ;_回车后的返回值
  108.                 (setq **Name msg) ;_全局变量*real值,记忆为用户输入值
  109.               )
  110.               (setq file (open file "a"))
  111.               (write-line "距离,高程值,备注" file)
  112.               (foreach v lst
  113.                 (setq pt (vlax-curve-getClosestPointTo ob_PL v))
  114.                 (setq dist (- (vlax-curve-getDistAtPoint ob_PL pt) fistdist))
  115.                 (setq gcdz (caddr v))
  116.                 (setq str (dmcj_getstr (list (car pt) (cadr pt)) use)) ;注记
  117.                 (write-line (strcat (rtos dist 2 3) "," (rtos gcdz 2 3)  "," str) file)
  118.               )
  119.               (close file)
  120.             )
  121.           )
  122.         )
  123.       )
  124.     )
  125.   )
  126.   (setvar "osmode" osmode)
  127.   (princ)
  128. )

点评

编程大牛  发表于 2017-1-17 08:07
测绘精英  发表于 2015-6-15 11:30
发表于 2013-6-2 11:39:50 | 显示全部楼层
谢谢gzxl 无私提供源码!
发表于 2013-11-29 15:40:20 | 显示全部楼层
gzxl 发表于 2013-5-17 13:06
这么多人有兴趣啊

要是有个动态演示更加美好
发表于 2013-11-29 20:48:43 | 显示全部楼层
gzbccy 发表于 2013-11-29 15:40
要是有个动态演示更加美好


本帖子中包含更多资源

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

x

点评

挺好的,选取了断面线附近的高程点绘制断面图。  发表于 2015-4-20 20:05
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 06:44 , Processed in 0.164427 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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