这是我以前贴的,但不知道放哪里了,再贴一下。

- [FONT=courier new]
- ;;;波浪线绘制程序
- ;;;作者:张越 03.11.13
- (defun c:blx (/ boch pt pt1 pt2 pt3 dist lis ang0 ang)
- (SETQ OLDOS (GETVAR "OSMODE"))
- (if (= bofu nil)
- (setq bofu1 20)
- )
- (if (= bochang nil)
- (setq bochang1 50)
- )
- (if (/= (setq oldcmd (getvar "cmdecho")) 0)
- (setvar "cmdecho" 0)
- )
- (prompt "\n请输入波幅<")
- (princ bofu1)
- (if (= (setq bofu (getreal ">:")) nil)
- (setq bofu bofu1)
- (setq bofu1 bofu)
- )
- (prompt "\n请输入波长<")
- (princ bochang1)
- (if (= (setq bochang (getreal ">:")) nil)
- (setq bochang bochang1)
- (setq bochang1 bochang)
- )
- (initget "Yes No")
- (setq id (getkword "\n是否重新计算波长?Yes <No>:"))
- (if (= id nil)
- (setq id "No")
- )
- (if (setq pt1 (getpoint "\n开始画波浪线(回车退出):"))
- (progn
- (while (setq pt2 (getpoint pt1 "\n下一点(回车退出):"))
- (setq dist (distance pt1 pt2))
- (setq ang0 (angle pt1 pt2))
- (setq n (fix (/ dist bochang)))
- (while (= n 0)
- (prompt "\n该段长度比波长小,请重新输入:")
- (setq pt2 (getpoint pt1 "\n下一点(回车退出):"))
- (if (/= pt2 nil)
- (progn
- (setq dist (distance pt1 pt2))
- (setq ang0 (angle pt1 pt2))
- (setq n (fix (/ dist bochang)))
- )
- (setq n nil)
- )
- )
- (if (/= pt2 nil)
- (progn
- (if (= id "No")
- (setq boch (/ bochang 4))
- (setq boch (/ dist (* n 4)))
- )
- (setq dist (sqrt (+ (* boch boch) (* bofu bofu))))
- (setq lis (list (atan bofu boch)
- (- 0 (atan bofu boch))
- (- 0 (atan bofu boch))
- (atan bofu boch)
- )
- )
- (setq pt3 pt1)
- (IF (< (- OLDOS 16384) 0)
- (SETVAR "OSMODE" (+ OLDOS 16384))
- )
- (command "spline" pt1)
- (repeat n
- (foreach ang lis
- (setq pt (polar pt3 (+ ang0 ang) dist))
- (setq pt3 pt)
- (command pt)
- )
- )
- (command "" "" "")
- (setq pt1 pt)
- (SETVAR "OSMODE" OLDOS)
- )
- )
- )
- )
- )
- (SETVAR "OSMODE" OLDOS)
- (setvar "cmdecho" OLDCMD)
- )
- [/FONT]
|