kezhouljc 发表于 2008-11-1 01:30:00

点选封闭边界线标注面积

本帖最后由 作者 于 2008-11-1 1:39:46 编辑 <br /><br /> <p>xyp1964版主的面积标注程序(<a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=26245">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=26245</a>)很好用,特别在地块面积标注时。但是当想标注包含许多闭合线的大闭合时,就必需复制到别的地方再用xyp1964版主的mjbz.vlx程序点选大闭合线域内才能标注,而且不能很好地判断标注面积是那个封闭域的,因此通过点选封闭边界线标注面积是有必要的,在2006高亮边界功能下可以很好的判断标注了哪块封闭的面积。现在提供一个点选封闭边界线标注面积的程序源码,供大家研究研究,有兴趣的朋友也来丰富一下这个程序。<br/><br/>但是程序把平方数及亩数一起标注了,但我认为加条件判断,标注时可以选择平方米,亩,公顷进行标注更加科学些,我修改如下,应是标注出来的面积,第一次错误,第二次才正确不知道是什么原因。</p><p><font color="#ff0000">源码</font></p><p>(defun c:mj( / vcoo vcmd vbm x loop ss fe el vc ent etype en in)<br/>&nbsp;&nbsp; (setq vcoo (getvar "coords"))<br/>&nbsp;&nbsp; (setq vcmd (getvar "cmdecho"))<br/>&nbsp;&nbsp; (setq vbm (getvar "blipmode"))<br/>&nbsp;&nbsp; (setvar "coords" 0)<br/>&nbsp;&nbsp; (setvar "cmdecho" 0)<br/>&nbsp;&nbsp; (setvar "blipmode" 0)<br/>&nbsp;&nbsp; (seterrhnd)<br/>&nbsp;&nbsp; (if (null textsize) (setq textsize 1.0))<br/>&nbsp;&nbsp; (setq x (getreal (strcat "文字高度 &lt;" (rtos textsize 2 4) "&gt;: ")))<br/>&nbsp;&nbsp; (if x (setq textsize x))<br/>&nbsp;&nbsp; (if (null dec) (setq dec 3))<br/>&nbsp;&nbsp; (setq x (getint (strcat "小数精确位数 &lt;" (rtos dec 2 0) "&gt;: ")))<br/>&nbsp;&nbsp; (if x (setq dec x))<br/>;;&nbsp;&nbsp; (command "style" "" "" "" "" "" "" "" "")<br/>&nbsp;;;; (command "-style" "standard4" "simhei.ttf" "" "" "" "" "")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; (graphscr)<br/>&nbsp;&nbsp; (setq loop t)<br/>&nbsp;&nbsp; (while loop<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ss (car (entsel "\n请选择闭合多线段或边界: ")))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (null ss) (setq ent nil loop nil) (setq ent (entget ss)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if loop<br/>&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp; (redraw ss 3)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq etype (cdr (assoc 0 ent)) el (list ss))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (cond ((= etype "CIRCLE") (setq loop1 nil fe nil))<br/>&nbsp;&nbsp;&nbsp; ((= etype "POLYLINE") (setq loop1 nil fe nil))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= etype "LWPOLYLINE") (setq loop1 nil fe nil))<br/>&nbsp;&nbsp;&nbsp; ((= etype "LINE") (setq loop1 t fe ent vc nil))<br/>&nbsp;&nbsp;&nbsp; (t (setq loop1 nil fe nil ent nil))<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; (while loop1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ss (car (entsel "\n请选择圆,多线段或其他封闭边界线: ")))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (null ss) (setq loop1 nil) (setq en (entget ss)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (and loop1 (= (cdr (assoc 0 en)) "LINE"))<br/>&nbsp;&nbsp;&nbsp; (if (setq in (ipo2l ent en))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;(setq vc (append vc (list in)))<br/>&nbsp;&nbsp;&nbsp;(setq el (append el (list ss)) ent en)<br/>&nbsp;&nbsp;&nbsp;(redraw ss 3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; (if fe<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (and (setq ent (ipo2l ent fe)) (not (equal ent in)))<br/>&nbsp;&nbsp;&nbsp; (setq vc (append vc (list ent)))<br/>&nbsp;&nbsp;&nbsp; (progn (mapcar '(lambda (x) (redraw x 4)) el) (setq ent nil))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (if ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;(bdist)<br/>&nbsp;&nbsp;(if (/= etype "LINE") (command "area" "e" ss)<br/>&nbsp;&nbsp;(mapcar '(lambda (x) (command x)) (append '("area") vc '(""))))<br/>&nbsp;&nbsp; (setq ar1 0.0)<br/>&nbsp;&nbsp; (arec)<br/>&nbsp;&nbsp; (setq in (getpoint "\nPosition: "))<br/>&nbsp;&nbsp; (mapcar '(lambda (x) (redraw x 4)) el)<br/>&nbsp;&nbsp; (if in<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;;;;(command "text" "ce" in textsize "0" (rtos (getvar "area") 2 dec))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (&gt;= ar1 0.001)&nbsp; ;start of if1<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ts1 (* textsize&nbsp; 1) len (/ ts1 1.5)<br/>&nbsp;&nbsp;&nbsp;&nbsp; po (list (car in) (- (cadr in) (+ len ts1)))<br/>&nbsp;&nbsp;&nbsp;&nbsp; ar1 (rtos ar1 2 dec)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "text" "ce" po ts1 "" ar1)<br/>&nbsp;&nbsp;&nbsp; ));end of if1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\nRequires circle or closed polygon.")<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (clrerrhnd)<br/>&nbsp;&nbsp; (setvar "coords" vcoo)<br/>&nbsp;&nbsp; (setvar "cmdecho" vcmd)<br/>&nbsp;&nbsp; (setvar "blipmode" vbm)<br/>&nbsp;&nbsp; (princ)<br/>)</p><p>(defun arec()<br/>&nbsp; (setq ar (getvar "area"))<br/>&nbsp; (setq ar (rtos (setq ar1 (/ ar (/ 2000.0 3.0))) 2 2))<br/>&nbsp; (setq ar (strcat "\nArec=" ar))<br/>&nbsp; (princ ar)<br/>)<br/></p><p></p><p><font color="#ff0000">加个判断</font></p><p><br/><font color="#ff0000">&nbsp;(setq BL-bz (getkword "\n请选择标注单位 A-平方米/B-亩/C-公顷.&lt;平方米&gt;:"))<br/>(setq aa (getvar "area"))<br/>(if ent<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;(bdist)<br/>&nbsp;&nbsp;(if (/= etype "LINE") (command "area" "e" ss)<br/>&nbsp;&nbsp;(mapcar '(lambda (x) (command x)) (append '("area") vc '(""))))<br/>&nbsp;&nbsp; (setq ar1 0.0)<br/>&nbsp;&nbsp; (arec)<br/>&nbsp;&nbsp; (setq in (getpoint "\nPosition: "))<br/>&nbsp;&nbsp; (mapcar '(lambda (x) (redraw x 4)) el)</font></p><p><br/><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if in<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp; (setq BL-bz (if BL-bz BL-bz "A"))</font></p><p><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;(if (= bl-bz "A")(setq aa (rtos (/ aa 1.0) 2 2)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;(if (= bl-bz "B")(setq aa (rtos (/ aa (/ 2000.0 3)) 2 2)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= bl-bz "C")(setq aa (rtos (/ aa 10000.0) 2 4)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "text" "ce" in textsize "0" aa)</font></p>

kezhouljc 发表于 2008-11-3 22:17:00

没有人告诉一下么?

sky1234567 发表于 2008-12-14 14:45:00

回复:(kezhouljc)点选封闭边界线标注面积

<p>出现“错误: no function definition: SETERRHND”是怎么回事,该怎么办呢?</p>

cnks 发表于 2008-12-15 11:39:00

sky1234567发表于2008-12-14 14:45:00static/image/common/back.gif出现“错误: no function definition: SETERRHND”是怎么回事,该怎么办呢?

<p>no function definition: SETERRHND</p><p>没有函数定义:SETERRHND</p>

xyp1964 发表于 2008-12-26 08:11:00

面积标注待修改

Xept 发表于 2010-4-10 13:39:00

function XML() {
   
}

xyp1964 发表于 2010-4-10 17:34:00

<p>面积标注-对话框:</p><p></p>

freeok 发表于 2012-12-8 08:51:57

少一个函数,用不了。。:)
页: [1]
查看完整版本: 点选封闭边界线标注面积