关于面积的求接
一个图形中由若干线围成若干小的封闭区间,现想求出每个小区间的面积,请问有什么办法一次就可以得到吗,我见到了论坛里的帖子,那要求每个小区间都点一次啊 ;;;在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 "<" (rtos def 2) ">: ") <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>) 还是要一个一个的点啊,我想能不能全选,自动判断所有的封闭区间,并标注面积 你自己在上面的基础上改一下就行了,我有空时再帮你改。 我已改好了,楼主看看合不合适。若合适的话,你谢谢ZZXXQQ吧,关于面积这系统变量的问题是靠他帮我解决的。
和我想的还是不一样
我想是全选后把每个小闭合区间的面积分别标出来 如果各个闭合区间都是用PLINE画出的,可以用下面的过滤方式得到选择集:
(ssget "X" '((0 . "LWPOLYLINE") (70 . 1)))
然后再对选择集进行操作计算,只是计算的难点是您要写文字的点在哪儿。如果在闭合区间的中间,不太好计算。退一步,可以用封闭曲线的起点作为写文字的点。楼主可以自己根据上面的思路写个程序试一下。 这个难点就在所有的线只是line线,他们只有平面相交的关系,如何确定有多少个小的封闭面积我现在就解决不了 1.copy 换 图层
2.pedit->m 形成 pline 其实上面的例子都是用BOUNDARY生成一个闭合多边形后计算面积。
BOUNDARY生成多边形时,在线条多、顶点多的情况下,少量锐角会出现新生成的线与原来的线条不重合,有时还会不能正确生成多边形。
上面的问题实质是拓扑关系的构建。网上已经出现可以自己创建拓扑的程序了(我没有用过)。AutoCAD Map(或者LAND)都有构建拓扑的功能。
具体步骤如下:
进行图形图面清理。
建立拓扑结构。
读出每个质心(就是LABEL)的面积。
页:
[1]
2