明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1636|回复: 9

[求助]请帮忙,怎么把得到的结果相加?

[复制链接]
发表于 2007-10-6 14:57:00 | 显示全部楼层 |阅读模式

(vl-load-com)
(princ "\n请选择物体:")
(setq ss (ssget))
(setq m 0 n (sslength ss))
(while (> m n)
  (setq en (ssname ss m) ent en)
(setq f (vlax-ename->vla-object ent))
(vla-get-Length f)
  (setq m (+ m 1)))
。。。。。。。

这是计算周长的,

如果有多个物体,怎么把每一次得到的结果加起来?DX帮忙啊

发表于 2007-10-6 15:16:00 | 显示全部楼层

用循环把选择集的每个实体的周长计算一遍,用累加得到周长的总和。

 楼主| 发表于 2007-10-7 02:20:00 | 显示全部楼层
现在己经可以循环计算每个物体的周长了,但怎么才能相加得总和?
发表于 2007-10-7 04:30:00 | 显示全部楼层

以多段线为例,选取图中多段线,取得总周长

(defun c:zc (/ ss zl f)
  (vl-load-com)
  (princ "\n请选择物体:")
  (setq ss (ssget))
  (setq zl 0);实体的总周长
  (while (setq en  (ssname ss 0))
    (setq f (vla-get-Length(vlax-ename->vla-object en)));单个实体周长
    (setq ss (ssdel en ss))
    (setq zl(+ zl f))
  )
  (alert (strcat "所选实体的总周长为:" (rtos zl 2 3) "m!"))
  (print)
)

本帖子中包含更多资源

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

x
 楼主| 发表于 2007-10-7 13:36:00 | 显示全部楼层

多谢,我的那个循环条件搞錯了。

发表于 2007-10-8 17:58:00 | 显示全部楼层

(vl-load-com)
(defun C:TT (/ SS ZL I L)
    (princ "\n请选择对象...")
    (if    (setq SS (ssget '((0 . "*LINE"))))
    (progn
        ;;实体的总周长
        (setq ZL 0
          I  0
        )
        (repeat (sslength SS)
        ;;单个实体周长
        (setq L    (vla-get-length
                (vlax-ename->vla-object (ssname SS I))
            )
        )
        (setq ZL (+ ZL L)
              I     (1+ I)
        )
        )
        (alert
        (princ (strcat "所选实体的总长度为:" (rtos ZL 2 3))
        )
        )
    )
    )
    (print)
)
 楼主| 发表于 2007-10-10 20:57:00 | 显示全部楼层
xgr发表于2007-10-7 4:30:00以多段线为例,选取图中多段线,取得总周长(defun c:zc (/ ss zl f)  (vl-load-com)  (princ \"\n请选择物体:\")  (setq ss (ssget))  (setq zl 0);实体的总周长  (w

如果图档中有圆和多段线,要一次性选择,怎么计算圆的周长?有没有办法选一次,得出二个选集?圆的选集单独计算,另一个就用现在这个代码就可以了,不知能不能搞定?

发表于 2007-10-10 22:13:00 | 显示全部楼层

;;;自动全图选择多段线、直线、园的总长度统计!

(defun c:zc (/ ss en ddx_zl zx_zl yuan_zl f1 f2 f3)
  (vl-load-com)
  (princ "\n自动全图选择多段线、直线、园的总长度统计!:")
  (setq ss (ssget "x"
    '((-4 . "<OR")
      (-4 . "<AND")
      (0 . "LWPOLYLINE")
      (-4 . "AND>")
      (-4 . "<AND")
      (0 . "POLYLINE")
      (-4 . "AND>")
      (-4 . "<AND")
      (0 . "CIRCLE")
      (-4 . "AND>")
      (-4 . "<AND")
      (0 . "LINE")
      (-4 . "AND>")
      (-4 . "OR>")
     )
    )
  )
  (setq ddx_zl 0)   ;多段线的总长
  (setq zx_zl 0)   ;直线的总长
  (setq yuan_zl 0)   ;圆的总周长
  (while (setq en (ssname ss 0))
    (setq st_style (cdr (assoc 0 (entget en))))
    (cond ((or
      (= st_style "LWPOLYLINE")
      (= st_style "POLYLINE")
    )
    (setq f1 (vla-get-Length (vlax-ename->vla-object en)))
    (setq ddx_zl (+ ddx_zl f1))
   )
   ((= st_style "LINE")
    (setq f2 (vla-get-Length (vlax-ename->vla-object en)))
    (setq zx_zl (+ zx_zl f2))
   )
   ((= st_style "CIRCLE")
    (setq f3 (* (cdr (assoc 40 (entget en))) 2 pi))
    (setq yuan_zl (+ yuan_zl f3))
   )
    )
    (setq ss (ssdel en ss))
  )
  (alert (strcat "图中实体统计:"
   "\n多段线总长"
   (rtos ddx_zl 2 3)
   "\n直线总长:"
   (rtos zx_zl 2 3)
   "\n圆总周长:"
   (rtos yuan_zl 2 3)
  )
  )
  (princ)
)

本帖子中包含更多资源

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

x
发表于 2007-10-11 10:20:00 | 显示全部楼层
6楼代码改进后:通吃的
  1. [lisp]
  2. ;;;功能:练习 获取对象长度信息
  3. (vl-load-com)
  4. (defun C:TT (/ SS SUM I OBJ TMP LEN)
  5. &#160;&#160;&#160; (princ "\n请选择对象...")
  6. &#160;&#160;&#160; (if (setq SS (ssget))
  7. &#160;(progn
  8. &#160;&#160;&#160;&#160; ;;初始化
  9. &#160;&#160;&#160;&#160; (setq SUM 0
  10. &#160;&#160; I 0
  11. &#160;&#160;&#160;&#160; )
  12. &#160;&#160;&#160;&#160; ;;逐个对象进行量取
  13. &#160;&#160;&#160;&#160; (repeat (sslength SS)
  14. &#160;(setq OBJ (vlax-ename->vla-object (ssname SS I)))
  15. &#160;(if (setq TMP (vlax-curve-getendparam OBJ))
  16. &#160;&#160;&#160;&#160; (setq LEN (vlax-curve-getdistatparam OBJ TMP)
  17. &#160;&#160; SUM (+ SUM LEN)
  18. &#160;&#160;&#160;&#160; )
  19. &#160;&#160;&#160;&#160; (princ (strcat "\n第" (itoa (1+ I)) "个对象被舍弃。")
  20. &#160;&#160;&#160;&#160; )
  21. &#160;)
  22. &#160;(setq I (1+ I))
  23. &#160;&#160;&#160;&#160; )
  24. &#160;&#160;&#160;&#160; ;;显示结果
  25. &#160;&#160;&#160;&#160; (if (= SUM 0)
  26. &#160;(princ "\n没有量取到长度。")
  27. &#160;(alert
  28. &#160;&#160;&#160;&#160; (princ (strcat "所选实体的总长度为:" (rtos SUM 2 3))
  29. &#160;&#160;&#160;&#160; )
  30. &#160;)
  31. &#160;&#160;&#160;&#160; )
  32. &#160;)
  33. &#160;&#160;&#160; )
  34. &#160;&#160;&#160; (princ)
  35. )
  36. &#160;;|;;
  37. 后记:上面代码的精髓在于:
  38. &#160;&#160;&#160;&#160; (setq LEN (vlax-curve-getdistatparam OBJ (vlax-curve-getendparam OBJ)))
  39. &#160;&#160;&#160;&#160; 请与下句对比便知:
  40. &#160;&#160;&#160;&#160; (setq LEN vla-get-Length OBJ)
  41. ;;|;
  42. [/lisp]
  43. [[i] 本帖最后由 zml84 于 2007-10-9 09:48 编辑 [/i]]
发表于 2007-10-11 12:34:00 | 显示全部楼层

结果放于表

apply '+ lst

起总和

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

本版积分规则

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

GMT+8, 2025-6-20 04:04 , Processed in 0.155464 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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