检查等高线点线矛盾的思路
<p>图面上的等高线和高程点的高程值之间的矛盾问题,通过程序检查是可以的,我的具体的思路是以每个高程点从0度至360度,按每隔30度循环,长度为10倍等高距做(SSGET "F" (LIST POINT1 POINT2))的集合,如果选择集有两根等高线,就判断两根等高线高程是递减还是递增,递减则判断高程值减等高距的值是否为两根等高线之间的高程值,递增则判断高程点的值加等高距是否为两根等高线之间的高程值,如存在不符合条件则判断等高线与高程点点线不符。当然,遇到陡坎等其它情况时会有意外,但对于等高线密集的地形图此方法很有效,比人工判断的效率还是高很多的,具体的源码如下:</p><p><font face="Verdana">(defun check_GCD_DGX (point_pt denggaoju)<br/>;;;检查高程点与周围等高线的一致性<br/>;;;(check_GCD_DGX point_pt denggaoju)<br/>;;;(setq point_pt (getpoint) denggaoju 0.5)<br/> (setq ang_setp 0.0<br/> dgx_fxlist nil<br/> gcddgx_err T<br/> gcd_H (nth 2 point_pt))<br/> (setq ang_i 0)<br/> (repeat 12<br/> (setq point_pt1 (list (nth 0 point_pt) (nth 1 point_pt))<br/> point_pt2 (polar (list (nth 0 point_pt) (nth 1 point_pt))<br/> ang_setp<br/> (* 10.0 denggaoju)))<br/> (setq point_list (list point_pt1 point_pt2))<br/> (setq dgx_s (ssget "F"<br/> point_list<br/> (list (cons -4 "<AND")<br/> (cons 0 "*POLYLINE")<br/> (cons -4 "<OR")<br/> (cons 8 "DGX")<br/> (cons 8 "OLD_DGX")<br/> (cons -4 "OR>")<br/> (cons -4 "AND>"))))<br/> (if dgx_s<br/> (progn (setq dgx_i 0<br/> dgx0_list nil)<br/> (repeat (sslength dgx_s)<br/> (setq dgx_ename (ssname dgx_s dgx_i))<br/> (setq dgx_handent (cdr (assoc 5 (entget dgx_ename))))<br/> (setq dgx_object (vlax-ename->vla-object dgx_ename))<br/> (setq dgx_gcz (vla-get-Elevation dgx_object))<br/> (setq dgx0_list (append dgx0_list (list dgx_gcz)))<br/> (setq dgx_i (1+ dgx_i)))<br/> (if (/= dgx0_list nil)<br/> (progn (setq dgx_fxlist (append dgx_fxlist<br/> (list (list ang_i dgx0_list))))))))<br/> (setq ang_setp (+ ang_setp (/ pi 3.0)))<br/> (setq ang_i (1+ ang_i)))<br/> (setq check_i 0)<br/> (while (< check_i (length dgx_fxlist))<br/> (setq dgx0_list (nth check_i dgx_fxlist))<br/> (if (> (length (cadr dgx0_list)) 1)<br/> (progn (setq dgx_1 (nth 0 (cadr dgx0_list))<br/> dgx_2 (nth 1 (cadr dgx0_list)))<br/> (cond ((< dgx_1 dgx_2)<br/> (progn (if (or (< (+ gcd_H denggaoju) dgx_1)<br/> (> (+ gcd_H denggaoju) dgx_2))<br/> (setq gcddgx_err nil<br/> check_i (length dgx_fxlist)))))<br/> ((> dgx_1 dgx_2)<br/> (progn (if (or (> (- gcd_H denggaoju) dgx_1)<br/> (< (- gcd_H denggaoju) dgx_2))<br/> (setq gcddgx_err nil<br/> check_i (length dgx_fxlist)))))<br/> (t nil))))<br/> (setq check_i (1+ check_i)))<br/> gcddgx_err)</font></p> 如果电子地形图上的高程点没有高程属性,即只有X\Y值,没有Z值,也就是Z值是在图面上用文本表示的,那怎样将地形点提出X\Y\Z值呢?谢谢 <p>请问楼主</p>
<p>cass的程序文件是一个什么名称呢?查了很久都不知道。</p>
<p>我想利用他的程序编辑一些命令使用。</p>
<p>请发送到<a href="mailto:461045462@qq.com">461045462@qq.com</a></p>
<p>请指教。</p>
<p>谢谢</p>