FazBear 发表于 2022-7-6 06:30:20

角度变量问题

大家好
 
Lisp程序有个问题,基本上是读角度。我将所述角度的值保存在一个变量中(转换为deg),该变量称为ANGLE1。当我在命令行输入(ANGLE1)时,它显示为30.0,这是正确的,但如果我输入(=ANGLE1 30.0),它应该返回T,但由于某些原因,它返回nil。
 
如果我键入(setq ANGLE1 30.0),然后重复(=ANGLE1 30.0),它确实返回T
 
有人知道为什么从实际角度存储的变量ANGLE1不起作用吗?
 
 
我已经简化了实际的程序,以便更容易解释,希望它能正确阅读。

hendie 发表于 2022-7-6 06:54:09

在此处返回T
你的代码是什么?

FazBear 发表于 2022-7-6 06:55:26

原始角度1变量取自2(getpoints)之间的角度
 
如果使用(setq ANGLE1(getangle“\n点击角度”),则选择角度(极轴30度),该角度应返回0.523599弧度
 
然后使用返回30.0的(setq ANGLE2(*(/ANGLE1 pi)180))
然后尝试(=ANGLE2 30.0),返回nil

ASMI 发表于 2022-7-6 07:09:09

表达式(/ANGLE1 pi)是连分数1.66666。。。。不能用绝对精度计算。对于实数运算,使用与fuzz相等的函数,而不是“=”。
 
Command :(equal ANGLE2 30.0 0.000000000001)

T

FazBear 发表于 2022-7-6 07:23:55

谢谢大家抽出时间。使用(等角2 30.0 0.000000000001)效果很好。谢谢你的ASMI。

TheyCallMeJohn 发表于 2022-7-6 07:38:28

我试着从一个动态块中取两个角度。然后按给定量改变角度,并将角度反馈回动态块。我意识到我的一些代码是多余的,可以清理,但我用它来解决问题。
 
我认为问题在于将角度反馈到块中。它可能必须采用不同的格式。
 
我从我的公司已经用于更改动态块的长度变量的一些现有代码中修改了此代码。(这部分有效!)
 
此外,我还意识到可能缺少一些组件。
 
;Adjust Bracing Block by Increments
(defun C:ISATBRACEBUMP()
(vl-load-com)
(if (= (vl-registry-read "HKEY_CURRENT_USER\\Datum" "Datum-Elev") nil)
        (progn
                (princ "\n== SET DATUM ELEVATION FIRST ==\n")
        )
        (progn
                (setq RX (ssget '((0 . "INSERT"))))       
                (setq LE_RX (sslength RX))
                (setq A 0)
                (repeat LE_RX
                        (setq ANGMODAMT 5) ; this will be ajustable later.
                        (setq ANGBRACES (SSNAME RX A))       
                        (setq oBkRef (vlax-ename->vla-object ANGBRACES))
                        (setq SEIS_ANG_R_1 (getdynpropvalue OBkRef "Angle"))
                        (setq SEIS_ANG_D_1 (RTD SEIS_ANG_R_1))
                        (setq SEIS_ANG_R_2 (getdynpropvalue OBkRef "Angle1"))
                        (setq SEIS_ANG_D_2 (RTD SEIS_ANG_R_2))
                        (setq SEIS_ANG_D_1_M (+ SEIS_ANG_D_1 ANGMODAMT))
                        (setq SEIS_ANG_D_2_M (+ SEIS_ANG_D_2 ANGMODAMT))
                        (setq SEIS_ANG_R_1_M (DTR SEIS_ANG_D_1_M))
                        (setq SEIS_ANG_R_2_M (DTR SEIS_ANG_D_2_M))
                        (princ SEIS_ANG_R_1_M)
                        (princ SEIS_ANG_R_2_M)
                        (chgdynprop oBkRef "Angle" getangl(SEIS_ANG_R_1_M))
                        (chgdynprop oBkRef "Angle1" SEIS_ANG_R_2_M)
                        (princ)
                       
                        (SETQ A (+ A 1))
                )
               
        )
)
)

;DUPLICATE TEXT - TO BE REMOVED WHEN INCORPORATED INTO MASTER TEXT

(defun dtr (a)
(* pi (/ a 180.0))
)

(DEFUN RTD (A)
(/ (* A 180.0) PI)
)

(defun getdynprops (obj / v)
(mapcar '(lambda (x)
             (if (setq v (vlax-variant-value (vla-get-value x)))
             (cons (vla-get-propertyname x) v)))
(vlax-invoke obj 'getdynamicblockproperties)
)
);defun http://www.theswamp.org/index.php?topic=22663.0

(defun getdynpropvalue (obj name / v)
(cdr (assoc name
   (mapcar '(lambda (x)
               (if (setq v (vlax-variant-value (vla-get-value x)))
               (cons (vla-get-propertyname x) v)))
   (vlax-invoke obj 'getdynamicblockproperties))))
);defun
页: [1]
查看完整版本: 角度变量问题