明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2589|回复: 8

[基础] 如何计算所点选的所有线段长

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

大家好

我想问一下,如果在图面上有一个由很多线段组成的路径

我要如何透过lisp来计算它的总长度呢

 

传统的方式是点选每一段长度,然后用计算机慢慢加

本帖子中包含更多资源

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

x
发表于 2010-9-3 21:46:00 | 显示全部楼层

先参考一下这之前的讨论

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=77256&replyID=18733&skin=0
http://bbs.mjtd.com/dispbbs.asp?boardid=16&replyID=100419&ID=5810&skin=0

发表于 2010-9-4 06:53:00 | 显示全部楼层
lead009发表于2010-9-3 21:28:00大家好 我想问一下,如果在图面上有一个由很多线段组成的路径 我要如何透过lisp来计算它的总长度呢   传统的方式是点选每一段长度,然后用计算机慢慢加 下载 文件大小:3.7 KB,下载

 

 

网站上有框选然后标注总长度的程序,不必一个一个的加

发表于 2010-9-4 07:00:00 | 显示全部楼层

编辑成多段线,然后用LIST命令直接查询

 楼主| 发表于 2010-9-4 08:01:00 | 显示全部楼层

我用了list指令去查詢,但是視窗還是個別顯示出所選的線段長度

我要怎麼用,才能讓他們自動加起來呢??

本帖子中包含更多资源

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

x
发表于 2010-9-8 16:29:00 | 显示全部楼层

(DEFUN C:zzz ()
  (setq tot_len 0) 
  (prompt "\nSelect all objects to count: ")
  (setq ss (ssget))
  (while (> (sslength ss) 0)
    (setq en (ssname ss 0))
    (setq ed (entget en))
    (setq e_type (cdr (assoc '0 ed)))
    (cond
      ((= e_type "LINE") (add_lines))
      ((= e_type "ARC") (add_arcs))
      ((= e_type "POLYLINE") (add_poly))
      ((or
  (/= e_type "LINE")
  (/= e_type "ARC")
  (/= e_type "POLYLINE")
       )
       (ssdel en ss)
      )
    )
  )
  (prompt (strcat "\nTotal length is: " (rtos tot_len 2 2)))(PRINC)
)

(defun add_lines ()
  (setq pt1 (cdr (assoc '10 ed)))
  (setq pt2 (cdr (assoc '11 ed)))
  (setq line_len (distance pt1 pt2))
  (setq tot_len (+ tot_len line_len))
  (ssdel en ss)
)

(defun add_arcs ()
  (SETQ CEN (CDR (ASSOC '10 Ed))
        RAD (CDR (ASSOC '40 Ed))
        DIA (* RAD 2.0)
        CIRCUM (* (* RAD PI) 2.0)
        S_ANG (CDR (ASSOC '50 Ed))
        E_ANG (CDR (ASSOC '51 Ed))
  )
  (IF (< E_ANG S_ANG)
    (SETQ E_ANG (+ E_ANG (* PI 2.0)))
  )
  (SETQ
        N_ANG (- E_ANG S_ANG)
        N_ANG_1 (* (/ N_ANG PI) 180.0)
        PART_CIRC (/ N_ANG_1 360.0) 
        A_LEN (* PART_CIRC CIRCUM)
  )
  (setq tot_len (+ tot_len a_len))
  (PRIN1)
  (SSDEL EN SS)
)

(defun add_poly ()
  (command "area" "e" en)
  (setq tot_len (+ tot_len (getvar "perimeter")))
  (ssdel en ss)
)

 

 

一个计算线段长度的lisp

发表于 2010-9-8 19:13:00 | 显示全部楼层
 简单的来一个
(defun c:xl (/ en obj curve-length)
  (while (null (setq en (car (entsel)))))
  (command "pedit" en "j" (ssget "all") "" "")
  (setq en (entlast))
  (setq obj (vlax-ename->vla-object en))
  (setq curve-length (vla-get-length obj))
  (vl-cmdf "explode" en)
  curve-length
)
发表于 2010-10-8 08:20:00 | 显示全部楼层
  1. ;; by ALin 2010
  2. (defun C:ToLLen    (/ ss idx obj tol cnt)
  3. (if (setq ss (ssget))
  4. (progn
  5. (setq idx    0
  6.      tol    0
  7.      cnt    0
  8. )
  9. (repeat (sslength ss)
  10.     (setq obj (vlax-ename->vla-object (ssname ss idx)))
  11.     (if (vlax-property-available-p obj 'length)
  12.      (setq    tol (+ tol (vla-get-length obj))
  13.         cnt (1+ cnt)
  14.      )
  15.      (progn
  16.      (if    (CurveLength obj)
  17.      (setq tol    (+ tol (CurveLength obj))
  18.          cnt    (1+ cnt)
  19.      )
  20.      (alert (strcat "No length property available for "
  21.              (vla-get-objectname obj)
  22.              "."
  23.          )
  24.      )
  25.      )
  26.      )
  27.     )
  28.     (setq idx (1+ idx))
  29. )
  30. (alert (strcat (itoa cnt)
  31.          " object(s) total length = "
  32.          (rtos tol 2 4)
  33.          " units."
  34.      )
  35. )
  36. )
  37. )
  38. (princ)
  39. )
  40. (defun CurveLength (obj / rtn endparam)
  41. (if (not (vl-catch-all-error-p
  42.      (setq endparam
  43.          (vl-catch-all-apply 'vlax-curve-getendparam (list obj))
  44.      )
  45.      )
  46. )
  47. (if    (setq rtn (vlax-curve-getdistatparam obj endparam))
  48. rtn
  49. nil
  50. )
  51. nil
  52. )
  53. )
发表于 2013-3-12 10:35:35 | 显示全部楼层
留个记号!来了啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 02:35 , Processed in 0.192026 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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