434939575 发表于 2014-10-22 14:28:14

也许是Distance的一点BUG

我想过滤800长度的线。但是用DISTANCE 水平。垂直线能过滤。长度相等的斜线不能过滤;用(equal b-x 800   0.000000000001)这个设置一点误差就行!(defun c:tt ()
(setq ssad (ssadd))
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
    (setq SSB-en (ssname ss i)
    i   (1+ i)
    )
    (setq b-ent (entget SSB-en))
    (setq pt10 (cdr (assoc 10 b-ent)))
    (setq pt11 (cdr (assoc 11 b-ent)))
   (setq b-x (distance pt10 pt11))
      (if
    ;(= b-x 800   );不行
    ;(equal b-x 800   0.000000000001);行
      (progn
(ssadd SSB-en ssad)
(setq ent1 (ssname ssad 0))
(command "chprop" ent1 "" "c" 1 "")
      )    ;progn
    );if
);repeat
(princ)
)

自贡黄明儒 发表于 2014-10-22 15:03:01

= 和equal本来是有区别的,两个函数就有两个的用法

434939575 发表于 2014-10-22 15:11:49

自贡黄明儒 发表于 2014-10-22 15:03 static/image/common/back.gif
= 和equal本来是有区别的,两个函数就有两个的用法

谢谢指导。我的意思同样长度的线,不是水平,或垂直,就不能生效。用IF=判断。

firstinti 发表于 2014-10-22 17:21:15

一般我也都是用equa来判断l的,点坐标计算估计只会无限接近,不会完全相等,精度满足即可。

ll_j 发表于 2014-10-22 17:30:39

你试试降低精度看看,比如1e-6。

434939575 发表于 2014-10-22 19:04:07

谢谢
页: [1]
查看完整版本: 也许是Distance的一点BUG