明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2022|回复: 4

获取多个对象的累计长度之和

[复制链接]
发表于 2013-12-1 23:16:03 | 显示全部楼层 |阅读模式
命令bomlengths
获取多个对象的累计长度之和

  1. (defun dxf (n ed) (cdr (assoc n ed)))

  2. (defun bom-code (ssfilter        /       errexit undox   restore
  3.                  *error* olderr  oldcmdecho      %l      %t
  4.                  sset    %i      en      ed      p1      p2
  5.                  ot      a1      a2      r
  6.                 )
  7.   (defun errexit (s)
  8.     (princ)
  9.     (restore)
  10.   )

  11.   (defun undox ()
  12.     (command "._undo" "_E")
  13.     (setvar "cmdecho" oldcmdecho)
  14.     (setq *error* olderr)
  15.     (princ)
  16.   )

  17.   (setq olderr  *error*
  18.         restore undox
  19.         *error* errexit
  20.   )
  21.   (setq oldcmdecho (getvar "cmdecho"))
  22.   (setvar "cmdecho" 0)
  23.   (command "._UNDO" "_BE")
  24.   (setq %i 0
  25.         %t 0
  26.   )
  27.   (vl-load-com)
  28.   (setq sset (ssget ssfilter))
  29.   (if sset
  30.     (progn
  31.       (princ "\nLengths:")
  32.       (repeat (sslength sset)
  33.   (setq en (ssname sset %i))
  34.   (setq ed (entget en))
  35.   (setq ot (dxf 0 ed))
  36.   (setq curve (vlax-ename->vla-object en))
  37.   (if (vl-catch-all-error-p
  38.         (setq len  (vl-catch-all-apply
  39.         'vlax-curve-getDistAtParam
  40.         (list  curve
  41.         (vl-catch-all-apply
  42.           'vlax-curve-getEndParam
  43.           (list curve)
  44.         )
  45.         )
  46.       )
  47.         )
  48.       )
  49.     nil
  50.     len
  51.   )
  52.   (setq %l len)

  53.   (setq %i (1+ %i)
  54.         %t (+ %l %t)
  55.   )
  56.   (terpri)
  57.   ;(princ %l )
  58.   (princ (rtos %l (getvar "lunits")(getvar "luprec")))
  59.       )
  60.       (princ "\nTotal = ")
  61.       ;(princ %t)
  62.       (princ (rtos %t (getvar "lunits")(getvar "luprec")))
  63.       (textpage)
  64.     )
  65.   )
  66.   (setq sset nil)
  67.   (restore)
  68. )

  69. (defun bom-code-old (ssfilter        /       errexit undox   restore
  70.                  *error* olderr  oldcmdecho      %l      %t
  71.                  sset    %i      en      ed      p1      p2
  72.                  ot      a1      a2      r
  73.                 )
  74.   (defun errexit (s)
  75.     (princ)
  76.     (restore)
  77.   )

  78.   (defun undox ()
  79.     (command "._undo" "_E")
  80.     (setvar "cmdecho" oldcmdecho)
  81.     (setq *error* olderr)
  82.     (princ)
  83.   )

  84.   (setq olderr  *error*
  85.         restore undox
  86.         *error* errexit
  87.   )
  88.   (setq oldcmdecho (getvar "cmdecho"))
  89.   (setvar "cmdecho" 0)
  90.   (command "._UNDO" "_BE")
  91.   (setq %i 0
  92.         %t 0
  93.   )
  94.   (setq sset (ssget ssfilter))
  95.   (if sset
  96.     (progn
  97.       (princ "\nLengths:")
  98.       (repeat (sslength sset)
  99.         (setq en (ssname sset %i))
  100.         (setq ed (entget en))
  101.         (setq ot (dxf 0 ed))
  102.         (cond
  103.           ((= ot "LINE")
  104.            (setq p1 (dxf 10 ed)
  105.                  p2 (dxf 11 ed)
  106.                  %l (distance p1 p2)
  107.            )
  108.           )
  109.           ((= ot "ARC")
  110.            (setq a1 (dxf 50 ed)
  111.                  a2 (dxf 51 ed)
  112.                  r  (dxf 40 ed)
  113.                  %l (* r (abs (- a2 a1)))
  114.            )
  115.           )
  116.           (t
  117.            (command "._area" "_obj" en)
  118.            (setq %l (getvar "perimeter"))

  119.           )
  120.         )
  121.         (setq %i (1+ %i)
  122.               %t (+ %l %t)
  123.         )
  124.         (terpri)
  125.         (princ %l)
  126.       )
  127.       (princ "\nTotal = ")
  128.       (princ %t)
  129.       (textpage)
  130.     )
  131.   )
  132.   (setq sset nil)
  133.   (restore)
  134. )

  135. (defun c:bomlengths ()
  136.   (initget "Lines Arcs Polylines Splines ALL")
  137.   (setq ans (getkword
  138.               "Enter an option [Lines/Arcs/Polylines/Splines] : "
  139.             )
  140.   )
  141.   (cond
  142.     ((= ans "Lines") (c:bom_lines))
  143.     ((= ans "Arcs") (c:bom_arcs))
  144.     ((= ans "Polylines") (c:bom_polylines))
  145.     ((= ans "Splines") (c:bom_splines))
  146.     (t
  147.      (bom-code '((-4 . "<OR")
  148.                  (0 . "LINE")
  149.                  (0 . "ARC")
  150.                  (0 . "POLYLINE")
  151.                  (0 . "LWPOLYLINE")
  152.                  (0 . "SPLINE")
  153.                  (-4 . "OR>")
  154.                 )
  155.      )
  156.     )
  157.   )
  158.   (princ)
  159. )

  160. (defun c:bom_lines ()
  161.   (bom-code '((0 . "LINE")))
  162.   (princ)
  163. )

  164. (defun c:bom_arcs ()
  165.   (bom-code '((0 . "ARC")))
  166.   (princ)
  167. )

  168. (defun c:bom_polylines ()
  169.   (bom-code '((-4 . "<OR")
  170.               (0 . "POLYLINE")
  171.               (0 . "LWPOLYLINE")
  172.               (-4 . "OR>")
  173.              )
  174.   )
  175.   (princ)
  176. )

  177. (defun c:bom_splines ()
  178.   (bom-code '((0 . "SPLINE")))
  179.   (princ)
  180. )

发表于 2014-2-18 14:51:05 | 显示全部楼层
这么多子函数学习了!
发表于 2014-2-19 09:02:20 | 显示全部楼层
加载后,出现:未知命令“BOMLENGTHS”。按 F1 查看帮助。
发表于 2014-2-26 16:03:07 | 显示全部楼层
感谢 flyfox1047 分享!
发表于 2014-4-3 13:14:02 | 显示全部楼层
  感谢分享!    感谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:24 , Processed in 0.194383 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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