明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2297|回复: 4

求助:多边形内高程点的最大值和最小值

[复制链接]
发表于 2011-9-17 13:20 | 显示全部楼层 |阅读模式
1明经币


编程要求步骤:1,选择高程点的范围:(1,选择已有的多边形,2,绘制高程点范围)
                      2,显示最大高程值和最小高程值,并标注在多边形内。


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

最佳答案

发表于 2011-9-17 13:20 | 显示全部楼层
  1. ;_选择与绘制的多边形要在完全显示在当前屏幕内  GCD层的块参照没处理
  2. (defun c:tt (/ ENAME GCZ I MAXGC MAXRETURN MINRETURN MIXGC OLDENTLAST PLIST SLECTMODE SS AT:ENTSEL AT:DRAWPL AT:PL_PLIST)
  3. ;_线坐标表
  4.   (defun AT:PL_Plist (ename / en entl flag vlist pt Elev LI_item)
  5.     (defun LI_item (n alist)
  6.       (cdr (assoc n alist))
  7.     )
  8.     (setq
  9.       vlist '()
  10.       entl  (entget ename)
  11.       en    (LI_item 0 entl)
  12.     )
  13.     (cond
  14.       ((= en "LWPOLYLINE")
  15.        (setq
  16.    vlist '()
  17.    Elev  (LI_item 38 entl)
  18.        )
  19.        (foreach  pt entl
  20.    (if (= (car pt) 10)
  21.      (setq vlist (cons (list (cadr pt) (caddr pt) Elev) vlist))
  22.    )
  23.        )
  24.        (setq vlist (reverse vlist))
  25.       )
  26.       ((= en "POLYLINE")
  27.        (setq
  28.    ename (entnext ename)
  29.    entl  (entget ename)
  30.    en    (LI_item 0 entl)
  31.    vlist '()
  32.        )
  33.        (while (= en "VERTEX")
  34.    (setq flag (LI_item 70 entl))
  35.    (if (and
  36.          (zerop (logand flag 1))
  37.          (zerop (logand flag 2))
  38.          (zerop (logand flag 8))
  39.          (/= flag 128)
  40.        )
  41.      (setq
  42.        pt     (LI_item 10 entl)
  43.        vlist (cons pt vlist)
  44.      )
  45.    )
  46.    (setq
  47.      ename (entnext ename)
  48.      entl   (entget ename)
  49.      en   (LI_item 0 entl)
  50.    )
  51.        )
  52.        (setq vlist (reverse vlist))
  53.       )
  54.     )
  55.     vlist
  56.   )
  57. ;_绘制多边形
  58.   (defun AT:DrawPl (/ loop mod p1 pn pt vpoint)
  59.     (setq loop t)
  60.     (if  (setq p1 (getpoint "\n开始点<退出>:"))
  61.       (progn
  62.   (command "pline" p1)
  63.   (princ "\n指定下一步<退出>:")
  64.   (while loop
  65.     (setq vpoint (grread t 4 0))
  66.     (setq mod (car vpoint))
  67.     (setq pt (cadr vpoint))
  68.     (cond  ((= mod 3)
  69.      (command pt)
  70.      (setq pn pt)
  71.     )
  72.     ((= mod 5)
  73.      (redraw)
  74.      (grvecs (list 3 pt p1))
  75.      (and pn (grvecs (list 3 pn pt)))
  76.     )
  77.     (t (setq loop nil))
  78.     )
  79.   )
  80.   (command "c")
  81.   (redraw)
  82.       )
  83.     )
  84.     (entlast)
  85.   )
  86. ;_条件Entsel
  87.   (defun AT:Entsel (arg fun str / ename)
  88.     (while
  89.       (progn (setq ename (car (fun str)))
  90.        (cond
  91.          ((eq 'ENAME (type ename))
  92.     (if (and arg (not (arg ename)))
  93.       (princ "\n无效的对象选择.....")
  94.     )
  95.          )
  96.        )
  97.       )
  98.     )
  99.     ename
  100.   )

  101.   (initget "S D")
  102.   (setq slectmode (getkword "\n选择多边形(S)/绘制范围(D)<选择多边形>:"))
  103.   (if (= slectmode "D")
  104.     (progn
  105.       (setq oldentlast (entlast))
  106.       (setq ename (DrawPl))
  107.       (if (equal oldentlast ename)
  108.   (setq ename nil)
  109.       )
  110.     )
  111.     (progn
  112.       (setq ename
  113.        (AT:Entsel
  114.          (lambda (x)
  115.      (wcmatch (cdr (assoc 0 (entget x))) "*POLYLINE")
  116.          )
  117.          entsel
  118.          "\n选择多边形: "
  119.        )
  120.       )
  121.     )
  122.   )
  123.   (if ename
  124.     (progn
  125.       (setq plist (AT:PL_Plist ename))
  126.       (setq ss (ssget "cp" plist '((8 . "8320") (0 . "TEXT"))))
  127.       (if ss
  128.   (progn
  129.     (setq i -1)
  130.     (setq maxgc -99999999) ;_设定默认最大高程值
  131.     (setq mixgc 99999999) ;_设定默认最小高程值
  132.     (while (setq ename (ssname ss (setq i (1+ i))))
  133.       (setq gcz (atof (cdr (assoc 1 (entget ename)))))
  134.       (if  (= gcz maxgc)
  135.         (progn
  136.     (setq maxreturn (cons ename maxreturn))
  137.     (setq maxgc gcz)
  138.         )
  139.       )
  140.       (if  (> gcz maxgc)
  141.         (progn
  142.     (setq maxreturn (list ename))
  143.     (setq maxgc gcz)
  144.         )
  145.       )
  146.       (if  (= gcz mixgc)
  147.         (progn
  148.     (setq minreturn (cons ename minreturn))
  149.     (setq mixgc gcz)
  150.         )
  151.       )
  152.       (if  (< gcz mixgc)
  153.         (progn
  154.     (setq minreturn (list ename))
  155.     (setq mixgc gcz)
  156.         )
  157.       )
  158.     )
  159.     (command "chprop" ss "" "c" 7 "")

  160.     (foreach i maxreturn
  161.         (command "chprop" i "" "c" 1 "")
  162.       )
  163.     (foreach i minreturn
  164.         (command "chprop" i "" "c" 3 "")
  165.       )
  166.     (princ "\n多边形内-最大值高程值颜色红色,最小值颜色绿色")
  167.   )
  168.   (princ "\n多边形内没有高程点...")
  169.       )
  170.     )
  171.   )
  172.   (princ)
  173. )

回复

使用道具 举报

 楼主| 发表于 2011-9-22 06:19 | 显示全部楼层
多谢gufeng,能够显示最大和最小高程值,但是绘制多边形不可用,希望能修改下
回复

使用道具 举报

发表于 2011-9-22 19:40 | 显示全部楼层

  1. ;_把这句
  2. (setq ename (DrawPl))
  3. ;_修改成下面的就可以 ,忘记改了
  4. (setq ename (AT:DrawPl))

回复

使用道具 举报

 楼主| 发表于 2011-9-24 13:08 | 显示全部楼层
多谢,修改后可以绘多边形了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 02:55 , Processed in 0.278516 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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