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)
) 展开
如果是别的值时不保留小数。但是程序不稳定,当修改%%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)
) 展开
2个回答
展开全部
将(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)
)
改为(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)
)
追问
十分感谢,能告知我失败的原因吗。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询