明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2063|回复: 11

[已解答] 矩形面积及周长公式的输出

[复制链接]
发表于 2015-7-8 10:49 | 显示全部楼层 |阅读模式
三种输出形式(公式输出顺序按照矩形点选的顺序,格式同示例)
1、<1>输出面积公式(不选默认<1>)
2、<2>输出长度公式
3、<3>同时输出面积和长度公式
   图纸见附图

本帖子中包含更多资源

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

x
发表于 2015-7-8 11:11 | 显示全部楼层
为什么非要输出公式?相同尺寸需要合并?给领导看?
如果把长宽数据导出excel清单,不是更直接?
这种程序论坛很多了
 楼主| 发表于 2015-7-8 11:24 | 显示全部楼层
工程量标注在图上更直接,便于核对

发表于 2015-7-8 11:49 | 显示全部楼层
附件效果是不是你要的?差个周长,改下比较简单

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-7-8 12:12 | 显示全部楼层
不用表的形式,用连加可以吗
发表于 2015-7-8 13:35 | 显示全部楼层
但如果数据多,连加不是会长得很?
发表于 2015-7-8 15:37 | 显示全部楼层
本帖最后由 fan_zh 于 2015-7-8 16:36 编辑
  1. <blockquote>(defun c:tg ( / nr tot_area en1 i bclst pts el text1 text2 text3 m x1 bc_new x2 n a b c ii)
发表于 2015-7-8 15:40 | 显示全部楼层
目前只输出 面积公式,其余要求等有时间再完善吧
发表于 2015-7-8 16:36 | 显示全部楼层
  1. (defun c:tg ( / nr tot_area en1 i bclst pts el text1 text2 text3 m x1 bc_new x2 n a b c ii)
  2. (vl-load-com)
  3.   (princ "\n请框选矩形:")
  4.   (setq ss (ssget '((0 . "LWPOLYLINE") (90 . 4))))
  5.   (setq nr 0)
  6.   (setq tot_area 0)
  7.   (repeat (sslength ss)
  8.     (setq en1 (ssname ss nr))
  9.         (command "._area" "_O" en1)
  10.          (setq tot_area (+ tot_area (getvar "area")))
  11.           (setq nr (1+ nr))
  12.           )
  13.   (setq i 0 bclst nil pts nil)
  14.         (repeat (sslength ss)
  15.          (setq el (entget (ssname ss i)))
  16.          (setq pts nil)
  17.          (foreach pt el (if (= (car pt) 10) (setq pts (cons (cdr pt) pts))))
  18.              (setq bclst (cons (qab pts) bclst));;;;;qab 为考虑方向子程
  19.          (setq i (1+ i))
  20.          );repeat
  21. (setq bc_new nil)
  22. (while bclst
  23.   (setq m (car bclst)
  24.       x1 (length bclst))
  25.   (setq bclst (vl-remove m bclst))
  26.   (setq x2 (length bclst))
  27.   (setq n (- x1 x2))
  28.   (setq bc_new (cons (list m n) bc_new))
  29. )
  30. (setq ii 0 text1 nil text2 nil text3 nil)     
  31. (repeat (length bc_new)
  32.     (setq a (caar (nth ii bc_new)))
  33.         (setq b (cdar (nth ii bc_new)))
  34.     (setq c (cadr (nth ii bc_new)))
  35.         (setq text1 (strcat (rtos a 2 2) "*" (rtos b 2 2 ) "*" (rtos c 2 2)))
  36.         (if (< ii (- (length bc_new) 1))
  37.            (setq text1 (strcat text1 "+"))
  38.            )
  39.         (if (= ii 0)
  40.            (setq text2  text1)
  41.            (setq text2 (strcat text2 text1)))
  42.            (setq ii (1+ ii))
  43.         )
  44. (setq text2 (strcat text2 "=" (rtos tot_area 2 2)))
  45. ;(cond ((= method1 "1")
  46.      (setq p2 (getpoint "\起始位置"))
  47.      (setq p3 (polar p2 0 3000))
  48.      (command "_.TEXT" "c" p2 "500" "0" text2)
  49.          (princ))
  50.          (defun qab (pts / a b);求边长,考虑方向
  51. (if (equal (cadr (car pts)) (cadr (cadr pts)) 0.1)
  52.    (progn (setq a (distance (car pts) (cadr pts)))
  53.         (setq b (distance (cadr pts) (caddr pts))))
  54.    (progn (setq a (distance (cadr pts) (caddr pts)))
  55.         (setq b (distance (car pts) (cadr pts)))))
  56. (cons (atof(rtos a 2 1)) (atof (rtos b 2 1)))
  57. )
  58. (defun qbc (pts / b h);求边长,不考虑方向
  59. (setq b (distance (car pts) (cadddr pts)))
  60. (setq h (distance (car pts) (cadr pts)))
  61. (setq b (atof (rtos b 2 1)))
  62. (setq h (atof (rtos h 2 1)))
  63. (cons (max b h) (min b h))
  64. );结束qbc
发表于 2015-7-8 16:45 | 显示全部楼层
(defun c:tt ()
(setvar "CMDECHO" 0)
(if (setq ss (ssget '((0 . "LWPOLYLINE") (90 . 4)))) (progn
  (setq i -1 area nil len nil)
  (repeat (sslength ss)
   (setq ent (entget(setq en (ssname ss (setq i (1+ i))))))
   (setq lst (list))
   (foreach x ent (if (= (car x) 10) (setq lst (cons (cdr x) lst))))
    (setq en (vlax-ename->vla-object en))
    (entmakex (list (cons 0 "TEXT")         
                    (cons 10 (inters (car lst) (caddr lst) (cadr lst) (cadddr lst)))
                    (cons 1  (strcat "面积:"(rtos (vla-get-Area  en) 2 2)
                                     "----周长:"(rtos (vla-get-Length  en) 2 2)))
                    (cons 40 30))
                 )
    (setq area (cons (vla-get-Area  en) area)
          len  (cons (vla-get-Length  en) len))
  )
  (entmakex (list (cons 0 "TEXT")         
                    (cons 10 (getpoint "面积总和插入点"))
                    (cons 1  (setq aaa (apply 'strcat  (append (list "总面积:")(cdr (apply 'append (mapcar '(lambda (x)  (list "+" (rtos x 2 2) )) area )))
                                                               (list "=" (rtos (apply '+ area) 2 2))))))
                    (cons 40 30))
                 )
  (entmakex (list (cons 0 "TEXT")         
                    (cons 10 (getpoint "长度总和插入点"))
                    (cons 1  (setq aaa (apply 'strcat  (append (list "总长度:")(cdr (apply 'append (mapcar '(lambda (x)  (list "+" (rtos x 2 2) )) len )))
                                                               (list "=" (rtos (apply '+ len) 2 2))))))
                    (cons 40 30))
                 )
))
(setvar "CMDECHO" 1)
(princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 10:49 , Processed in 1.421620 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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