找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1159|回复: 11

[已解决] [已解决]批量矩形统计

[复制链接]

已领礼包: 41个

财富等级: 招财进宝

发表于 2017-6-16 22:05:46 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 pezyl 于 2017-6-17 17:01 编辑

批量统计矩形(任意角度)的长和宽,并把长宽数据导到excel表里,数值大的放在“长度”,数值小的放在“宽度”
这个帖子版主的代码 http://bbs.xdcad.net/thread-707851-3-2.html 基本一样,我把帖子里的"3dsolid"改成"lwpolyline"一切正都是需要的,只是统计成角度矩形的时候数据不对,特求助修改
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-16 23:00:15 | 显示全部楼层
本帖最后由 newer 于 2017-6-16 23:13 编辑

API都有现成的函数,判断是否矩形什么的,统计的程序就是个套路,往里面套就改统计其他的了。表格生成了,你用晓东工具箱的
表格 转 EXCEL 就行了。
http://bbs.xdcad.net/forum.php?mod=viewthread&tid=707894&highlight=%B1%ED%B8%F1

矩形统计.gif


  1. (defun c:tt ()
  2.   (defun _process (e)
  3.     (if (XD::Polyline:IsRectang e)
  4.       (progn
  5.         (setq pts (xdrx_getpropertyvalue e "vertices")
  6.               p1  (car pts)
  7.               p2  (cadr pts)
  8.               p3  (caddr pts)
  9.               l   (list (distance p1 p2) (distance p2 p3))
  10.               l   (vl-sort l '(lambda (x y) (> x y)))
  11.         )
  12.         (list (rtos (car l) 2 #xd_rectang_tol)
  13.               (rtos (cadr l) 2 #xd_rectang_tol)
  14.         )
  15.       )
  16.     )
  17.   )
  18.   (defun _keyword (key)
  19.     (cond
  20.       ((= key "D")
  21.        (if (setq val
  22.                   (getint
  23.                     (xdrx_prompt "\n保留小数位数<" #xd_rectang_tol ">:" t)
  24.                   )
  25.            )
  26.          (setq #xd_rectang_tol val)
  27.        )
  28.       )
  29.       ((= key "E")
  30.        (if (setq val (getreal
  31.                        (xdrx_prompt
  32.                          "\n表格字高<"
  33.                          #xd_rectang_txtheight
  34.                          ">:"
  35.                          t
  36.                        )
  37.                      )
  38.            )
  39.          (setq #xd_rectang_txtheight val)
  40.        )
  41.       )
  42.     )
  43.     (_prompt)
  44.   )
  45.   (defun _prompt ()
  46.     (xdrx_prompt
  47.       "\n当前设置: 字高("     #xd_rectang_txtheight
  48.       ") / 小数位数("         #xd_rectang_tol
  49.       ")"
  50.      )
  51.   )

  52.   (xdrx_begin)
  53.   (xdrx_sysvar_push '("dimzin" 8))
  54.   (if (not #xd_rectang_tol)
  55.     (setq #xd_rectang_tol 1)
  56.   )
  57.   (if (not #xd_rectang_txtheight)
  58.     (setq #xd_rectang_txtheight 3.5)
  59.   )
  60.   (_prompt)
  61.   (if (and (xdrx_initget "D E")
  62.            (xdrx_initssget
  63.              "\n选取要统计的矩形[字高(E)/小数位(D)]<退出>:"
  64.              "D E"
  65.              ""
  66.              "_keyword"
  67.            )
  68.            (setq ss (xdrx_ssget '((0 . "*POLYLINE") (-4 . "&=") (70 . 1))))
  69.       )
  70.     (progn
  71.       (setq data nil
  72.             i    0
  73.       )
  74.       (mapcar '(lambda (x)
  75.                  (if (setq lst (_process x))
  76.                    (setq
  77.                      lst  (cons (setq i (1+ i)) lst)
  78.                      data (cons lst data)
  79.                    )
  80.                  )
  81.                )
  82.               (xdrx_pickset->ents ss)
  83.       )
  84.       (setq
  85.         data (reverse data)
  86.         data (cons (list "" "长度" "高度") data)
  87.         data (cons (list "矩形统计表" nil nil) data)
  88.       )
  89.       (if (setq pt (getpoint "\n表格插入点<退出>:"))
  90.         (progn
  91.           (xd::text:init 2)
  92.           (setq scl  (* (xd::var:getratio) (XD::Var:GetScaleRatio))
  93.                 txth (* scl #xd_rectang_txtheight)
  94.           )
  95.           (setq tb (xd::table:makefromlist
  96.                      data
  97.                      pt
  98.                      txth
  99.                      (/ txth 3.0)
  100.                    )
  101.           )
  102.         )
  103.       )
  104.     )
  105.   )
  106.   (xdrx_sysvar_pop)
  107.   (xdrx_end)
  108.   (princ)
  109. )




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-17 08:37:07 | 显示全部楼层

忘了说明数量也要统计了,相同长宽的矩形数量汇总统计。空出时间了一定要好好学学编程,书到用时方恨少。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

发表于 2017-6-17 08:44:46 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-17 15:26:54 | 显示全部楼层

加入统计数量了,试下下面代码:

搜狗截图20170617152704.png

  1. (defun c:tt ()
  2.   (defun _process (e)
  3.     (if        (XD::Polyline:IsRectang e)
  4.       (progn
  5.         (setq pts (xdrx_getpropertyvalue e "vertices")
  6.               p1  (car pts)
  7.               p2  (cadr pts)
  8.               p3  (caddr pts)
  9.               l1  (distance p1 p2)
  10.               l2  (distance p2 p3)
  11.               l          (list l1 l2)
  12.               l          (vl-sort l '(lambda (x y) (> x y)))
  13.         )
  14.         (list (rtos (car l) 2 #xd_rectang_tol)
  15.               (rtos (cadr l) 2 #xd_rectang_tol)
  16.         )
  17.       )
  18.     )
  19.   )
  20.   (defun _keyword (key)
  21.     (cond
  22.       ((= key "D")
  23.        (if (setq val
  24.                   (getint
  25.                     (xdrx_prompt "\n保留小数位数<" #xd_rectang_tol ">:" t)
  26.                   )
  27.            )
  28.          (setq #xd_rectang_tol val)
  29.        )
  30.       )
  31.       ((= key "E")
  32.        (if (setq val (getreal
  33.                        (xdrx_prompt
  34.                          "\n表格字高<"
  35.                          #xd_rectang_txtheight
  36.                          ">:"
  37.                          t
  38.                        )
  39.                      )
  40.            )
  41.          (setq #xd_rectang_txtheight val)
  42.        )
  43.       )
  44.     )
  45.     (_prompt)
  46.   )
  47.   (defun _prompt ()
  48.     (xdrx_prompt
  49.       "\n当前设置: 字高("     #xd_rectang_txtheight
  50.       ") / 小数位数("              #xd_rectang_tol
  51.       ")"
  52.      )
  53.   )

  54.   (xdrx_begin)
  55.   (xdrx_sysvar_push '("dimzin" 0))
  56.   (if (not #xd_rectang_tol)
  57.     (setq #xd_rectang_tol 1)
  58.   )
  59.   (if (not #xd_rectang_txtheight)
  60.     (setq #xd_rectang_txtheight 3.5)
  61.   )
  62.   (_prompt)
  63.   (if (and (xdrx_initget "D E")
  64.            (xdrx_initssget
  65.              "\n选取要统计的矩形[字高(E)/小数位(D)]<退出>:"
  66.              "D E"
  67.              ""
  68.              "_keyword"
  69.            )
  70.            (setq ss (xdrx_ssget '((0 . "*POLYLINE") (-4 . "&=") (70 . 1))))
  71.       )
  72.     (progn
  73.       (setq data nil
  74.             i         0
  75.       )
  76.       (mapcar '(lambda (x)
  77.                  (if (setq lst (_process x))
  78.                    (setq
  79.                      lst  (cons (apply 'strcat lst) lst)
  80.                      data (cons lst data)
  81.                    )
  82.                  )
  83.                )
  84.               (xdrx_pickset->ents ss)
  85.       )
  86.       (setq
  87.         data (xd::list:groupbyindex data 0.1)
  88.         data (vl-sort data '(lambda (x y) (< (car x) (car y))))
  89.         i    0
  90.         data (mapcar '(lambda (x)
  91.                         (list (itoa (setq i (1+ i)))
  92.                               (caadr x)
  93.                               (cadadr x)
  94.                               (itoa (length (cdr x)))
  95.                         )
  96.                       )
  97.                      data
  98.              )
  99.         data (cons (list "" "长度" "高度" "数量") data)
  100.         data (cons (list "矩形统计表" nil nil nil) data)
  101.       )
  102.       (if (setq pt (getpoint "\n表格插入点<退出>:"))
  103.         (progn
  104.           (xd::text:init 2)
  105.           (setq        scl  (* (xd::var:getratio) (XD::Var:GetScaleRatio))
  106.                 txth (* scl #xd_rectang_txtheight)
  107.           )
  108.           (setq        tb (xd::table:makefromlist
  109.                      data
  110.                      pt
  111.                      txth
  112.                      (/ txth 3.0)
  113.                    )
  114.           )
  115.         )
  116.       )
  117.     )
  118.   )
  119.   (xdrx_sysvar_pop)
  120.   (xdrx_end)
  121.   (princ)
  122. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-17 16:56:51 | 显示全部楼层

谢谢,谢谢newer老师,完美解决了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2023-4-14 21:52:55 | 显示全部楼层
newer 发表于 2017-6-16 23:00
API都有现成的函数,判断是否矩形什么的,统计的程序就是个套路,往里面套就改统计其他的了。表格生成了, ...

你这个表格可以在数量后面加1列空白的表格吗,写上备注方便些
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2023-4-16 12:00:09 | 显示全部楼层
谢谢楼主分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 225个

财富等级: 日进斗金

发表于 2023-9-13 07:55:00 | 显示全部楼层
谢谢分享!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 391个

财富等级: 日进斗金

发表于 2023-9-13 08:50:11 | 显示全部楼层
看着不错,多谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 225个

财富等级: 日进斗金

发表于 2023-10-31 08:22:46 | 显示全部楼层
谢谢分享!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 225个

财富等级: 日进斗金

发表于 2023-12-1 08:37:17 | 显示全部楼层
谢谢分享!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 09:42 , Processed in 0.370089 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表