明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1726|回复: 6

[基础] 如何用LSP实线由linea或Pline形成的树状分枝求每一路经径长度!!!????

[复制链接]
发表于 2011-5-15 11:39 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

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

x
发表于 2011-5-15 19:25 | 显示全部楼层
用直接标注线长的程序不行吗?这种程序论坛就有。
发表于 2011-5-15 22:16 | 显示全部楼层
本帖最后由 Gu_xl 于 2011-5-15 22:23 编辑

回复 xxzwtr 的帖子

这段程序或许对你有帮助,功能:根据选取的直线选择与其相连的所有直线

  1. ;;;选择集相减
  2. (defun gxl-Sel-SSsub(ss1 ss2 / ss n)

  3. (cond
  4.         ((and ss1 ss2)
  5.          (setq n 0)
  6.          (repeat (sslength ss2)
  7.            (ssdel (ssname ss2 n) ss1)
  8.            (setq n (1+ n))
  9.            )
  10.         )
  11.         ((and ss1 (not ss2))
  12.                 ss1
  13.         )
  14.         (T
  15.                 (setq ss1 nil)
  16.         )
  17. )
  18. ss1
  19. )
  20. ;;;选择集合并
  21. (defun gxl-Sel-SSJoin ( ss1 ss2 / ename ss cnt )

  22. (if ss1
  23. (progn
  24.         (if (= (type ss1) 'ENAME)
  25.         (progn
  26.                 (setq
  27.                         ename ss1
  28.                         ss1   (ssadd)
  29.                 )
  30.                 (ssadd ename ss1)
  31.         ))
  32. ))

  33. (if ss2
  34. (progn
  35.         (if (= (type ss2) 'ENAME)
  36.         (progn
  37.                 (setq
  38.                         ename ss2
  39.                         ss2   (ssadd)
  40.                 )
  41.                 (ssadd ename ss2)
  42.         ))
  43. ))

  44. (setq ss (ssadd))

  45. (if (and ss1 ss2)
  46. (progn
  47.         ;(setq ss ss2 cnt 0)
  48.         (setq  cnt 0)
  49.         (repeat (sslength ss2)
  50.                 (ssadd (ssname ss2 cnt) ss)
  51.                 (setq cnt (1+ cnt))
  52.         )
  53.         (setq  cnt 0)
  54.         (repeat (sslength ss1)
  55.                 (ssadd (ssname ss1 cnt) ss)
  56.                 (setq cnt (1+ cnt))
  57.         )
  58. ))

  59. (if (and ss1 (not ss2))
  60. (setq ss ss1))

  61. (if (and ss2 (not ss1))
  62. (setq ss ss2))

  63. (if (> (sslength ss) 0)
  64.   ;;(eval ss)
  65.         ss
  66.         nil
  67. )
  68. )
  69. ;;;根据坐标选择直线
  70. (defun gxl-sel-SSgetLineatPoint (pt jd /  px py px0 px1 py0 py1 ss pz)
  71. (setq px (car pt)
  72.       px0 (- px jd)
  73.       px1 (+ px jd)
  74.       py (cadr pt)
  75.       py0 (- py jd)
  76.       py1 (+ py jd)
  77.       pz (caddr pt)
  78.       )
  79.   (setq ss
  80. (ssget "x" (list '(0 . "line")
  81.                  '(-4 . "<or")
  82.         
  83.                  '(-4 . "<and")
  84.                  '(-4 . ">=,>=,=")
  85.                  (list 10 px0 py0 pz)
  86.                  '(-4 . "<=,<=,=")
  87.                  (list 10 px1 py1 pz)
  88.                  '(-4 . "and>")
  89.                  
  90.                  '(-4 . "<and")
  91.                  '(-4 . ">=,>=,=")
  92.                  (list 11 px0 py0 pz)
  93.                  '(-4 . "<=,<=,=")
  94.                  (list 11 px1 py1 pz)
  95.                  '(-4 . "and>")
  96.                  
  97.                  '(-4 . "or>")
  98.                  )
  99.        )
  100.   )
  101.   ss
  102.   )
  103. ;;;根据直线选相连直线测试
  104. (defun c:ssgetbyline(/ ssrtl jd pt1 pt2 enline  getline)
  105.   (defun getline (pt jd / s s1 n p1 p2)
  106.    
  107.     (setq s (gxl-sel-SSgetLineatPoint pt jd))
  108.     (if s
  109.       (progn
  110.         (setq s1 (GXL-SEL-SSSUB s ssrtl)
  111.               ssrtl (GXL-SEL-SSJOIN ssrtl s1)
  112.               )
  113.         
  114.         (if s1
  115.           (progn
  116.             (setq n 0)
  117.             (repeat (sslength s1)
  118.               (setq p1 (cdr (assoc 10 (entget (ssname s1 n))))
  119.                     p2 (cdr (assoc 11 (entget (ssname s1 n))))
  120.                     )
  121.               (getline p2 jd)
  122.               (getline p1 jd)
  123.               (setq n (1+ n))
  124.               )
  125.             )
  126.           )
  127.         )
  128.       )
  129.    
  130.     )
  131.   ;;;程序开始
  132.     (princ "\n选择直线:")
  133.   (setq enline (car (entsel)))
  134.   (setq jd (getreal "输入容差精度:<0.001>"))
  135.   (if (null jd)(setq jd 0.001))
  136.   (setq pt1 (cdr (assoc 10 (entget enline))))
  137.   (setq pt2 (cdr (assoc 11 (entget enline))))
  138. (setq ssrtl (ssadd enline))
  139.   (getline pt1 jd)
  140.   (getline pt2 jd)
  141.   (SSSETFIRST nil ssrtl)
  142.   ssrtl
  143.   )

本帖子中包含更多资源

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

x
发表于 2011-5-16 08:40 | 显示全部楼层
感谢Gu_xl版主分享学习了!
发表于 2012-9-28 15:17 | 显示全部楼层
好东西,看不太懂,学习。。。。。。。。。。。。
发表于 2013-2-5 07:54 | 显示全部楼层
有何用途?
发表于 2013-3-6 10:35 | 显示全部楼层
Mark 一下,谢谢斑竹
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 10:42 , Processed in 0.221618 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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