明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2083|回复: 9

求高手做一个有点搞的转换lsp程序

[复制链接]
发表于 2012-12-6 10:59:09 | 显示全部楼层 |阅读模式
要求如下,有一段长度为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程序,谢谢了!


该贴已经同步到 穿越的兔子889的微博
发表于 2012-12-6 11:30:42 | 显示全部楼层
  1. (defun dg (x)
  2.   (+ (fix x)
  3.      (cond ((<= (rem x 1) 0.25) 0.0)
  4.      ((>= (rem x 1.0) 0.75) 1.0)
  5.      (t 0.5)
  6.      )
  7.   )
  8. )
发表于 2012-12-6 11:43:25 | 显示全部楼层
游客,本帖隐藏的内容需要发帖数高于 2 才可浏览,你当前发帖数只有 0
 楼主| 发表于 2012-12-6 11:45:11 | 显示全部楼层
(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)
)
我用这段代码,好像有错误啊,请看看是什么问题
发表于 2012-12-6 11:56:03 | 显示全部楼层
穿越的兔子889 发表于 2012-12-6 11:45
(defun dg (x)  
(+ (fix x)     
(cond ((= (rem x 1.0) 0.75) 1.0)     

试过了,没什么问题啊,结果是正确的,符合你的要求。
 楼主| 发表于 2012-12-6 12:02:37 | 显示全部楼层
(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))
)
)

原代码在这里,我就是想加在这里面的,结果加了代码进去就显示错误
 楼主| 发表于 2012-12-6 12:10:33 | 显示全部楼层
(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)
     )
  )
)

加进去以后的完整代码如上所示,显示函数错误
发表于 2012-12-6 12:31:13 | 显示全部楼层
;...
(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))
;...
 楼主| 发表于 2012-12-6 13:30:01 | 显示全部楼层
ZZXXQQ 发表于 2012-12-6 12:31
;...
(setq l (- (vlax-curve-getDistAtParam a n)
               (vlax-curve-getDistAtParam a (1- n ...

已经可以了,非常感谢!
发表于 2012-12-6 15:32:55 | 显示全部楼层
(defun Rd05 (x)
  (/ (fix (+ (* x 2) 0.5)) 2.0)
)

点评

长老大作,简洁、犀利啊!  发表于 2012-12-6 16:47
(defun rd05 (x) (/ (fix (+ x x 0.5)) 2.0));加法比乘法快  发表于 2012-12-6 16:43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-4 02:09 , Processed in 0.202526 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表