xiaomihu 发表于 2005-1-10 09:20:00

关于面积的求接

一个图形中由若干线围成若干小的封闭区间,现想求出每个小区间的面积,请问有什么办法一次就可以得到吗,我见到了论坛里的帖子,那要求每个小区间都点一次啊

xstlf 发表于 2005-1-10 09:24:00

;;;在ZZXXQQ的帮助下完成的。你自己试试,是不是合适你。


;;;选封闭图形内一点计算并标注<BR>(defun c:symj (/ are_cm are_pt are_a are_txt)<BR>       (setq are_cm (getvar "cmdecho")) <BR>       (setvar "cmdecho" 0)<BR>       (setq are_h (are_user 1 "" "\n设定字体高度:" are_h))<BR>       (command "_.undo" "be")<BR>       (while<BR>                       (setq are_pt (getpoint "\n请点取要标注的范围内一点:"))<BR>                       (command "-boundary" "A" "O" "P" "I" "Y" "B" "E" "" are_pt "")<BR>                       (command "area" "o" (entlast))<BR>                       (command "erase" (entlast) "")<BR>                       (setq are_a (getvar "area"))<BR>                       (setq are_txt (strcat (rtos (/ are_a 1000000) 2 2) "M"))<BR>                       (command "text" "j" "c" are_pt are_h "0" are_txt)<BR>                       (princ "\n该范围的面积为A=")<BR>                       (princ (rtos (/ are_a 1000000) 2 4))<BR>                       (princ "M(")<BR>                       (princ (rtos are_a 2 3))<BR>                       (princ "mm)。")<BR>                       )<BR>       (command "_.undo" "e")<BR>       (setvar "cmdecho" are_cm)<BR>       (princ)<BR>       )


(defun are_user (bit kwd msg def / inp) <BR>       (if def <BR>                       (setq msg (strcat "\n" msg "&lt;" (rtos def 2) "&gt;: ") <BR>                                       bit (* 2 (fix (/ bit 2)))) <BR>                       (setq msg (strcat "\n" msg ": "))) <BR>       (initget bit kwd) <BR>       (setq inp (getreal msg)) <BR>       (if inp inp def) <BR>)

xiaomihu 发表于 2005-1-10 14:45:00

还是要一个一个的点啊,我想能不能全选,自动判断所有的封闭区间,并标注面积

xstlf 发表于 2005-1-10 16:02:00

你自己在上面的基础上改一下就行了,我有空时再帮你改。

xstlf 发表于 2005-1-11 10:43:00

我已改好了,楼主看看合不合适。若合适的话,你谢谢ZZXXQQ吧,关于面积这系统变量的问题是靠他帮我解决的。

xiaomihu 发表于 2005-1-18 10:41:00

和我想的还是不一样


我想是全选后把每个小闭合区间的面积分别标出来

ZZXXQQ 发表于 2005-1-18 11:10:00

如果各个闭合区间都是用PLINE画出的,可以用下面的过滤方式得到选择集:


(ssget "X" '((0 . "LWPOLYLINE") (70 . 1)))


然后再对选择集进行操作计算,只是计算的难点是您要写文字的点在哪儿。如果在闭合区间的中间,不太好计算。退一步,可以用封闭曲线的起点作为写文字的点。楼主可以自己根据上面的思路写个程序试一下。

xiaomihu 发表于 2005-1-19 10:31:00

这个难点就在所有的线只是line线,他们只有平面相交的关系,如何确定有多少个小的封闭面积我现在就解决不了

f5612140 发表于 2005-1-19 11:41:00

1.copy 换 图层


2.pedit-&gt;m 形成 pline

lockmyeye 发表于 2005-1-19 11:55:00

其实上面的例子都是用BOUNDARY生成一个闭合多边形后计算面积。


BOUNDARY生成多边形时,在线条多、顶点多的情况下,少量锐角会出现新生成的线与原来的线条不重合,有时还会不能正确生成多边形。


上面的问题实质是拓扑关系的构建。网上已经出现可以自己创建拓扑的程序了(我没有用过)。AutoCAD Map(或者LAND)都有构建拓扑的功能。


具体步骤如下:


进行图形图面清理。


建立拓扑结构。


读出每个质心(就是LABEL)的面积。
页: [1] 2
查看完整版本: 关于面积的求接