本帖最后由 bzhyong 于 2017-12-9 09:24 编辑
如下,while可以实现这个功能,但是repeat命令就显示数据类型错误?
这是为什么呢?虽然我现在已经用while实现了同样的功能,仍然想求高手指导为何repeat不行
代码功能是选择两个圆弧。把两个圆弧都均分n分,然后用n个直线相连。

- (defun c:chul1()
- (setvar "osmode" 0)
- (setvar "cmdecho" 0)
- (setvar "blipmode" 0)
- (setq en1 (entsel "选择第一个圆弧:"))
- (setq en2 (entsel "选择第二个圆弧:"))
- (setq en1_data (entget (car en1)));获得第一个圆弧串行
- (setq en2_data (entget (car en2)));获得第二个圆弧串行
- (setq rr (getint "\n输入等分数量<150>"))
- (if (null rr) (setq rr 150.0))
- (setq rr1 (cdr (assoc 40 en1_data)));获得第一个圆弧半径
- (setq rr2 (cdr (assoc 40 en2_data)));获得第二个圆弧半径
- (setq ang1 (cdr (assoc 50 en1_data)));获得第一个圆弧起始角度
- (setq ang2 (cdr (assoc 50 en2_data)));获得第二个圆弧起始角度
- (setq ang3 (cdr (assoc 51 en1_data)));获得第一个圆弧终止角度
- (setq ang4 (cdr (assoc 51 en2_data)));获得第二个圆弧终止角度
- (setq ang5 (/ (- ang3 ang1) rr))
- (setq ang6 (/ (- ang4 ang2) rr))
- (setq l1 (* 2 (* rr1 (sin (/ 2 (* 180 (/ ang5 pi)))))))
- (setq l2 (* 2 (* rr2 (sin (/ 2 (* 180 (/ ang6 pi)))))))
- (setq pto1 (cdr (assoc 10 en1_data)));获得第一个圆弧圆心坐标
- (setq pto2 (cdr (assoc 10 en2_data)));获得第二个圆弧圆心坐标
- (setq en1_1 (polar pto1 ang1 rr1));获得第一个圆弧起点坐标
- (setq en2_1 (polar pto2 ang2 rr2));获得第二个圆弧起点坐标
- (command "line" en1_1 en2_1 "")
- ;;;(setq en1_2 (polar pto1 (+ ang1 ang5) rr1));测试
- ;;;(setq en2_2 (polar pto2 (+ ang2 ang6) rr2))
- ;;;(command "line" en1_2 en2_2 "")
- (setq ang1_x ang1)
- (setq ang2_x ang2)
- (setq en1_x en1_1)
- (setq en2_x en2_1)
- (setq snum -1)
- (while (< snum rr)
- (setq en1_x (polar pto1 ang1_x rr1))
- (setq en2_x (polar pto2 ang2_x rr2))
- (command "line" en1_x en2_x "")
- (setq ang1_x (+ ang1_x ang5))
- (setq ang2_x (+ ang2_x ang6))
- (setq snum (1+ snum)
- )
- )
-
- ;(repeat rr
- ; (setq en1_x (polar pto1 ang1_x rr1))
- ;(setq en2_x (polar pto2 ang2_x rr2))
- ;(command "line" en1_x en2_x "")
- ;(setq ang1_x (+ ang1_x ang5))
- ;(setq ang2_x (+ ang2_x ang6))
- ; )
-
- (princ)
- )
- (prompt "\n <<chul1>>")
- (prin1)
|