找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 901|回复: 5

[每日一码] 多段线自动标注所有边和所有内角的代码

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-5-7 10:25:53 | 显示全部楼层 |阅读模式

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

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

×
QQ截图20170507102228.png

  1. (defun c:dimpolygons (/         *error*   mr_IsPointInside    mid
  2.                       adoc      spc       sel       d         i
  3.                       lw        enx       pl        lwn       enxn
  4.                       plni      plno      plnom     plm       clr
  5.                       lastent  ss        en
  6.                      )

  7.   (vl-load-com)

  8.   (defun *error* (m)
  9.     (vla-endundomark adoc)
  10.     (if m
  11.       (prompt m)
  12.     )
  13.     (princ)
  14.   )
  15.   
  16.   (setq lastEnt (entlast))
  17.   
  18.   (setq clr (getvar "CLAYER"))
  19.   (command "-layer" "Make" "0-Dims" "color" "3" "" "")

  20.   (defun mr_IsPointInside (pt ptlst / trianglst ptinsidetriangle-p trl)

  21.     (defun trianglst (ptlst       /           unique
  22.                       LM:ListClockwise-p      clockwise-p l
  23.                       p1          p2          p3          trl
  24.                      )

  25.       (defun unique (l)
  26.         (if l
  27.           (cons (car l)
  28.                 (unique (vl-remove-if
  29.                           (function (lambda (x) (equal x (car l) 1e-6)))
  30.                           l
  31.                         )
  32.                 )
  33.           )
  34.         )
  35.       )

  36.       ;; List Clockwise-p - Lee Mac
  37.       ;; Returns T if the point list is clockwise oriented

  38.       (defun LM:ListClockwise-p (lst)
  39.         (minusp
  40.           (apply '+
  41.                  (mapcar
  42.                    (function
  43.                      (lambda (a b)
  44.                        (- (* (car b) (cadr a)) (* (car a) (cadr b)))
  45.                      )
  46.                    )
  47.                    lst
  48.                    (cons (last lst) lst)
  49.                  )
  50.           )
  51.         )
  52.       )

  53.       (defun clockwise-p (p1 p2 p3)
  54.         (< (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1)))
  55.            (* (- (cadr p2) (cadr p1)) (- (car p3) (car p1)))
  56.         )
  57.       )

  58.       (setq l ptlst)
  59.       (while (> (length ptlst) 3)
  60.         (setq p1 (car ptlst)
  61.               p2 (cadr ptlst)
  62.               p3 (caddr ptlst)
  63.         )
  64.         (cond
  65.           ((LM:ListClockwise-p ptlst)
  66.            (if
  67.              (and
  68.                (clockwise-p p1 p2 p3)
  69.                (= (length
  70.                     (unique
  71.                       (vl-remove
  72.                         nil
  73.                         (mapcar
  74.                           (function (lambda (a b) (inters p1 p2 a b)))
  75.                           l
  76.                           (cdr (reverse (cons (car l) (reverse l))))
  77.                         )
  78.                       )
  79.                     )
  80.                   )
  81.                   2
  82.                )
  83.                (= (length
  84.                     (unique
  85.                       (vl-remove
  86.                         nil
  87.                         (mapcar
  88.                           (function (lambda (a b) (inters p2 p3 a b)))
  89.                           l
  90.                           (cdr (reverse (cons (car l) (reverse l))))
  91.                         )
  92.                       )
  93.                     )
  94.                   )
  95.                   2
  96.                )
  97.                (= (length
  98.                     (unique
  99.                       (vl-remove
  100.                         nil
  101.                         (mapcar
  102.                           (function (lambda (a b) (inters p3 p1 a b)))
  103.                           l
  104.                           (cdr (reverse (cons (car l) (reverse l))))
  105.                         )
  106.                       )
  107.                     )
  108.                   )
  109.                   2
  110.                )
  111.              )
  112.               (progn
  113.                 (setq trl (cons (list p1 p2 p3) trl))
  114.                 (setq ptlst (vl-remove p2 ptlst))
  115.                 (setq ptlst
  116.                        (cdr (reverse (cons (car ptlst) (reverse ptlst)))
  117.                        )
  118.                 )
  119.               )
  120.               (setq ptlst
  121.                      (cdr (reverse (cons (car ptlst) (reverse ptlst))))
  122.               )
  123.            )
  124.           )
  125.           ((not (LM:ListClockwise-p ptlst))
  126.            (if
  127.              (and
  128.                (not (clockwise-p p1 p2 p3))
  129.                (= (length
  130.                     (unique
  131.                       (vl-remove
  132.                         nil
  133.                         (mapcar
  134.                           (function (lambda (a b) (inters p1 p2 a b)))
  135.                           l
  136.                           (cdr (reverse (cons (car l) (reverse l))))
  137.                         )
  138.                       )
  139.                     )
  140.                   )
  141.                   2
  142.                )
  143.                (= (length
  144.                     (unique
  145.                       (vl-remove
  146.                         nil
  147.                         (mapcar
  148.                           (function (lambda (a b) (inters p2 p3 a b)))
  149.                           l
  150.                           (cdr (reverse (cons (car l) (reverse l))))
  151.                         )
  152.                       )
  153.                     )
  154.                   )
  155.                   2
  156.                )
  157.                (= (length
  158.                     (unique
  159.                       (vl-remove
  160.                         nil
  161.                         (mapcar
  162.                           (function (lambda (a b) (inters p3 p1 a b)))
  163.                           l
  164.                           (cdr (reverse (cons (car l) (reverse l))))
  165.                         )
  166.                       )
  167.                     )
  168.                   )
  169.                   2
  170.                )
  171.              )
  172.               (progn
  173.                 (setq trl (cons (list p1 p2 p3) trl))
  174.                 (setq ptlst (vl-remove p2 ptlst))
  175.                 (setq ptlst
  176.                        (cdr (reverse (cons (car ptlst) (reverse ptlst)))
  177.                        )
  178.                 )
  179.               )
  180.               (setq ptlst
  181.                      (cdr (reverse (cons (car ptlst) (reverse ptlst))))
  182.               )
  183.            )
  184.           )
  185.         )
  186.       )
  187.       (setq
  188.         trl (cons (list (car ptlst) (cadr ptlst) (caddr ptlst)) trl)
  189.       )
  190.       trl
  191.     )

  192.     (defun ptinsidetriangle-p (pt p1 p2 p3)
  193.       (and
  194.         (not
  195.           (or
  196.             (inters pt p1 p2 p3)
  197.             (inters pt p2 p1 p3)
  198.             (inters pt p3 p1 p2)
  199.           )
  200.         )
  201.         (not
  202.           (or
  203.             (> (+ (distance pt p1) (distance pt p2))
  204.                (+ (distance p3 p1) (distance p3 p2))
  205.             )
  206.             (> (+ (distance pt p2) (distance pt p3))
  207.                (+ (distance p1 p2) (distance p1 p3))
  208.             )
  209.             (> (+ (distance pt p3) (distance pt p1))
  210.                (+ (distance p2 p3) (distance p2 p1))
  211.             )
  212.           )
  213.         )
  214.       )
  215.     )

  216.     (setq trl (trianglst ptlst))
  217.     (vl-some (function
  218.                (lambda (x)
  219.                  (ptinsidetriangle-p pt (car x) (cadr x) (caddr x))
  220.                )
  221.              )
  222.              trl
  223.     )
  224.   )

  225.   (defun mid (p1 p2)
  226.     (mapcar (function (lambda (a b) (/ (+ a b) 2.0))) p1 p2)
  227.   )

  228.   (vla-startundomark
  229.     (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  230.   )
  231.   (setq spc (vla-get-block (vla-get-activelayout adoc)))
  232.   (if (not (tblsearch "DIMSTYLE" "MVVA Standard Imperial"))
  233.     (Alert "MVVA Standard Imperial dimension style not loaded")
  234.     (Command "-dimstyle" "r" "MVVA Standard Imperial")
  235.   )
  236.   (prompt "\nSelect closed POLYGONS...")
  237.   (setq sel (ssget (list '(0 . "LWPOLYLINE") '(-4 . "&=")
  238.                          '(70 . 1)           '(-4 . "<not")
  239.                          '(-4 . "<>")        '(42 . 0.0)
  240.                          '(-4 . "not>")
  241.                         )
  242.             )
  243.   )
  244.   (initget 7)
  245.   (setq d (getdist
  246.             "\nPick or specify offset distance for dimensioning : "
  247.           )
  248.   )
  249.   (if sel
  250.     (progn
  251.       (repeat (setq i (sslength sel))
  252.         (setq lw (ssname sel (setq i (1- i))))
  253.         (setq enx (entget lw))
  254.         (setq
  255.           pl (mapcar
  256.                (function
  257.                  (lambda (x)
  258.                    (trans (list (car x) (cadr x) (cdr (assoc 38 enx)))
  259.                           lw
  260.                           1
  261.                    )
  262.                  )
  263.                )
  264.                (mapcar (function cdr)
  265.                        (vl-remove-if
  266.                          (function (lambda (x) (/= (car x) 10)))
  267.                          enx
  268.                        )
  269.                )
  270.              )
  271.         )
  272.         (vla-offset (vlax-ename->vla-object lw) d)
  273.         (setq lwn (entlast))
  274.         (setq enxn (entget lwn))
  275.         (setq plni
  276.                (mapcar
  277.                  (function
  278.                    (lambda (x)
  279.                      (trans (list (car x) (cadr x) (cdr (assoc 38 enxn)))
  280.                             lwn
  281.                             1
  282.                      )
  283.                    )
  284.                  )
  285.                  (mapcar (function cdr)
  286.                          (vl-remove-if
  287.                            (function (lambda (x) (/= (car x) 10)))
  288.                            enxn
  289.                          )
  290.                  )
  291.                )
  292.         )
  293.         (if (not (mr_IsPointInside (car plni) pl))
  294.           (progn
  295.             (entdel lwn)
  296.             (vla-offset (vlax-ename->vla-object lw) (- d))
  297.             (setq lwn (entlast))
  298.             (setq enxn (entget lwn))
  299.             (setq plni
  300.                    (mapcar
  301.                      (function
  302.                        (lambda (x)
  303.                          (trans
  304.                            (list (car x) (cadr x) (cdr (assoc 38 enxn)))
  305.                            lwn
  306.                            1
  307.                          )
  308.                        )
  309.                      )
  310.                      (mapcar (function cdr)
  311.                              (vl-remove-if
  312.                                (function (lambda (x) (/= (car x) 10)))
  313.                                enxn
  314.                              )
  315.                      )
  316.                    )
  317.             )
  318.           )
  319.         )
  320.         (entdel lwn)
  321.         (setq
  322.           plno (mapcar
  323.                  (function
  324.                    (lambda (a b)
  325.                      (mapcar (function +) a (mapcar (function -) a b))
  326.                    )
  327.                  )
  328.                  pl
  329.                  plni
  330.                )
  331.         )
  332.         (setq plnom
  333.                (mapcar (function (lambda (a b) (mid a b)))
  334.                        plno
  335.                        (cdr (reverse (cons (car plno) (reverse plno))))
  336.                )
  337.         )
  338.         (mapcar (function (lambda (a b c)
  339.                             (vla-addDimAligned
  340.                               spc
  341.                               (vlax-3d-point a)
  342.                               (vlax-3d-point b)
  343.                               (vlax-3d-point c)
  344.                             )
  345.                           )
  346.                 )
  347.                 pl
  348.                 (cdr (reverse (cons (car pl) (reverse pl))))
  349.                 plnom
  350.         )
  351.         (setq pl (reverse (cons (car pl) (reverse pl))))
  352.         (setq
  353.           plm (mapcar (function (lambda (a b) (mid a b))) pl (cdr pl))
  354.         )
  355.         (mapcar (function (lambda (a b c d)
  356.                             (vla-AddDim3PointAngular
  357.                               spc
  358.                               (vlax-3d-point a)
  359.                               (vlax-3d-point b)
  360.                               (vlax-3d-point c)
  361.                               (vlax-3d-point d)
  362.                             )
  363.                           )
  364.                 )
  365.                 (cdr pl)
  366.                 plm
  367.                 (cdr (reverse (cons (car plm) (reverse plm))))
  368.                 (cdr (reverse (cons (car plni) (reverse plni))))
  369.         )
  370.       )
  371.     )
  372.     (prompt
  373.       "\nEmpty sel. set... Retry routine with valid sel. set..."
  374.     )
  375.   )

  376.   
  377.   (setq ss (ssadd))
  378.   (if (setq en (entnext LastEnt))       ;Check if there's a new entity created since the last one
  379.     (while en                           ;Step through all new entities
  380.       (ssadd en ss)                     ;Add it to the selection set
  381.       (setq en (entnext en))            ;Get the next entity
  382.     )
  383.   )

  384.   (command "_.-dimstyle" "Apply" ss "")
  385.   
  386.   (*error* nil)
  387.   (setvar "CLAYER" clr)
  388. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 3186个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 769个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 5592个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 1827个

财富等级: 堆金积玉

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-14 17:59 , Processed in 0.331572 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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