lisp和CAD高手,速救呀!帮我看看下面的代码。

下面的代码是:如果直径标注为2.5或3.5或4.5时保留一位小数修改成M2.5或M3.5或M4.5如果是别的值时不保留小数。但是程序不稳定,当修改%%C4.5时,有时是M... 下面的代码是:如果直径标注为2.5或3.5或4.5时保留一位小数修改成M2.5或M3.5或M4.5
如果是别的值时不保留小数。但是程序不稳定,当修改%%C4.5时,有时是M4.5有时是
M4。到底是什么原因。
(defun c:am ( )
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq sl1 (ssget '((0 . "DIMENSION"))))
(setq e1 (ssname sl1 0 ))
(setq elist1 (entget e1))
(setq rn (cdr (assoc 42 elist1)))
(if (or (= rn 2.5) (= rn 3.5) (= rn 4.5))
(setq tt1(rtos rn 2 1))
(setq tt1 (rtos rn 2 0))
)
(setq tt2 (cdr (assoc 1 elist1)))

(if (= "" tt2)
(setq tt2 tt1)
(setq tt2 tt2 )
)
(setq tt3 (strcat "M" tt2))
(setq elist1 (subst (cons 1 tt3) (assoc 1 elist1 ) elist1 ))
(entmod elist1 )
(princ)
)
展开
 我来答
dnbc1
2012-03-23 · TA获得超过978个赞
知道小有建树答主
回答量:1235
采纳率:92%
帮助的人:410万
展开全部
将(if (or (= rn 2.5) (= rn 3.5) (= rn 4.5))
改为(if (or (equal rn 2.5 1e-3) (equal rn 3.5 1e-3) (equal rn 4.5 1e-3))
其实要加前缀,可以改标注样式,或用以下程序
(defun c:ccc()
(vl-load-com)
(if (setq sl1 (ssget '((0 . "DIMENSION"))))
(progn
(setq n (sslength sl1)
i 0
)
(repeat n
(setq obj (vlax-ename->vla-object (ssname sl1 i))
i (1+ i)
)
(vla-put-TextPrefix obj "M")
(vla-update obj)
)
)
)
(princ)
)
追问
十分感谢,能告知我失败的原因吗。
hanjiafu2005
2012-03-23 · TA获得超过3838个赞
知道小有建树答主
回答量:1371
采纳率:90%
帮助的人:458万
展开全部
(< abs(m-4.5) 0.000001)
不要用等号判断。计算机里面没有精确的4.5的。
追问
你好,感谢你的回答 ,我在别的程序里面用“=”函数很稳定呀,能不能再详细点,再深入点,继续等呀,高手们来逛逛呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式