明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2577|回复: 10

[提问] 整整一个下午也没弄出个结果来,在线等高手

[复制链接]
发表于 2013-5-31 17:23 | 显示全部楼层 |阅读模式
判断选择的线段长度当等于一个数值的时候,就被选中
例如:当判断值为10mm的时候,选择的线段中有10mm长度的线段时就被选中。

下面的代码废了好长一段时间才弄出来的
可是只适用于x轴 或者y轴上的线段
当线段有角度的时候该如何修正呢,小弟弄了整整一个下午也没弄出来
在线等高手相助 拜托


(defun c:st_sen ( )
    (setvar "cmdecho" 0)
    (cond
    ((not (setq ss (ssget '((0 . "LINE"))))))
    (T
     (setq i 0
         ss1 (ssadd)
     )
     (while (setq ee (ssname ss i))
       (setq dat (entget ee)
              pa (cdr (assoc 10 dat))
              pb (cdr (assoc 11 dat))
               i (1+ i)
       )
       (if (= (distance pa pb) 10)   ;;判断线段长度 :10mm的时候,亮显
       (ssadd ee ss1)
       )
     )
   (princ (strcat "\n 〓共选择了【" (itoa (sslength ss1)) "】条直线〓 "))
   (sssetfirst nil ss1)   ;;判断线段长度 :10mm的时候,亮显
    )
    )
(princ)
)
)

评分

参与人数 1明经币 +1 收起 理由
1291500406 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-5-31 17:46 | 显示全部楼层
(if (= (distance pa pb) 10)改为(if (equal (distance pa pb) 10.0 0.1)试试
发表于 2013-5-31 17:52 | 显示全部楼层
  1. (defun c:w1 (/ DAT EE N PA PB SS SS1)
  2.   (IF (setq ss (ssget '((0 . "LINE"))))
  3.     (Progn
  4.       (setq ss1 (ssadd))
  5.       (repeat (setq n (SSLENGTH ss))
  6.         (setq ee (ssname ss (setq n (1- n))))
  7.         (setq dat (entget ee)
  8.               pa  (cdr (assoc 10 dat))
  9.               pb  (cdr (assoc 11 dat))
  10.         )
  11.         (if (= (distance pa pb) 10)
  12.           ;;判断线段长度 :10mm的时候,亮显
  13.           (ssadd ee ss1)
  14.         )
  15.       )
  16.       (sssetfirst nil ss1)
  17.     )
  18.   )
  19.   (princ)
  20. )

评分

参与人数 1金钱 +6 收起 理由
【KAIXIN】 + 6 赞一个!

查看全部评分

 楼主| 发表于 2013-5-31 19:20 | 显示全部楼层
本帖最后由 yaokui25 于 2013-5-31 19:22 编辑
springwillow 发表于 2013-5-31 17:46
(if (= (distance pa pb) 10)改为(if (equal (distance pa pb) 10.0 0.1)试试

您好,谢谢您的回复
现在的代码只能选中 x轴 或者y轴上的线段
带角度的线段也想选中
刚才试了一下,没有效果
 楼主| 发表于 2013-5-31 19:25 | 显示全部楼层
自贡黄明儒 发表于 2013-5-31 17:52

您好,谢谢您的回复
现在的代码只能选中 x轴 或者y轴上的线段
带角度的线段也想被选中,只要长度满足要求
刚才试了一下,没能达到我想要的效果。
您能在帮我看看嘛?
可能我的问题没说明白
发表于 2013-5-31 19:40 | 显示全部楼层
  1. (defun c:st_sen  ()
  2.   (setvar "cmdecho" 0)
  3.   (cond
  4.     ((not (setq ss (ssget '((0 . "LINE"))))))
  5.     (T
  6.      (setq i   0
  7.      ss1 (ssadd)
  8.      )
  9.      (while (setq ee (ssname ss i))
  10.        (setq dat (entget ee)
  11.        pa   (cdr (assoc 10 dat))
  12.        pb   (cdr (assoc 11 dat))
  13.        i   (1+ i)
  14.        )
  15.        (if (equal (distance pa pb) 10.0 0.1)
  16.    ;;判断线段长度 :10mm的时候,亮显
  17.    (ssadd ee ss1)
  18.        )
  19.      )
  20.      (princ (strcat "\n 〓共选择了【"
  21.         (itoa (sslength ss1))
  22.         "】条直线〓 "
  23.       )
  24.      )
  25.      (sssetfirst nil ss1)
  26.      ;;判断线段长度 :10mm的时候,亮显
  27.     )
  28.   )
  29.   (princ)
  30. )

本帖子中包含更多资源

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

x

评分

参与人数 1金钱 +5 收起 理由
yaokui25 + 5 谢谢您

查看全部评分

 楼主| 发表于 2013-5-31 20:05 | 显示全部楼层
springwillow 发表于 2013-5-31 19:40

再次谢谢您的回答,确实解决的我的问题,困扰了我一下午。

再次请求:如何修改为 ≧大于等于一个数值  且  ≦小于等于一个数值时候,选中满足条件的线段

例如 :10≦线段长 ≦50   的所有线段
发表于 2013-5-31 20:16 | 显示全部楼层
yaokui25 发表于 2013-5-31 20:05
再次谢谢您的回答,确实解决的我的问题,困扰了我一下午。

再次请求:如何修改为 ≧大于等 ...
  1. (defun c:st_sen        (/ ss i ee dat pa pb ss1)
  2.   (setvar "cmdecho" 0)
  3.   (cond
  4.     ((not (setq ss (ssget '((0 . "LINE"))))))
  5.     (T
  6.      (setq i   0
  7.            ss1 (ssadd)
  8.      )
  9.      (while (setq ee (ssname ss i))
  10.        (setq dat (entget ee)
  11.              pa         (cdr (assoc 10 dat))
  12.              pb         (cdr (assoc 11 dat))
  13.              i         (1+ i)
  14.        )
  15.        (if (and (>= (distance pa pb) 9.9) (<= (distance pa pb) 50.1))
  16.          ;;判断线段长度 :10mm的时候,亮显
  17.          (ssadd ee ss1)
  18.        )
  19.      )
  20.      (princ (strcat "\n 〓共选择了【"
  21.                     (itoa (sslength ss1))
  22.                     "】条直线〓 "
  23.             )
  24.      )
  25.      (sssetfirst nil ss1)
  26.      ;;判断线段长度 :10mm的时候,亮显
  27.     )
  28.   )
  29.   (princ)
  30. )
发表于 2013-5-31 20:41 | 显示全部楼层
谢谢楼主的分享!收藏备用。
 楼主| 发表于 2013-6-1 00:12 | 显示全部楼层
springwillow 发表于 2013-5-31 20:16

谢谢您的指教
也就是说在选择上做了一个模糊处理是吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 15:17 , Processed in 5.023409 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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