ottooo 发表于 2022-7-5 18:48:34

需要帮助检测L中的错误

你好,
 
我对当前的LISP项目有点迷茫。
 
通过这个程序,我确定一条线的角度,并将其与列表进行比较。如果此角度在此列表中,则应返回true,否则返回false。
 
然而,我似乎无法使代码的红色部分正常工作。当我使用一个数字时,它会正常工作,但当我使用“ang1”时,它失败了。然而,当我使用(princ ang1)时,它显示了我想要与列表进行比较的角度。
 
我认为错误在RtD计算中的某个地方,但我不确定。
 
如果你需要任何其他信息,请告诉我。
 

(defun c:OneBend ( / savesnap comech )

(initget 1 "Forward Backward")
(setq richting (getkword "Is this a Forward or a Backward bend? "))

(setq bend 90)

;;; DETERMINE ANGLE

(setq pt1 (getpoint "\nSelect point 1: "))
(setq pt2 (getpoint "\nSelect point 2: "))

(setq ang (angle pt1 pt2))
(setq ang0 (/ ang pi))
(setq ang1 (* ang0 180.0))

(if (>= ang1 180.0) (setq ang1 (- ang1 180.0)))
(if (>= ang1 90.0) (setq ang1 (- ang1 180.0)))
(setq ang1 (abs ang1))

(terpri)
(princ ang1)
(terpri)

(setq f90_list '(0.0 8.0 10.0 12.0 14.0 16.0 18.0 20.0 22.0 24.0 26.0 34.0))

(setq b90_list '(0.0 16.0 20.0 22.0 24.0 26.0 28.0 30.0 32.0 34.0 36.0 39.0 40.0 42.0
                        44.0 45.0 46.0 48.0
                        50.0 52.0 55.0 58.0 60.0 63.0 64.0 65.0))

(setq stnd_list '(0.0))

(cond
        ((and (= bend 90) (= richting "Forward"))
                (setq angle_list f90_list))

        ; FOR FUTURE USE
        ((and (= bend 45) (= richting "Forward"))
                (setq angle_list f45_list))

        ((and (= bend 90) (= richting "Backward"))
                (setq angle_list b90_list))

        ; FOR FUTURE USE
        ((and (= bend 45) (= richting "Backward"))
                (setq angle_list b45_list))

        (t (setq angle_list stnd_list))
)

; ANGLE PART OF LIST

;        (setq apol (member 20.0 angle_list)) ; This works

(setq apol (member ang1 angle_list)) ; This does not work ???

(if apol (princ "Success!") (princ "Fail!"))


; PROGRAM CONTINUES HERE
)


marko_ribar 发表于 2022-7-5 19:04:30

您需要舍入变量ang1以匹配角度列表中指定的角度值,以便成员函数能够检测其存在。。。另一种方法是使用vl位置函数而不是成员函数,因为它速度更快,但仍然需要进行舍入。实际上,最好的选择可能是具有足够lambda函数的vl成员if函数,在该函数中,您不必进行舍入,而是使用适当的模糊容差值指定相等的比较函数。。。

Commandobill 发表于 2022-7-5 19:17:41

我认为他想说的是,你试图把20.0000和20.0匹配起来,但这不可行。

Tharwat 发表于 2022-7-5 19:26:06

试试这个:
 

(setq apol (vl-some '(lambda (x) (equal ang1 x 1e-4)) angle_list))

ottooo 发表于 2022-7-5 19:33:24

非常感谢,这就成功了:-)

Tharwat 发表于 2022-7-5 19:44:25

不客气

BIGAL 发表于 2022-7-5 19:49:58

将所有弯曲变量设置为实数45.0 90.0
页: [1]
查看完整版本: 需要帮助检测L中的错误