明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1658|回复: 3

请问个位大哥。这个程序该怎么改

[复制链接]
发表于 2003-12-2 22:15:00 | 显示全部楼层 |阅读模式
我要编一个将椭圆转换为弧段。
写了两个程序,想合并一下,但这两个程序都错误的,又不知道哪里错了
各位大哥能帮我看一下吗
(dufun c:w1()
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
(setq p0 (getpoint "p0=" ))
(setq a (getreal "长半径a="))
(setq b (getreal "短半径b="))
(setq alf 0 alfk(*5 0.0174533))
(setq p(list(+(car p0)a)(cadr p0)))
   (while (<=alf(+(*2pi)0.1))
   (setq px(+(car p0)(*a(cos alf))))
   (setq py(+(cadr p0)(*b (sin alf))))
   (setq pk (list px py))
   (command "line" p pk "")
   (setq p pk)
   (setq alf (+alf alfk))
  )
(setq pw1(list(+(car p0)a 1)(+(cadr p0)b 1)))
(setq pw2(list(-(car p0)a 1)(-(cadr p0)b 1)))
(command "hatch" "u"45(/a 10)" ""w" pw1 pw2 "")
(setvar "blipmode" 1)
(setvar "cmdecho" 1)
)
第2个
(defun c:w2()
   (setvar “blipmode” 0)
   (setvar “cmdecho” 0)
   (set po(getpoint” p0=”))
   (setq a (getreal “ 长半径a=”))
   (setq b (getreal “ 短半径a=”))
   (setq alfin (getreal “起始角alfin=”))
   (setq alfed (getreal “终止角alfed=”))
   (setq alfk (getreal “角度步距=”))
   (setq c 0.0174533 alfk (*alfk c))
   (setq alfin (*alfin c) alfed (+(*alfed c)0.1))
   (setq p (list (+(car p0) co)(+(cadr p0) si)))
(while (and (>=alf alfin)(<=alf alfed)))
     (setq px (+(car p0)(*a (cos alf))))
     (setq py (+(cadr p0)(*b (sin alf))))
     (setq pk (list px py))
     (command “pline “p pk””)
     (setq p pk)
     (setq alf (+alf alfk))
)
(setvar “blipmode”))
(setvar “cmdecho”))
)
发表于 2003-12-3 00:02:00 | 显示全部楼层
两个程序都有的问题:
数相乘时,乘号“*”后面应该分隔符。

第一个程序:
第一行:(dufun c:w1()中的dufun应为defun.
(while (<=alf(+(*2pi)0.1))中的(*2pi)应该为(* 2 pi),前面的<=后面应该有空格。

第二个程序:
在程序中出现的引号,应该用英文的引号,如",而不是“或”。在(while (and (>=alf alfin)(<=alf alfed)))最后面“)”是不是不应该要了?
在 (setvar “blipmode”))和 (setvar “cmdecho”))后面也多了“)”:)

具体的内容没有仔细看。
发表于 2003-12-3 08:26:00 | 显示全部楼层
把系統變量Pellipse改為1後畫出的椭圆转换为弧段了.
发表于 2003-12-3 17:50:00 | 显示全部楼层
第一个程序修改后为
(defun c:w1()
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq p0 (getpoint "p0="))
  (setq a (getreal "长半径a="))
  (princ)
  (setq b (getreal "短半径b="))
  (princ)
  (setq        alf  0.0
        alfk (* 5 0.0174533)
  )
  (setq p (list (+ (car p0) a) (cadr p0)))
  (while (<= alf (+ (* 2 pi) 0.1))
    (setq px (+ (car p0) (* a (cos alf))))
    (setq py (+ (cadr p0) (* b (sin alf))))
    (setq pk (list px py))
    (command "line" p pk "")
    (setq p pk)
    (setq alf (+ alf alfk))
  )
  (setq pw1 (list (+ (car p0) a 1) (+ (cadr p0) b 1)))
  (setq pw2 (list (- (car p0) a 1) (- (cadr p0) b 1)))
  (command "hatch" "u" 45 (/ a 10) "" "w" pw1 pw2 "")
  (setvar "blipmode" 1)
  (setvar "cmdecho" 1)
)
第二个程序修改后为
(defun c:w2 ()
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq p0 (getpoint "p0="))
  (setq a (getreal "长半径a="))
  (setq b (getreal "短半径b="))
  (setq alfin (getreal "起始角alfin="))
  (setq alfed (getreal "终止角alfed="))
  (setq alfk (getreal "角度步距="))
  (setq        c    0.0174533
        alfk (* alfk c)
  )
  (setq        alfin (* alfin c)
        alfed (+ (* alfed c) 0.1)
        alf   (+ alfin alfk)
  )
  (setq p (list (+ (car p0) a) (cadr p0)))
  (while (and (>= alf alfin)
              (<= alf alfed)
         )
    (setq px (+ (car p0) (* a (cos alf))))
    (setq py (+ (cadr p0) (* b (sin alf))))
    (setq pk (list px py))
    (command "pline" p pk "")
    (setq p pk)
    (setq alf (+ alf alfk))
  )
  (setvar "blipmode" 1)
  (setvar "cmdecho" 1)
)
犯的毛病都跟我以前都一样,比如丢字了,少参数,还有变量没有赋值使用。其实掉字最讨厌了。刚才第二个程序中有(set po(getpoint” p0=”))。这里set掉了q编译就出问题。往往我们没有想到会在这里出问题,真是要气死人的。尤其最后改回系统变量blipmode和cmdecho把值掉了。不过,不要担心,很快就会好的。因为熟悉了,犯这样错误的几率小了,而且自己也知道怎么找了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 08:32 , Processed in 0.199643 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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