如何统计矩形,并输出结果成表格?
统计所选范围内多个不同的矩形,并将统计的结果,按矩形的边长输出成表格?我自己有个思路是这样的,还望大神帮忙点拨,来点神来之笔。
1.先圈定选择集,滤去掉重叠的矩形。
2.通过VL函数得到所选范围内矩形的面积,和周长。并写入表中。
3 因为并不能直接从图元中得到矩形的边长,这里就要写个数据解析函数,由周长和面积求出边长,这是个二元一次方程,比较好解决。
把得到的边长结果写成表单2.
4.遍历 边长表单,除去相同的边长,并统计相同的数目。
5 对上面得到的结果排序,写成新表,再按表格输出结果。
1 第1和2,3步的程序我都在网上找好相对应的源代码了,就是 第4步和第5步的程序一直没找到相似的程序。有谁能推荐个学习下呀。
院长太坑了吧 ,不发源码还收费,g搞半天白下载了,
好意思? 又扣币不能下载? 本帖最后由 scream2658 于 2013-7-5 00:48 编辑
(defun qbc (pts / n bc_list b h pt1 pt2 pt3 pt4)
(setq n 0 bc_list nil)
(setq pt1 (nth n pts))
(setq pt2 (nth (+ 1 n) pts))
(setq pt3 (nth (+ 2 n) pts))
(setq pt4 (nth (+ 3 n) pts))
(setq b (distance pt1 pt4))
(setq h (distance pt1 pt2))
(setq bc_list (cons b h))
);结束子函数
(defun c:tg ()
(princ "请框选矩形:")
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(setq i 0 x 0 bclst nil pts nil bc_new nil)
(setq x (sslength ss))
(repeat x
(setq el (entget (ssname ss i)))
(foreach pt el
(if (= (car pt) 10)
(setq pts (append pts (list (cdr pt))))
);结束IF
);结束foreach遍历元素
(setq bc (qbc pts))
(setq bclst(cons bc bclst))
(setq pts nil)
(setq i (+ 1 i))
);结束repeat
(setq bc_new nil)
(setq m (car bclst))
(while m
(setq x1 (length bclst))
(setq bclst (vl-remove m bclst))
(setq m (car bclst))
(setq x2 (length bclst))
(setq bc_new (append (- x1 x2)(cons (list m)) bc_new))
)
(foreach y bc_new
(print (car y))
(print "=")
(print (last y))
(princ "\n")
)
(princ)
)
xyp1964 发表于 2014-8-15 09:45 static/image/common/back.gif
院长太强悍了 一切皆浮云啊 sky-x-x 发表于 2023-6-18 21:31
请问下如果矩形多段线未封闭,可以按矩形总长宽计算吗
先封闭再处理 1、先圈定选择集,滤去掉重叠的矩形。
2、遍历选择集,取出四点坐标,计算边长和面积并组成表单。
3、对边长排序。
4、统计相同边长的数目,写成新表。
5、按表格输出结果。
vl-remove 是删除所有相同的元素?还是一次只删除一个?
楼主用的是我的贴子吗,呵呵
看来是同行
合并数量可以到excel里进行合并 fan_zh 发表于 2013-7-10 14:17 static/image/common/back.gif
楼主用的是我的贴子吗,呵呵
看来是同行
合并数量可以到excel里进行合并
呵呵,你的什么帖子? 你也是做这个的? 最后有成功吗?我也需要这样的程序。
页:
[1]
2