[已解决]批量矩形统计
本帖最后由 pezyl 于 2017-6-17 17:01 编辑批量统计矩形(任意角度)的长和宽,并把长宽数据导到excel表里,数值大的放在“长度”,数值小的放在“宽度”
这个帖子版主的代码 http://bbs.xdcad.net/thread-707851-3-2.html 基本一样,我把帖子里的"3dsolid"改成"lwpolyline"一切正都是需要的,只是统计成角度矩形的时候数据不对,特求助修改 本帖最后由 newer 于 2017-6-16 23:13 编辑
API都有现成的函数,判断是否矩形什么的,统计的程序就是个套路,往里面套就改统计其他的了。表格生成了,你用晓东工具箱的
表格 转 EXCEL 就行了。
http://bbs.xdcad.net/forum.php?mod=viewthread&tid=707894&highlight=%B1%ED%B8%F1
(defun c:tt ()
(defun _process (e)
(if (XD::Polyline:IsRectang e)
(progn
(setq pts (xdrx_getpropertyvalue e "vertices")
p1(car pts)
p2(cadr pts)
p3(caddr pts)
l (list (distance p1 p2) (distance p2 p3))
l (vl-sort l '(lambda (x y) (> x y)))
)
(list (rtos (car l) 2 #xd_rectang_tol)
(rtos (cadr l) 2 #xd_rectang_tol)
)
)
)
)
(defun _keyword (key)
(cond
((= key "D")
(if (setq val
(getint
(xdrx_prompt "\n保留小数位数<" #xd_rectang_tol ">:" t)
)
)
(setq #xd_rectang_tol val)
)
)
((= key "E")
(if (setq val (getreal
(xdrx_prompt
"\n表格字高<"
#xd_rectang_txtheight
">:"
t
)
)
)
(setq #xd_rectang_txtheight val)
)
)
)
(_prompt)
)
(defun _prompt ()
(xdrx_prompt
"\n当前设置: 字高(" #xd_rectang_txtheight
") / 小数位数(" #xd_rectang_tol
")"
)
)
(xdrx_begin)
(xdrx_sysvar_push '("dimzin" 8))
(if (not #xd_rectang_tol)
(setq #xd_rectang_tol 1)
)
(if (not #xd_rectang_txtheight)
(setq #xd_rectang_txtheight 3.5)
)
(_prompt)
(if (and (xdrx_initget "D E")
(xdrx_initssget
"\n选取要统计的矩形[字高(E)/小数位(D)]<退出>:"
"D E"
""
"_keyword"
)
(setq ss (xdrx_ssget '((0 . "*POLYLINE") (-4 . "&=") (70 . 1))))
)
(progn
(setq data nil
i 0
)
(mapcar '(lambda (x)
(if (setq lst (_process x))
(setq
lst(cons (setq i (1+ i)) lst)
data (cons lst data)
)
)
)
(xdrx_pickset->ents ss)
)
(setq
data (reverse data)
data (cons (list "" "长度" "高度") data)
data (cons (list "矩形统计表" nil nil) data)
)
(if (setq pt (getpoint "\n表格插入点<退出>:"))
(progn
(xd::text:init 2)
(setq scl(* (xd::var:getratio) (XD::Var:GetScaleRatio))
txth (* scl #xd_rectang_txtheight)
)
(setq tb (xd::table:makefromlist
data
pt
txth
(/ txth 3.0)
)
)
)
)
)
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)
newer 发表于 2017-6-16 23:00
忘了说明数量也要统计了,相同长宽的矩形数量汇总统计。空出时间了一定要好好学学编程,书到用时方恨少。
{:1_1:}{:1_1:}{:1_1:}{:1_1:} pezyl 发表于 2017-6-17 08:37
加入统计数量了,试下下面代码:
(defun c:tt ()
(defun _process (e)
(if (XD::Polyline:IsRectang e)
(progn
(setq pts (xdrx_getpropertyvalue e "vertices")
p1(car pts)
p2(cadr pts)
p3(caddr pts)
l1(distance p1 p2)
l2(distance p2 p3)
l (list l1 l2)
l (vl-sort l '(lambda (x y) (> x y)))
)
(list (rtos (car l) 2 #xd_rectang_tol)
(rtos (cadr l) 2 #xd_rectang_tol)
)
)
)
)
(defun _keyword (key)
(cond
((= key "D")
(if (setq val
(getint
(xdrx_prompt "\n保留小数位数<" #xd_rectang_tol ">:" t)
)
)
(setq #xd_rectang_tol val)
)
)
((= key "E")
(if (setq val (getreal
(xdrx_prompt
"\n表格字高<"
#xd_rectang_txtheight
">:"
t
)
)
)
(setq #xd_rectang_txtheight val)
)
)
)
(_prompt)
)
(defun _prompt ()
(xdrx_prompt
"\n当前设置: 字高(" #xd_rectang_txtheight
") / 小数位数(" #xd_rectang_tol
")"
)
)
(xdrx_begin)
(xdrx_sysvar_push '("dimzin" 0))
(if (not #xd_rectang_tol)
(setq #xd_rectang_tol 1)
)
(if (not #xd_rectang_txtheight)
(setq #xd_rectang_txtheight 3.5)
)
(_prompt)
(if (and (xdrx_initget "D E")
(xdrx_initssget
"\n选取要统计的矩形[字高(E)/小数位(D)]<退出>:"
"D E"
""
"_keyword"
)
(setq ss (xdrx_ssget '((0 . "*POLYLINE") (-4 . "&=") (70 . 1))))
)
(progn
(setq data nil
i 0
)
(mapcar '(lambda (x)
(if (setq lst (_process x))
(setq
lst(cons (apply 'strcat lst) lst)
data (cons lst data)
)
)
)
(xdrx_pickset->ents ss)
)
(setq
data (xd::list:groupbyindex data 0.1)
data (vl-sort data '(lambda (x y) (< (car x) (car y))))
i 0
data (mapcar '(lambda (x)
(list (itoa (setq i (1+ i)))
(caadr x)
(cadadr x)
(itoa (length (cdr x)))
)
)
data
)
data (cons (list "" "长度" "高度" "数量") data)
data (cons (list "矩形统计表" nil nil nil) data)
)
(if (setq pt (getpoint "\n表格插入点<退出>:"))
(progn
(xd::text:init 2)
(setq scl(* (xd::var:getratio) (XD::Var:GetScaleRatio))
txth (* scl #xd_rectang_txtheight)
)
(setq tb (xd::table:makefromlist
data
pt
txth
(/ txth 3.0)
)
)
)
)
)
)
(xdrx_sysvar_pop)
(xdrx_end)
(princ)
)
newer 发表于 2017-6-17 15:26
谢谢,谢谢newer老师,完美解决了。
newer 发表于 2017-6-16 23:00
API都有现成的函数,判断是否矩形什么的,统计的程序就是个套路,往里面套就改统计其他的了。表格生成了, ...
你这个表格可以在数量后面加1列空白的表格吗,写上备注方便些 谢谢楼主分享{:1_1:} 谢谢分享!!!!!! 看着不错,多谢分享 谢谢分享!!!! 谢谢分享!!!!! 学习一下。 版主666,{:1_23:}{:1_23:}{:1_23:}
页:
[1]