找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 600|回复: 1

[每日一码] 地块(多边形)分析统计

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2025-1-10 10:27:24 | 显示全部楼层 |阅读模式

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

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

×

https://www.cadtutor.net/forum/topic/76630-lisp-to-select-multiple-polygons-and-assign-area-text-to-them-already-have-lisp-that-do-it-for-one-polygon/#replyForm

Video_2025-01-10_102510.gif

  1. (defun c:xdtb_pl-analyze (/ #area #centroid #length #numverts #xd-var-global-text-height end-row height i lst minl mtxt n
  2.                pt pts ss start-row str tbl temp tlst tlst1 verts w x
  3.             )
  4.   (xd::doc:getdouble (xdrx-string-multilanguage "\n文字高度:" "\nText Height:") "#xd-var-global-text-height"
  5.                      (setq height (xd::doc:getpickboxheight))
  6.   )
  7.   (if (setq ss (xdrx-ssget (xdrx-string-multilanguage "\n选择封闭的多段线<退出>:"
  8.                                                       "\nSelect Closed Polyline<Exit>:"
  9.                            ) '((0 . "*POLYLINE") (-4 . "&=")
  10.                             (70 . 1)
  11.                            )
  12.                )
  13.       )
  14.     (progn
  15.       (xdrx-begin)
  16.       (setq lst (xdrx-entity-getproperty ss "boundingbox"))
  17.       (setq lst (mapcar
  18.                   '(lambda (x)
  19.                      (setq temp (car x))
  20.                      (min
  21.                        (distance (car temp) (cadr temp))
  22.                        (distance (cadr temp) (caddr temp))
  23.                      )
  24.                    )
  25.                   lst
  26.                 )
  27.       )
  28.       (setq minl (apply
  29.                    'min
  30.                    lst
  31.                  )
  32.       )
  33.       (xdrx-document-setprec (/ minl 2.0))
  34.       (setq lst (xd::pickset:tablesort ss 0 3 '< '>)
  35.             i 0
  36.             verts nil
  37.             tlst nil
  38.       )
  39.       (mapcar
  40.         '(lambda (x)
  41.            (xdrx-getpropertyvalue x "centroid" "area" "length" "numverts")
  42.            (setq verts (cons (list (setq i (1+ i))
  43.                                    #numverts
  44.                              ) verts
  45.                        )
  46.            )
  47.            (setq mtxt (xdrx-mtext-make #centroid (setq str (xdrx-string-formatex "%d\nL=%.1f\nS=%.2f" i
  48.                                                                                  #length #area
  49.                                                            )
  50.                                                  )
  51.                                        1.0 #xd-var-global-text-height
  52.                       )
  53.            )
  54.            (xdrx-setpropertyvalue mtxt "attachment" 5)
  55.            (setq pts (xdrx-getpropertyvalue x "vertices")
  56.                  pts (xd::pnts:open pts)
  57.                  #numverts (length pts))
  58.            (foreach n pts
  59.              (setq tlst (cons (list i #numverts (rtos #length 2 4) (rtos #area 2 4) (rtos (car n) 2 4)
  60.                                     (rtos (cadr n) 2 4) (rtos (caddr n) 2 4)

  61.                               ) tlst
  62.                         )
  63.              )
  64.            )
  65.          )
  66.         (xd::list:flat lst)
  67.       )
  68.       (setq tlst (reverse tlst))
  69.       (setq tlst (cons (list (xdrx-string-multilanguage "地块统计表" "Plot Statistics Table") nil nil nil nil
  70.                              nil nil
  71.                        ) (cons (list (xdrx-string-multilanguage "编号" "P&N")
  72.                                      (xdrx-string-multilanguage "顶点数" "N&V")
  73.                                      (xdrx-string-multilanguage "长度" "Length")
  74.                                      (xdrx-string-multilanguage "面积" "Area")
  75.                                      (xdrx-string-multilanguage "X坐标" "X coordinate")
  76.                                      (xdrx-string-multilanguage "Y坐标" "Y coordinate")
  77.                                      (xdrx-string-multilanguage "Z坐标" "Z coordinate")
  78.                                ) tlst
  79.                          )
  80.                  )
  81.       )
  82.       (if (setq pt (getpoint (xdrx-string-multilanguage "\n表格插入点<退出>:" "\nTable Insert Point<Exit>:")))
  83.         (progn
  84.           (setq w (* (xd::var:getratio) #xd-var-global-text-height))
  85.           (xd::table:makefromlist tlst pt w (/ w 2.0))
  86.           (setq tbl (entlast))
  87.           (setq verts (reverse verts)
  88.                 start-row 2
  89.           )
  90.           (foreach n verts
  91.             (setq end-row (1- (+ start-row (last n))))
  92.             (xdrx_table_MergeCells tbl start-row end-row 0 0)
  93.             (xdrx_table_MergeCells tbl start-row end-row 1 1)
  94.             (xdrx_table_MergeCells tbl start-row end-row 2 2)
  95.             (xdrx_table_MergeCells tbl start-row end-row 3 3)
  96.             (setq start-row (1+ end-row))
  97.           )
  98.         )
  99.       )
  100.       (xdrx-end)
  101.     )
  102.   )
  103.   (princ)
  104. )


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

已领礼包: 21个

财富等级: 恭喜发财

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

举报

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

本版积分规则

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

GMT+8, 2025-4-26 20:46 , Processed in 0.397010 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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