求高手做一个有点搞的转换lsp程序
要求如下,有一段长度为L的线段,精度为小数点后一位,如果L的小数尾数为0,1或2,则小数尾数取0;如果小数尾数为3,4,5,6或7则小数尾数取5;如果小数尾数为8或9,则自动进1,小数尾数仍然取0.
打个比方,如果是12.0,12.1,12.2,则该数取值为12.0;
如果是12.3,12.4,12.5,12.6,12.7,则该数取值为12.5;
如果是12.8,12.9,则该数取值为13.0
有点搞,希望高手能解答,做一段lsp程序,谢谢了!
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 穿越的兔子889的微博 (defun dg (x)
(+ (fix x)
(cond ((<= (rem x 1) 0.25) 0.0)
((>= (rem x 1.0) 0.75) 1.0)
(t 0.5)
)
)
)
;线长调整 明经 ZZXXQQ 2012.12.6
(defun c:tt ()
(if (and (princ "\n选择直线 :") (setq ss (ssget '((0 . "LINE"))))) (progn
(setq i -1)
(repeat (sslength ss)
(setq ent (entget (ssname ss (setq i (1+ i))))
p1 (cdr(assoc 10 ent))
p2 (cdr(assoc 11 ent))
dt (distance p1 p2)
ddt (/ (fix (+ dt dt 0.5)) 2.0)
p2 (polar p1 (angle p1 p2) ddt))
(entmod (subst (cons 11 p2) (assoc 11 ent) ent))
)
))
(princ)
)
(defun dg (x)
(+ (fix x)
(cond ((<= (rem x 1) 0.25) 0.0)
((>= (rem x 1.0) 0.75) 1.0)
(t 0.5)
)
)
)
(defun c:pljl1 (l)
dg(l)
)
我用这段代码,好像有错误啊,请看看是什么问题 穿越的兔子889 发表于 2012-12-6 11:45 static/image/common/back.gif
(defun dg (x)
(+ (fix x)
(cond ((= (rem x 1.0) 0.75) 1.0)
试过了,没什么问题啊,结果是正确的,符合你的要求。
(defun c:pljl1 (/ ll)
(setvar "cmdecho" 0)
(setq ffn (getfiled "选取文件" "" "doc" 1))
(setq ff (open ffn "w"))
(close ff)
(if (= bl1 nill) (setq bl1 1.0))
(setq bls (rtos bl1 2 1))
(setq blss (strcat "\n请输入图纸比例<" bls">:"))
(setq bl (getreal blss))
(if (= bl nill) (setq bl bl1 ))
(setq bl1 bl)
(princ "\n选择多义线")
(setq ss (ssget))
(setq i 0)
(setvar "pdmode" 33)
(repeat (sslength ss)
(setq ssn (ssname ss i))
(setq a ssn)
(setq num (cdr (assoc 90 (entget a))) n 1)
(setq FF (open FFN "a"))
(while (< n num)
(setq l (- (vlax-curve-getDistAtParam a n)
(vlax-curve-getDistAtParam a (1- n)))
n (1+ n)
l (/ l bl)
l (rtos l 2 1)
l (dg(l))
)
(princ l ff)
(princ " " FF)
)
(princ "\n" ff)
(close ff)
(setq i (1+ i))
)
)
原代码在这里,我就是想加在这里面的,结果加了代码进去就显示错误 (defun c:pljl1 (/ ll)
(setvar "cmdecho" 0)
(setq ffn (getfiled "选取文件" "" "doc" 1))
(setq ff (open ffn "w"))
(close ff)
(if (= bl1 nill) (setq bl1 1.0))
(setq bls (rtos bl1 2 1))
(setq blss (strcat "\n请输入图纸比例<" bls">:"))
(setq bl (getreal blss))
(if (= bl nill) (setq bl bl1 ))
(setq bl1 bl)
(princ "\n选择多义线")
(setq ss (ssget))
(setq i 0)
(setvar "pdmode" 33)
(repeat (sslength ss)
(setq ssn (ssname ss i))
(setq a ssn)
(setq num (cdr (assoc 90 (entget a))) n 1)
(setq FF (open FFN "a"))
(while (< n num)
(setq l (- (vlax-curve-getDistAtParam a n)
(vlax-curve-getDistAtParam a (1- n)))
n (1+ n)
l (/ l bl)
l (rtos l 2 1)
l (dg (l))
)
(princ l ff)
(princ " " FF)
)
(princ "\n" ff)
(close ff)
(setq i (1+ i))
)
)
(defun dg (x)
(+ (fix x)
(cond ((<= (rem x 1) 0.25) 0.0)
((>= (rem x 1.0) 0.75) 1.0)
(t 0.5)
)
)
)
加进去以后的完整代码如上所示,显示函数错误 ;...
(setq l (- (vlax-curve-getDistAtParam a n)
(vlax-curve-getDistAtParam a (1- n)))
n (1+ n)
l (dg(/ l bl))
l (rtos l 2 1))
;... ZZXXQQ 发表于 2012-12-6 12:31 static/image/common/back.gif
;...
(setq l (- (vlax-curve-getDistAtParam a n)
(vlax-curve-getDistAtParam a (1- n ...
已经可以了,非常感谢! (defun Rd05 (x)
(/ (fix (+ (* x 2) 0.5)) 2.0)
)
页:
[1]