文件已成功删除: D:\wwwroot\forum\host.txt 晓东CAD家园-论坛-A/VLISP-[分享]:各类长度查询-;直线长度(defun c:lc (/ line_ss line_chd line n) (princ "\n测量直线长度;\n请选择直线:") (setq line_ss (ssget (list (cons 0 '"LINE")))) (setq line_chd 0) ... - Powered by Discuz!

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 549|回复: 1

[分享]:各类长度查询

[复制链接]
发表于 2006-2-22 11:28:54 | 显示全部楼层 |阅读模式

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

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

×
;直线长度
(defun c:lc (/ line_ss line_chd line n)
  (princ "\n测量直线长度;\n请选择直线:")
  (setq line_ss (ssget (list (cons 0 '"LINE"))))
  (setq line_chd 0)
  (setq n 0)
  (while (< n (sslength line_ss))
    (setq line (ssname line_ss n))
    (line_chd_zx line)
    (setq line_chd (+ line_chd line_chd_jg))
    (setq n (1+ n))
  )
  (princ "\n线段数量")
  (princ n)
  (princ ";总长")
  (princ line_chd)
  (princ)
)
;;;;;直线长度执行
(defun line_chd_zx (line / ptst pten)
  (setq ptst (cdr (assoc '10 (entget line))))
  (setq pten (cdr (assoc '11 (entget line))))
  (setq line_chd_jg (distance ptst pten))
)
;;;;;弧线长度
(defun c:hc (/ arc_ss arc_chd arc n)
  (princ "\n测量弧线长度;\n请选择弧线:")
  (setq arc_ss (ssget (list (cons 0 '"ARC"))))
  (setq arc_chd 0)
  (setq n 0)
  (while (< n (sslength arc_ss))
    (setq arc (ssname arc_ss n))
    (arc_chd_zx arc)
    (setq arc_chd (+ arc_chd arc_chd_jg))
    (setq n (1+ n))
  )
  (princ "\n弧线数量")
  (princ n)
  (princ ";总长")
  (princ arc_chd)
  (princ)
)
;;;;;弧线长度执行
(defun arc_chd_zx (arc / r ast aen)
  (setq r (cdr (assoc '40 (entget arc))))
  (setq ast (cdr (assoc '50 (entget arc))))
  (setq aen (cdr (assoc '51 (entget arc))))
  (setq arc_chd_jg (* r (- aen ast)))
)
;;;;;圆长度
(defun c:yc (/ arc_ss arc_chd circle n)
  (princ "\n测量圆长度;\n请选择圆:")
  (setq circle_ss (ssget (list (cons 0 '"CIRCLE"))))
  (setq circle_chd 0)
  (setq n 0)
  (while (< n (sslength circle_ss))
    (setq circle (ssname circle_ss n))
    (circle_chd_zx circle)
    (setq circle_chd (+ circle_chd circle_chd_jg))
    (setq n (1+ n))
  )
  (princ "\n圆数量")
  (princ n)
  (princ ";总长")
  (princ circle_chd)
  (princ)
)
;;;;;圆长度执行
(defun circle_chd_zx (circle / r)
  (setq r (cdr (assoc '40 (entget circle))))
  (setq circle_chd_jg (* 2 r pi))
)
;;;;;多段线长度
(defun c:plc (/ arc_ss arc_chd pline n)
  (princ "\n测量多段线长度;\n请选择多段线:")
  (setq pline_ss (ssget (list (cons 0 "LWPOLYLINE"))))
  (setq pline_chd 0)
  (setq n 0)
  (while (< n (sslength pline_ss))
    (setq pline (ssname pline_ss n))
    (pline_dd_zx pline)
    (ptss_chd_zx ptss_jg)
    (setq pline_chd (+ pline_chd ptss_chd_jg))
    (setq n (1+ n))
  )
  (princ "\n多段线数量")
  (princ n)
  (princ ";总长")
  (princ pline_chd)
  (princ)
)
;;;;;多段线顶点读取
(defun pline_dd_zx (pline / pline_en n pline_en_n)
  (setq pline_en (entget pline))
  (setq n 0)
  (setq ptss_jg (list))
  (while (< n (length pline_en))
    (setq pline_en_n (nth n pline_en))
    (cond
      ((eq '10 (nth 0 pline_en_n))
       (setq ptss_jg (cons (cdr pline_en_n) ptss_jg))
      )
    )
    (setq n (1+ n))
  )
  (if (= 1 (cdr (assoc '70 pl_en)));如果闭合
    (setq ptss_jg (cons (cdr (assoc '10 pl_en)) ptss_jg))
  )
)
;;;;;点集合长度计算
(defun        ptss_chd_zx (ptss / ptst pten n)
   (setq n 1)
   (setq ptss_chd_jg 0)
   (while (< n (length ptss))
     (setq ptst (nth n ptss))
     (setq pten (nth (- n 1) ptss))
     (setq ptss_chd_jg (+ ptss_chd_jg (distance ptst pten)))
     (setq n (1+ n))
   )
)
;;;;;三维多段线长度
(defun c:3lc (/ arc_ss arc_chd pline n)
  (princ "\n测量三维多段线长度;\n请选择三维多段线:")
  (setq 3pline_ss (ssget (list (cons 0 "POLYLINE"))))
  (setq 3pline_chd 0)
  (setq n 0)
  (while (< n (sslength 3pline_ss))
    (setq 3pline (ssname 3pline_ss n))
    (3pline_dd_zx 3pline)
    (ptss_chd_zx ptss_jg)
    (setq 3pline_chd (+ 3pline_chd ptss_chd_jg))
    (setq n (1+ n))
  )
  (princ "\n三维多段线数量")
  (princ n)
  (princ ";总长")
  (princ 3pline_chd)
  (princ)
)
;;;;;三维多段线顶点读取
(defun 3pline_dd_zx (3pline / 3pline0 3pline_dx 3pline_dx1 pt n)
  (setq n 0)
  (setq 3pline0 (entnext 3pline))
  (setq ptss_jg (list))
  (while (= n 0)
    (setq 3pline_dx (entget 3pline0))
    (if        (eq (cdr (assoc 0 3pline_dx)) "SEQEND")
      (setq n 1)
      (progn
        (setq pt (cdr (assoc '10 3pline_dx))) ;取坐标
        (setq ptss_jg (cons pt ptss_jg))
        (setq 3pline0 (entnext 3pline0)) ;顺序选取下个对象
      )
    )
  )
  (if (eq 9 (cdr (assoc '70 (entget 3pline)))) ;如果闭合
    (setq ptss_jg (cons (nth (- (length ptss_jg) 1) ptss_jg) ptss_jg))
  )
)
;;;;;长度
(defun c:chd (/ arc_ss arc_chd pline n)
  (princ "\n测量长度;\n请选择线段/弧线/圆/多段线/三维多段线:")
  (setq get_ss (ssget))
  (setq        get_ss_chd
         0
        n 0
  )
  (setq        n1 0
        n2 0
        n3 0
        n4 0
        n5 0
  )
  (setq        line_chd 0
        arc_chd        0
        circle_chd 0
        pline_chd 0
        3pline_chd 0
  )
  (while (< n (sslength get_ss))
    (setq get_ss_n (ssname get_ss n))
    (cond
      ((eq "LINE" (cdr (assoc '0 (entget get_ss_n))))
       (line_chd_zx get_ss_n)
       (setq line_chd (+ line_chd line_chd_jg))
       (setq n1 (1+ n1))
      )
      ((eq "ARC" (cdr (assoc '0 (entget get_ss_n))))
       (arc_chd_zx get_ss_n)
       (setq arc_chd (+ arc_chd arc_chd_jg))
       (setq n2 (1+ n2))
      )
      ((eq "CIRCLE" (cdr (assoc '0 (entget get_ss_n))))
       (circle_chd_zx get_ss_n)
       (setq circle_chd (+ circle_chd circle_chd_jg))
       (setq n3 (1+ n3))
      )
      ((eq "LWPOLYLINE" (cdr (assoc '0 (entget get_ss_n))))
       (pline_dd_zx get_ss_n)
       (ptss_chd_zx ptss_jg)
       (setq pline_chd (+ pline_chd ptss_chd_jg))
       (setq n4 (1+ n4))
      )
      ((eq "POLYLINE" (cdr (assoc '0 (entget get_ss_n))))
       (3pline_dd_zx get_ss_n)
       (ptss_chd_zx ptss_jg)
       (setq 3pline_chd (+ 3pline_chd ptss_chd_jg))
       (setq n5 (1+ n5))
      )
    )
    (setq n (1+ n))
  )
  (setq n0 (+ n1 n2 n3 n4 n5))
  (setq n (- n n0))
  (setq get_ss_chd (+ line_chd arc_chd circle_chd pline_chd 3pline_chd))
  (princ "\n  线段数量")
  (princ n1)
  (princ ";总长")
  (princ line_chd)
  (princ "\n  弧线数量")
  (princ n2)
  (princ ";总长")
  (princ arc_chd)
  (princ "\n    圆数量")
  (princ n3)
  (princ ";总长")
  (princ circle_chd)
  (princ "\n多段线数量")
  (princ n4)
  (princ ";总长")
  (princ pline_chd)
  (princ "\n三维线数量")
  (princ n5)
  (princ ";总长")
  (princ 3pline_chd)
  (princ "\n----------------------\n有效对象数量")
  (princ n0)
  (princ ";无效对象数量")
  (princ n)
  (princ ";\n总长")
  (princ get_ss_chd)
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-2-22 11:53:38 | 显示全部楼层

  1.   [FONT=courier new]
  2. ;;;格式化一下,看起来有辛苦.
  3. ;;; 直线长度
  4. (defun c:lc (/ line_ss line_chd line n)
  5.   (princ "\n测量直线长度;\n请选择直线:")
  6.   (setq line_ss (ssget (list (cons 0 '"LINE"))))
  7.   (setq line_chd 0)
  8.   (setq n 0)
  9.   (while (< n (sslength line_ss))
  10.     (setq line (ssname line_ss n))
  11.     (line_chd_zx line)
  12.     (setq line_chd (+ line_chd line_chd_jg))
  13.     (setq n (1+ n))
  14.   )
  15.   (princ "\n线段数量")
  16.   (princ n)
  17.   (princ ";总长")
  18.   (princ line_chd)
  19.   (princ)
  20. )
  21. ;;; 直线长度执行
  22. (defun line_chd_zx (line / ptst pten)
  23.   (setq ptst (cdr (assoc '10 (entget line))))
  24.   (setq pten (cdr (assoc '11 (entget line))))
  25.   (setq line_chd_jg (distance ptst pten))
  26. )
  27. ;;; 弧线长度
  28. (defun c:hc (/ arc_ss arc_chd arc n)
  29.   (princ "\n测量弧线长度;\n请选择弧线:")
  30.   (setq arc_ss (ssget (list (cons 0 '"ARC"))))
  31.   (setq arc_chd 0)
  32.   (setq n 0)
  33.   (while (< n (sslength arc_ss))
  34.     (setq arc (ssname arc_ss n))
  35.     (arc_chd_zx arc)
  36.     (setq arc_chd (+ arc_chd arc_chd_jg))
  37.     (setq n (1+ n))
  38.   )
  39.   (princ "\n弧线数量")
  40.   (princ n)
  41.   (princ ";总长")
  42.   (princ arc_chd)
  43.   (princ)
  44. )
  45. ;;; 弧线长度执行
  46. (defun arc_chd_zx (arc / r ast aen)
  47.   (setq r (cdr (assoc '40 (entget arc))))
  48.   (setq ast (cdr (assoc '50 (entget arc))))
  49.   (setq aen (cdr (assoc '51 (entget arc))))
  50.   (setq arc_chd_jg (* r (- aen ast)))
  51. )
  52. ;;; 圆长度
  53. (defun c:yc (/ arc_ss arc_chd circle n)
  54.   (princ "\n测量圆长度;\n请选择圆:")
  55.   (setq circle_ss (ssget (list (cons 0 '"CIRCLE"))))
  56.   (setq circle_chd 0)
  57.   (setq n 0)
  58.   (while (< n (sslength circle_ss))
  59.     (setq circle (ssname circle_ss n))
  60.     (circle_chd_zx circle)
  61.     (setq circle_chd (+ circle_chd circle_chd_jg))
  62.     (setq n (1+ n))
  63.   )
  64.   (princ "\n圆数量")
  65.   (princ n)
  66.   (princ ";总长")
  67.   (princ circle_chd)
  68.   (princ)
  69. )
  70. ;;; 圆长度执行
  71. (defun circle_chd_zx (circle / r)
  72.   (setq r (cdr (assoc '40 (entget circle))))
  73.   (setq circle_chd_jg (* 2 r pi))
  74. )
  75. ;;; 多段线长度
  76. (defun c:plc (/ arc_ss arc_chd pline n)
  77.   (princ "\n测量多段线长度;\n请选择多段线:")
  78.   (setq pline_ss (ssget (list (cons 0 "LWPOLYLINE"))))
  79.   (setq pline_chd 0)
  80.   (setq n 0)
  81.   (while (< n (sslength pline_ss))
  82.     (setq pline (ssname pline_ss n))
  83.     (pline_dd_zx pline)
  84.     (ptss_chd_zx ptss_jg)
  85.     (setq pline_chd (+ pline_chd ptss_chd_jg))
  86.     (setq n (1+ n))
  87.   )
  88.   (princ "\n多段线数量")
  89.   (princ n)
  90.   (princ ";总长")
  91.   (princ pline_chd)
  92.   (princ)
  93. )
  94. ;;; 多段线顶点读取
  95. (defun pline_dd_zx (pline / pline_en n pline_en_n)
  96.   (setq pline_en (entget pline))
  97.   (setq n 0)
  98.   (setq ptss_jg (list))
  99.   (while (< n (length pline_en))
  100.     (setq pline_en_n (nth n pline_en))
  101.     (cond
  102.       ((eq '10 (nth 0 pline_en_n))
  103.         (setq ptss_jg (cons (cdr pline_en_n) ptss_jg))
  104.       )
  105.     )
  106.     (setq n (1+ n))
  107.   )
  108.   (if (= 1 (cdr (assoc '70 pl_en)))    ; 如果闭合
  109.     (setq ptss_jg (cons (cdr (assoc '10 pl_en)) ptss_jg))
  110.   )
  111. )
  112. ;;; 点集合长度计算
  113. (defun ptss_chd_zx (ptss / ptst pten n)
  114.   (setq n 1)
  115.   (setq ptss_chd_jg 0)
  116.   (while (< n (length ptss))
  117.     (setq ptst (nth n ptss))
  118.     (setq pten (nth (- n 1) ptss))
  119.     (setq ptss_chd_jg (+ ptss_chd_jg (distance ptst pten)))
  120.     (setq n (1+ n))
  121.   )
  122. )
  123. ;;; 三维多段线长度
  124. (defun c:3lc (/ arc_ss arc_chd pline n)
  125.   (princ "\n测量三维多段线长度;\n请选择三维多段线:")
  126.   (setq 3pline_ss (ssget (list (cons 0 "POLYLINE"))))
  127.   (setq 3pline_chd 0)
  128.   (setq n 0)
  129.   (while (< n (sslength 3pline_ss))
  130.     (setq 3pline (ssname 3pline_ss n))
  131.     (3pline_dd_zx 3pline)
  132.     (ptss_chd_zx ptss_jg)
  133.     (setq 3pline_chd (+ 3pline_chd ptss_chd_jg))
  134.     (setq n (1+ n))
  135.   )
  136.   (princ "\n三维多段线数量")
  137.   (princ n)
  138.   (princ ";总长")
  139.   (princ 3pline_chd)
  140.   (princ)
  141. )
  142. ;;; 三维多段线顶点读取
  143. (defun 3pline_dd_zx (3pline / 3pline0 3pline_dx 3pline_dx1 pt n)
  144.   (setq n 0)
  145.   (setq 3pline0 (entnext 3pline))
  146.   (setq ptss_jg (list))
  147.   (while (= n 0)
  148.     (setq 3pline_dx (entget 3pline0))
  149.     (if (eq (cdr (assoc 0 3pline_dx)) "SEQEND")
  150.       (setq n 1)
  151.       (progn
  152.         (setq pt (cdr (assoc '10 3pline_dx))) ; 取坐标
  153.         (setq ptss_jg (cons pt ptss_jg))
  154.         (setq 3pline0 (entnext 3pline0)) ; 顺序选取下个对象
  155.       )
  156.     )
  157.   )
  158.   (if (eq 9 (cdr (assoc '70 (entget 3pline)))) ; 如果闭合
  159.     (setq ptss_jg (cons (nth (- (length ptss_jg) 1) ptss_jg) ptss_jg))
  160.   )
  161. )
  162. ;;; 长度
  163. (defun c:chd (/ arc_ss arc_chd pline n)
  164.   (princ "\n测量长度;\n请选择线段/弧线/圆/多段线/三维多段线:")
  165.   (setq get_ss (ssget))
  166.   (setq get_ss_chd 0
  167.         n 0
  168.   )
  169.   (setq n1 0
  170.         n2 0
  171.         n3 0
  172.         n4 0
  173.         n5 0
  174.   )
  175.   (setq line_chd 0
  176.         arc_chd 0
  177.         circle_chd 0
  178.         pline_chd 0
  179.         3pline_chd 0
  180.   )
  181.   (while (< n (sslength get_ss))
  182.     (setq get_ss_n (ssname get_ss n))
  183.     (cond
  184.       ((eq "LINE" (cdr (assoc '0 (entget get_ss_n))))
  185.         (line_chd_zx get_ss_n)
  186.         (setq line_chd (+ line_chd line_chd_jg))
  187.         (setq n1 (1+ n1))
  188.       )
  189.       ((eq "ARC" (cdr (assoc '0 (entget get_ss_n))))
  190.         (arc_chd_zx get_ss_n)
  191.         (setq arc_chd (+ arc_chd arc_chd_jg))
  192.         (setq n2 (1+ n2))
  193.       )
  194.       ((eq "CIRCLE" (cdr (assoc '0 (entget get_ss_n))))
  195.         (circle_chd_zx get_ss_n)
  196.         (setq circle_chd (+ circle_chd circle_chd_jg))
  197.         (setq n3 (1+ n3))
  198.       )
  199.       ((eq "LWPOLYLINE" (cdr (assoc '0 (entget get_ss_n))))
  200.         (pline_dd_zx get_ss_n)
  201.         (ptss_chd_zx ptss_jg)
  202.         (setq pline_chd (+ pline_chd ptss_chd_jg))
  203.         (setq n4 (1+ n4))
  204.       )
  205.       ((eq "POLYLINE" (cdr (assoc '0 (entget get_ss_n))))
  206.         (3pline_dd_zx get_ss_n)
  207.         (ptss_chd_zx ptss_jg)
  208.         (setq 3pline_chd (+ 3pline_chd ptss_chd_jg))
  209.         (setq n5 (1+ n5))
  210.       )
  211.     )
  212.     (setq n (1+ n))
  213.   )
  214.   (setq n0 (+ n1 n2 n3 n4 n5))
  215.   (setq n (- n n0))
  216.   (setq get_ss_chd (+ line_chd arc_chd circle_chd pline_chd 3pline_chd))
  217.   (princ "\n 线段数量")
  218.   (princ n1)
  219.   (princ ";总长")
  220.   (princ line_chd)
  221.   (princ "\n 弧线数量")
  222.   (princ n2)
  223.   (princ ";总长")
  224.   (princ arc_chd)
  225.   (princ "\n 圆数量")
  226.   (princ n3)
  227.   (princ ";总长")
  228.   (princ circle_chd)
  229.   (princ "\n多段线数量")
  230.   (princ n4)
  231.   (princ ";总长")
  232.   (princ pline_chd)
  233.   (princ "\n三维线数量")
  234.   (princ n5)
  235.   (princ ";总长")
  236.   (princ 3pline_chd)
  237.   (princ "\n----------------------\n有效对象数量")
  238.   (princ n0)
  239.   (princ ";无效对象数量")
  240.   (princ n)
  241.   (princ ";\n总长")
  242.   (princ get_ss_chd)
  243.   (princ)
  244. )

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 04:05 , Processed in 0.230638 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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