找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1225|回复: 5

[求助] 求大神写个算面积能列式的插件小弟谢谢了

[复制链接]
发表于 2015-3-9 00:29:27 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 488个

财富等级: 日进斗金

发表于 2015-3-31 15:58:46 | 显示全部楼层

你这扇形公式对吗?

点评

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

使用道具 举报

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

使用道具 举报

已领礼包: 3031个

财富等级: 富可敌国

发表于 2015-3-9 21:20:59 | 显示全部楼层
本帖最后由 auva 于 2015-3-31 21:07 编辑
  1. (princ
  2.   "\n====================================================================="
  3. )
  4. (princ "\n命令:bmz")
  5. (princ "\n功能:標示分割區域面積計算公式及值")
  6. (princ
  7.   "\n功能:可標示:圓、弓形、扇形、三角形、矩形、平形四邊形及梯形等 7 種"
  8. )
  9. (princ
  10.   "\n               by Atsai 2013.05.31"
  11. )
  12. (princ
  13.   "\n====================================================================="
  14. )


  15. (defun c:bmz (/             os            dimzin th          no         lst        area_lst
  16.               en1    en2    en3           en4          pt         i        l      pt_lst
  17.               gx_lst gx            obj2
  18.              )
  19.   (vl-load-com)
  20.   (setq os (getvar "osmode"))
  21.   (setq dimzin (getvar "dimzin"))
  22.   (setvar "osmode" 0)
  23.   (setvar "dimzin" 0)
  24.   (setvar "cmdecho" 0)
  25.   (setq th (getreal "\n請輸入文字高度:<1.0>"))
  26.   (if (= th nil)
  27.     (setq th 1.0)
  28.   )
  29.   (setq no 1)
  30.   (setq lst '())
  31.   (setq area_lst '())
  32.   (while
  33.     (setq pt (getpoint "\n請選點:"))
  34.      (setq d1 3)
  35.      (setq d2 3)
  36.      (command "-boundary" pt "")
  37.      (setq en1 (entlast))
  38.      (pt&tudo en1)
  39.      (setq l (length pt_lst))
  40.      (if (= l 4.0)
  41.        (progn
  42.          (setq ang1 (angle (nth 0 pt_lst) (nth 1 pt_lst)))
  43.          (setq ang2 (angle (nth 1 pt_lst) (nth 2 pt_lst)))
  44.          (setq ang12 (- ang2 ang1))
  45.          (setq int13 (inters (nth 0 pt_lst)
  46.                              (nth 1 pt_lst)
  47.                              (nth 2 pt_lst)
  48.                              (nth 3 pt_lst)
  49.                              nil
  50.                      )
  51.          )
  52.          (setq int24 (inters (nth 1 pt_lst)
  53.                              (nth 2 pt_lst)
  54.                              (nth 3 pt_lst)
  55.                              (nth 0 pt_lst)
  56.                              nil
  57.                      )
  58.          )
  59.        )
  60.      )
  61.      (setq gx (apply 'max gx_lst))

  62.      (command "_region" en1 "")
  63.      (setq en2 (entlast))
  64.      (setq obj2 nil)
  65.      (setq obj2 (vlax-ename->vla-object en2))
  66.      (setq ptc (vlax-safearray->list
  67.                  (vlax-variant-value (vla-get-centroid obj2))
  68.                )
  69.      )                                        ;質心
  70.      (setq area (vla-get-Area obj2))        ;面積

  71.      (command "erase" en1 en2 "")
  72.      (command "text" "j" "mc" ptc th "0" no)
  73.      (setq en3 (entlast))
  74.      (command "circle" ptc th)
  75.      (setq en4 (entlast))
  76.      (setq lst-temp '())
  77.      (setq IA nil)
  78.      (setq xc nil)
  79.      (setq R nil)
  80.      (cond
  81.        ((and (= l 2.0) (= (nth 0 gx_lst) (nth 1 gx_lst)))
  82.         (setq IA (* (atan (abs gx)) 4))
  83.         (setq xc (* 0.5 (distance (nth 0 pt_lst) (nth 1 pt_lst))))
  84.         (setq R (/ xc (sin (/ IA 2))))
  85.         (setq
  86.           lst-temp (strcat "π*" (rtos R 2 d1) "^2=" (rtos area 2 d2))
  87.         )
  88.         (setq lst (append lst (list lst-temp)))
  89.         (setq area_lst (append area_lst (list area)))
  90.        )                                ;圓形

  91.        ((and (= l 2.0) (/= (nth 0 gx_lst) (nth 1 gx_lst)))
  92.         (setq IA (* (atan (abs gx)) 4))
  93.         (setq xc (* 0.5 (distance (nth 0 pt_lst) (nth 1 pt_lst))))
  94.         (setq R (/ xc (sin (/ IA 2))))
  95.         (setq lst-temp (strcat "1/2*"
  96.                                (rtos R 2 d1)
  97.                                "^2*("
  98.                                (rtos IA 2 d1)
  99.                                "-sin("
  100.                                (rtos IA 2 d1)
  101.                                "))="
  102.                                (rtos area 2 d2)
  103.                        )
  104.         )
  105.         (setq lst (append lst (list lst-temp)))
  106.         (setq area_lst (append area_lst (list area)))
  107.        )                                ;弓形

  108.        ((and (= l 3.0) (= gx 0.0))
  109.         (setq a (distance (nth 0 pt_lst) (nth 1 pt_lst)))
  110.         (setq b (distance (nth 1 pt_lst) (nth 2 pt_lst)))
  111.         (setq c (distance (nth 2 pt_lst) (nth 0 pt_lst)))
  112.         (setq s (* 0.5 (+ a b c)))
  113.         (setq lst-temp
  114.                (strcat "sqrt("
  115.                        (rtos s 2 d1)
  116.                        "*("
  117.                        (rtos s 2 d1)
  118.                        "-"
  119.                        (rtos a 2 d1)
  120.                        ")"
  121.                        "*("
  122.                        (rtos s 2 d1)
  123.                        "-"
  124.                        (rtos b 2 d1)
  125.                        ")"
  126.                        "*("
  127.                        (rtos s 2 d1)
  128.                        "-"
  129.                        (rtos c 2 d1)
  130.                        "))="
  131.                        (rtos area 2 d2)
  132.                )
  133.         )
  134.         (setq lst (append lst (list lst-temp)))
  135.         (setq area_lst (append area_lst (list area)))
  136.        )                                ;三角形
  137.        ((and (= l 3.0) (/= gx 0.0))
  138.         (setq IA (* (atan (abs gx)) 4))

  139.         ;这里出错了,第一、二点并不一定是弦长!
  140.         ;(setq xc (* 0.5 (distance (nth 0 pt_lst) (nth 1 pt_lst))))
  141.         ;(setq R (/ xc (sin (/ IA 2))))
  142.         ;这里出错了,第一、二点并不一定是弦长!

  143.         ;改成这样就好了!
  144.         (cond ((equal (distance (nth 0 pt_lst) (nth 1 pt_lst))
  145.                       (distance (nth 1 pt_lst) (nth 2 pt_lst))
  146.                       1e-6
  147.                )
  148.                (setq R (distance (nth 0 pt_lst) (nth 1 pt_lst)))
  149.               )
  150.               ((equal (distance (nth 1 pt_lst) (nth 2 pt_lst))
  151.                       (distance (nth 2 pt_lst) (nth 0 pt_lst))
  152.                       1e-6
  153.                )
  154.                (setq R (distance (nth 1 pt_lst) (nth 2 pt_lst)))
  155.               )
  156.               ((equal (distance (nth 2 pt_lst) (nth 0 pt_lst))
  157.                       (distance (nth 0 pt_lst) (nth 1 pt_lst))
  158.                       1e-6
  159.                )
  160.                (setq R (distance (nth 2 pt_lst) (nth 0 pt_lst)))
  161.               )
  162.         )
  163.         ;改成这样就好了!

  164.         (setq lst-temp (strcat "1/2*"
  165.                                (rtos R 2 d1)
  166.                                "^2*"
  167.                                (rtos IA 2 d1)
  168.                                "="
  169.                                (rtos area 2 d2)
  170.                        )
  171.         )
  172.         (setq lst (append lst (list lst-temp)))
  173.         (setq area_lst (append area_lst (list area)))
  174.        )                                ;扇形

  175.        ((and (= l 4.0)
  176.              (= int13 nil)
  177.              (= int24 nil)
  178.              (= (abs ang12) (* 0.5 pi))
  179.         )
  180.         (setq a (distance (nth 0 pt_lst) (nth 1 pt_lst)))
  181.         (setq b (distance (nth 1 pt_lst) (nth 2 pt_lst)))
  182.         (setq lst-temp (strcat (rtos a 2 d1)
  183.                                "*"
  184.                                (rtos b 2 d1)
  185.                                "="
  186.                                (rtos area 2 d2)
  187.                        )
  188.         )
  189.         (setq lst (append lst (list lst-temp)))
  190.         (setq area_lst (append area_lst (list area)))
  191.        )                                ;矩形

  192.        ((and (= l 4.0)
  193.              (= int13 nil)
  194.              (= int24 nil)
  195.              (/= (abs ang12) (* 0.5 pi))
  196.         )
  197.         (setq a (distance (nth 0 pt_lst) (nth 1 pt_lst)))
  198.         (setq a1 (- (cadr (nth 2 pt_lst)) (cadr (nth 3 pt_lst))))
  199.         (setq b1 (- (car (nth 3 pt_lst)) (car (nth 2 pt_lst))))
  200.         (setq c1 (- (* (cadr (nth 2 pt_lst))
  201.                        (- (car (nth 2 pt_lst)) (car (nth 3 pt_lst)))
  202.                     )
  203.                     (* (car (nth 2 pt_lst))
  204.                        (- (cadr (nth 2 pt_lst)) (cadr (nth 3 pt_lst)))
  205.                     )
  206.                  )
  207.         )
  208.         (setq l1 (sqrt (+ (* a1 a1) (* b1 b1))))
  209.         (setq
  210.           l2 (+        (* a1 (car (nth 0 pt_lst)))
  211.                 (* b1 (cadr (nth 0 pt_lst)))
  212.                 c1
  213.              )
  214.         )
  215.         (setq b (/ (abs l2) l1))
  216.         (setq lst-temp (strcat (rtos a 2 d1)
  217.                                "*"
  218.                                (rtos b 2 d1)
  219.                                "="
  220.                                (rtos area 2 d2)
  221.                        )
  222.         )
  223.         (setq lst (append lst (list lst-temp)))
  224.         (setq area_lst (append area_lst (list area)))
  225.        )                                ;平行四邊形

  226.        ((and (= l 4.0)
  227.              (= int13 nil)
  228.              (/= int24 nil)
  229.         )
  230.         (setq a (distance (nth 0 pt_lst) (nth 1 pt_lst)))
  231.         (setq b (distance (nth 2 pt_lst) (nth 3 pt_lst)))
  232.         (setq a1 (- (cadr (nth 2 pt_lst)) (cadr (nth 3 pt_lst))))
  233.         (setq b1 (- (car (nth 3 pt_lst)) (car (nth 2 pt_lst))))
  234.         (setq c1 (- (* (cadr (nth 2 pt_lst))
  235.                        (- (car (nth 2 pt_lst)) (car (nth 3 pt_lst)))
  236.                     )
  237.                     (* (car (nth 2 pt_lst))
  238.                        (- (cadr (nth 2 pt_lst)) (cadr (nth 3 pt_lst)))
  239.                     )
  240.                  )
  241.         )
  242.         (setq l1 (sqrt (+ (* a1 a1) (* b1 b1))))
  243.         (setq
  244.           l2 (+        (* a1 (car (nth 0 pt_lst)))
  245.                 (* b1 (cadr (nth 0 pt_lst)))
  246.                 c1
  247.              )
  248.         )
  249.         (setq c (/ (abs l2) l1))
  250.         (setq lst-temp (strcat "1/2*("
  251.                                (rtos a 2 d1)
  252.                                "+"
  253.                                (rtos b 2 d1)
  254.                                ")*"
  255.                                (rtos c 2 d1)
  256.                                "="
  257.                                (rtos area 2 d2)
  258.                        )
  259.         )
  260.         (setq lst (append lst (list lst-temp)))
  261.         (setq area_lst (append area_lst (list area)))
  262.        )                                ;梯形1

  263.        ((and (= l 4.0)
  264.              (/= int13 nil)
  265.              (= int24 nil)
  266.         )
  267.         (setq a (distance (nth 1 pt_lst) (nth 2 pt_lst)))
  268.         (setq b (distance (nth 3 pt_lst) (nth 0 pt_lst)))
  269.         (setq a1 (- (cadr (nth 3 pt_lst)) (cadr (nth 0 pt_lst))))
  270.         (setq b1 (- (car (nth 0 pt_lst)) (car (nth 3 pt_lst))))
  271.         (setq c1 (- (* (cadr (nth 3 pt_lst))
  272.                        (- (car (nth 3 pt_lst)) (car (nth 0 pt_lst)))
  273.                     )
  274.                     (* (car (nth 3 pt_lst))
  275.                        (- (cadr (nth 3 pt_lst)) (cadr (nth 0 pt_lst)))
  276.                     )
  277.                  )
  278.         )

  279.         (setq l1 (sqrt (+ (* a1 a1) (* b1 b1))))
  280.         (setq
  281.           l2 (+        (* a1 (car (nth 1 pt_lst)))
  282.                 (* b1 (cadr (nth 1 pt_lst)))
  283.                 c1
  284.              )
  285.         )
  286.         (setq c (/ (abs l2) l1))
  287.         (setq lst-temp (strcat "1/2*("
  288.                                (rtos a 2 d1)
  289.                                "+"
  290.                                (rtos b 2 d1)
  291.                                ")*"
  292.                                (rtos c 2 d1)
  293.                                "="
  294.                                (rtos area 2 d2)
  295.                        )
  296.         )
  297.         (setq lst (append lst (list lst-temp)))
  298.         (setq area_lst (append area_lst (list area)))
  299.        )                                ;梯形2

  300.        ((and (= l 4.0)
  301.              (/= int13 nil)
  302.              (/= int24 nil)
  303.         )
  304.         (princ "請重選")
  305.         (command "erase" en3 en4 "")
  306.         (setq no (- no 1))
  307.        )
  308.        ((and (> l 4.0)
  309.         )
  310.         (princ "請重選")
  311.         (command "erase" en3 en4 "")
  312.         (setq no (- no 1))
  313.        )
  314.      )
  315.      (setq no (1+ no))
  316.   )                                        ;end while

  317.   (setq pt1 (getpoint "\n請選擇面積列表插入點:"))
  318.   (setq i 0)
  319.   (setq sumarea 0.0)
  320.   (repeat (length lst)
  321.     (setq pt2 (polar pt1 (* 1.5 pi) (* (* 2.0 i) th)))
  322.     (command "text"
  323.              "j"
  324.              "bl"
  325.              pt2
  326.              th
  327.              "0"
  328.              (strcat "No" (rtos (1+ i) 2 0) ": " (nth i lst) "m2")
  329.     )
  330.     (setq sumarea (+ sumarea (nth i area_lst)))
  331.     (setq i (1+ i))
  332.   )
  333.   (setq pt2 (polar pt1 (* 1.5 pi) (* (* 2.0 i) th)))
  334.   (command "text"
  335.            "j"
  336.            "bl"
  337.            pt2
  338.            th
  339.            "0"
  340.            (strcat "Σ area=" (rtos sumarea 2 d2) "m2")
  341.   )

  342.   (setvar "dimzin" dimzin)
  343.   (setvar "osmode" os)
  344.   (princ)
  345. )

  346. ;;;==========副程式pt&tudo,start===============
  347. (defun pt&tudo (en / i nn pt)
  348.   (setq        endata (entget en)
  349.         pt_lst '()
  350.         gx_lst '()
  351.   )
  352.   (setq i 0)
  353.   (repeat (length endata)
  354.     (setq nn (nth i endata))
  355.     (cond ((= (car nn) 10)
  356.            (setq pt (cdr nn))
  357.            (setq pt_lst (append pt_lst (list pt)))
  358.           )
  359.           ((= (car nn) 42)
  360.            (setq gx (cdr nn))
  361.            (setq gx_lst (append gx_lst (list gx)))
  362.           )
  363.     )
  364.     (setq i (1+ i))
  365.   )

  366.   (setq i 0)
  367.   (setq l (length pt_lst))
  368.   (if (> l 3)
  369.     (progn
  370.       (repeat l
  371.         (cond ((< (+ i 2) l)
  372.                (setq x1 (car (nth i pt_lst)))
  373.                (setq y1 (cadr (nth i pt_lst)))
  374.                (setq x2 (car (nth (+ i 1) pt_lst)))
  375.                (setq y2 (cadr (nth (+ i 1) pt_lst)))
  376.                (setq x3 (car (nth (+ i 2) pt_lst)))
  377.                (setq y3 (cadr (nth (+ i 2) pt_lst)))
  378.                (setq
  379.                  xs
  380.                   (- (* (- y3 y1) (- x2 x1)) (* (- x3 x1) (- y2 y1)))
  381.                )
  382.                (if
  383.                  (< (abs xs) 1e-6)
  384.                   (progn
  385.                     (setq pt_lst (vl-remove (nth (+ i 1) pt_lst) pt_lst))
  386.                     (setq l (length pt_lst))
  387.                     (setq i (- i 1))
  388.                   )
  389.                )
  390.               )
  391.               ((= (+ i 2) l)
  392.                (setq x1 (car (nth i pt_lst)))
  393.                (setq y1 (cadr (nth i pt_lst)))
  394.                (setq x2 (car (nth (+ i 1) pt_lst)))
  395.                (setq y2 (cadr (nth (+ i 1) pt_lst)))
  396.                (setq x3 (car (nth 0 pt_lst)))
  397.                (setq y3 (cadr (nth 0 pt_lst)))
  398.                (setq
  399.                  xs
  400.                   (- (* (- y3 y1) (- x2 x1)) (* (- x3 x1) (- y2 y1)))
  401.                )
  402.                (if
  403.                  (< (abs xs) 1e-6)
  404.                   (progn
  405.                     (setq pt_lst (vl-remove (nth (+ i 1) pt_lst) pt_lst))
  406.                     (setq l (length pt_lst))
  407.                     (setq i (- i 1))
  408.                   )
  409.                )
  410.               )
  411.               ((= (+ i 1) l)
  412.                (setq x1 (car (nth i pt_lst)))
  413.                (setq y1 (cadr (nth i pt_lst)))
  414.                (setq x2 (car (nth 0 pt_lst)))
  415.                (setq y2 (cadr (nth 0 pt_lst)))
  416.                (setq x3 (car (nth 1 pt_lst)))
  417.                (setq y3 (cadr (nth 1 pt_lst)))
  418.                (setq
  419.                  xs
  420.                   (- (* (- y3 y1) (- x2 x1)) (* (- x3 x1) (- y2 y1)))
  421.                )
  422.                (if
  423.                  (< (abs xs) 1e-6)
  424.                   (progn
  425.                     (setq pt_lst (vl-remove (nth 0 pt_lst) pt_lst))
  426.                     (setq l (length pt_lst))
  427.                     (setq i (- i 1))
  428.                   )
  429.                )
  430.               )
  431.         )
  432.         (setq i (1+ i))
  433.       )
  434.     )
  435.   )
  436. )
  437. ;;;==========副程式pt&tudo,end===============

点评

aeo
你这扇形公式对吗?  详情 回复 发表于 2015-3-31 15:58
能把结果列式合并输出吗 大神谢谢了  详情 回复 发表于 2015-3-29 22:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-29 22:40:31 | 显示全部楼层

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

使用道具 举报

已领礼包: 3031个

财富等级: 富可敌国

发表于 2015-3-31 21:10:42 | 显示全部楼层
aeo 发表于 2015-3-31 15:58
你这扇形公式对吗?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:39 , Processed in 0.186404 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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