明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5372|回复: 16

[求助]根据数据组建三角网程序

  [复制链接]
发表于 2009-4-22 15:57:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-4-22 16:35:04 编辑

十分想了解一下根据地形数据文件组建三角网的VB源代码,不知哪位高人可以指点一下,

发表于 2021-4-20 11:29:55 | 显示全部楼层

能够导出,CASS能识别的,sjw文件最好:D
 楼主| 发表于 2009-5-3 09:35:00 | 显示全部楼层

自己顶一下

发表于 2012-2-6 06:05:40 | 显示全部楼层
发表于 2012-5-1 19:52:58 | 显示全部楼层
有那么高手可以提供lisp 代码么?
发表于 2012-5-10 14:04:05 | 显示全部楼层
本帖最后由 gzxl 于 2012-5-10 14:12 编辑
  1. (defun c:test (/ i pl s)
  2.    (princ (strcat "\n选择高程点..."))
  3.    (if (setq i 0
  4.             s (ssget '((8 . "GCD") (0 . "INSERT") (2 . "GC200")))
  5.        )
  6.        (progn
  7.           (repeat (sslength s)
  8.               (setq pl (cons (cdr (assoc 10 (entget (ssname s i)))) pl)
  9.                     i  (1+ i)
  10.               )
  11.           )
  12.           (triangulate pl)
  13.       )
  14.    )
  15. )
  16. (defun triangulate (pl / a b c i i1 i2 bb sl al el tl L ma mi ti tr x1 x2 y1 y2 p r cp)   
  17.    (if pl
  18.       (progn
  19.           (setq ti (car (_VL-TIMES))
  20.                 i  1
  21.                 i1 (/ (length pl) 100.)
  22.                 i2 0
  23.                 pl (vl-sort pl (function (lambda (a b) (< (car a) (car b)))))
  24.                 bb (list (apply 'mapcar (cons 'min pl)) (apply 'mapcar (cons 'max pl)))
  25.                 x1 (caar bb)
  26.                 x2 (caadr bb)
  27.                 y1 (cadar bb)
  28.                 y2 (cadadr bb)
  29.           )
  30.           (setq cp (list (/ (+ x1 x2) 2.0) (/ (+ y1 y2) 2.0))
  31.                 r (* (distance cp (list x1 y1)) 20)
  32.                 ma (+ (car cp) r)
  33.                 mi (- (car cp) r)
  34.                 sl (list (list ma (cadr cp) 0)
  35.                         (list mi (+ (cadr cp) r) 0)
  36.                         (list mi (- (cadr cp) r) 0)
  37.                    )      
  38.                 al (list (cons x2 (cons cp (cons (* 20 r) sl))))   
  39.                 ma (1- ma)
  40.                 mi (1+ mi)
  41.           )
  42.           (repeat (length pl)
  43.              (setq p  (car pl)
  44.                    pl (cdr pl)
  45.                    el nil
  46.              )
  47.              (while al
  48.                 (setq tr  (car al)
  49.                       al  (cdr al)
  50.                 )
  51.                 (cond
  52.                    ((< (car tr) (car p)) (setq tl (cons (cdddr tr) tl)))
  53.                    ((< (distance p (cadr tr)) (caddr tr))
  54.                        (setq tr (cdddr tr)
  55.                              a (car tr)
  56.                              b (cadr tr)
  57.                              c (caddr tr)
  58.                              el (cons (list (+ (car a) (car b)) (+ (cadr a) (cadr b)) a b)
  59.                                       (cons (list (+ (car b) (car c)) (+ (cadr b) (cadr c)) b c)
  60.                                             (cons (list (+ (car c) (car a)) (+ (cadr c) (cadr a)) c a) el)
  61.                                       )
  62.                                 )
  63.          
  64.                        )
  65.                    )
  66.                    (t (setq L (cons tr L)))
  67.                 )
  68.              )      
  69.              (setq al L
  70.                    L nil
  71.                    el (vl-sort el (function (lambda (a b) (if (= (car a) (car b)) (<= (cadr a) (cadr b)) (< (car a) (car b))))))
  72.              )
  73.              (while el
  74.                 (if (and (= (caar el) (caadr el)) (= (cadar el) (cadadr el)))
  75.                     (setq el (cddr el))
  76.                     (setq al (cons (getcircumcircle p (cddar el)) al)
  77.                           el (cdr el)
  78.                     )
  79.                 )
  80.              )
  81.              (if (and (< (setq i (1- i)) 1) (< i2 100))
  82.                  (progn
  83.                     (setvar "MODEMACRO" (strcat "◎正在连三角网" (itoa (setq i2 (1+ i2))) " % " (substr "..." 1 (- 100 i2))))
  84.                     (setq i i1)
  85.                  )
  86.              )
  87.           )
  88.           (foreach tr al (setq tl (cons (cdddr tr) tl)))
  89.           (setq tl (vl-remove-if-not (function (lambda (a) (and (< mi (caadr a) ma) (< mi (caaddr a) ma)))) tl))
  90.           (or (tblsearch "LAYER" "TIN")
  91.               (entmake (list '(0 . "LAYER")
  92.                              '(100 . "AcDbSymbolTableRecord")
  93.                              '(100 . "AcDbLayerTableRecord")
  94.                              '(2 . "TIN")
  95.                              '(70 . 0)
  96.                              '(62 . 8)
  97.                              '(6 . "Continuous")
  98.                              '(290 . 1)
  99.                              '(370 . -3)
  100.                        )
  101.               )
  102.           )  
  103.           (setvar "CLAYER" "TIN")
  104.           (foreach tr tl
  105.              (entmake (list (cons 0 "3DFACE")
  106.                             (cons 10 (car tr))
  107.                             (cons 11 (car tr))
  108.                             (cons 12 (cadr tr))
  109.                             (cons 13 (caddr tr))
  110.                       )
  111.              )
  112.           )
  113.       )
  114.    )
  115.    (setvar "MODEMACRO" "")
  116.    (princ (strcat "\n " (rtos (/ (- (car (_VL-TIMES)) ti) 1000.) 2 4) " secs."))
  117.    (princ)
  118. )
  119. (defun getcircumcircle (a el / b c c2 cp r ang)
  120.    (setq b (car el)
  121.          c (cadr el)
  122.          c2 (list (car c) (cadr c))
  123.    )
  124.    (if (not (zerop (setq ang (- (angle b c) (angle b a)))))
  125.        (progn
  126.           (setq cp (polar c2 (+ -1.570796326794896 (angle c a) ang) (setq r (/ (distance a c2) (sin ang) 2.0)))
  127.                 r (abs r)
  128.           )
  129.           (list (+ (car cp) r) cp r a b c)
  130.        )
  131.    )
  132. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 老大这个能不能生成三维线而不是三维面啊

查看全部评分

发表于 2012-5-11 20:51:57 | 显示全部楼层
本帖最后由 yshf 于 2012-5-11 20:53 编辑

gzxl的程序不错
但应加入对边界上狭长的三角形进行处理。
发表于 2012-5-11 22:15:57 | 显示全部楼层
gzxl 发表于 2012-5-10 14:04

谢谢,找了很久了
发表于 2012-5-12 09:29:54 | 显示全部楼层
现在一般测量软件有这样的功能
发表于 2012-10-27 23:43:12 | 显示全部楼层
这个源码好,顶起,但不知和cass生的三角网的差距大吗,各有什么优缺点。
发表于 2012-12-30 23:50:57 | 显示全部楼层
思路好,原理差不多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-23 12:07 , Processed in 0.194685 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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