找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 897|回复: 6

[求助] [求助]:条件判断语句怎么写???

[复制链接]
发表于 2006-10-25 15:30:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
想写一个拉管口件号的程序,可是不知道怎么用条件判断,急,希望高手指点.
下面是错误的程序,高手请指点一下错在哪?

(defun c:gkh()
(command "cmdecho" 0 )
(command "osnap" "none")
(setq ds(getvar "dimscale"))
(setq p1(getpoint "\n     起始点"))
(setq pp(getpoint "\n     管口的方向"))
(setq nn(getint "\n    连件的数量"))
(setq cd(* 12 ds))
(setq zh(* 6  ds))
(setq anglee(angle p1 pp))
(setq pi4(/ pi 4))
  (defun anglee (anglee)
   (if (and (> anglee pi4) (<= anglee (* 3 pi4)))
      (setq p2(list (car p1) (cadr pp)))
      (setq p3(list (car p1) (+ (cadr p2) zh)))
      (setq p4(list (+ (car p3) zh) (cadr p3)))
      (setq p5(list (- (car p3) zh) (cadr p3)))
      (command "line" p1 p2 "")
      (command "cirle" p3 zh)
      (command "line" p4 p5 "")
                (while (< nn 1)
                   (setq p3(list (car p3) (+ (cadr p3) cd)))
                   (setq p4(list (car p4) (+ (cadr p4) cd)))
                   (setq p5(list (car p5) (+ (cadr p5) cd)))
                   (command "cirle" p3 zh)
                   (command "line" p4 p5 "")
                   (setq nn(1- nn))
                  )
     );;从45到135度范围内的管口号。

   (if (and (> anglee (* 3 pi4)) (<= anglee (* 5 pi4)))
      (setq p2(list (car pp) (cadr p1)))
      (setq p3(list (- (car p2) zh) (cadr p2)))
      (setq p4(list (- (car p3) zh) (cadr p3)))
      (setq p5(list (car p2) (cadr p2)))
      (command "line" p1 p2 "")
      (command "cirle" p3 zh)
      (command "line" p4 p5 "")
                (while (< nn 1)
                   (setq p3(list (- (car p3) cd) (cadr p3)))
                   (setq p4(list (- (car p4) cd) (cadr p4)))
                   (setq p5(list (- (car p5) cd) (cadr p5)))
                   (command "cirle" p3 zh)
                   (command "line" p4 p5 "")
                   (setq nn(1- nn))
                  )
     );;从135到225度范围内的管口号。

   (if (and (> anglee (* 5 pi4)) (<= anglee (* 7 pi4)))
      (setq p2(list (car p1) (cadr pp)))
      (setq p3(list (car p1) (- (cadr p2) zh)))
      (setq p4(list (+ (car p3) zh) (cadr p3)))
      (setq p5(list (- (car p3) zh) (cadr p3)))
      (command "line" p1 p2 "")
      (command "cirle" p3 zh)
      (command "line" p4 p5 "")
                (while (< nn 1)
                   (setq p3(list (car p3) (- (cadr p3) cd)))
                   (setq p4(list (car p4) (- (cadr p4) cd)))
                   (setq p5(list (car p5) (- (cadr p5) cd)))
                   (command "cirle" p3 zh)
                   (command "line" p4 p5 "")
                   (setq nn(1- nn))
                  )
     );;从225到315度范围内的管口号。

   (if (or (> anglee pi4) (<= anglee (* 7 pi4)))
      (setq p2(list (car pp) (cadr p1)))
      (setq p3(list (+ (car p2) zh) (cadr p2)))
      (setq p4(list (+ (car p3) zh) (cadr p3)))
      (setq p5(list (car p2) (cadr p2)))
      (command "line" p1 p2 "")
      (command "cirle" p3 zh)
      (command "line" p4 p5 "")
                (while (< nn 1)
                   (setq p3(list (+ (car p3) cd) (cadr p3)))
                   (setq p4(list (+ (car p4) cd) (cadr p4)))
                   (setq p5(list (+ (car p5) cd) (cadr p5)))
                   (command "cirle" p3 zh)
                   (command "line" p4 p5 "")
                   (setq nn(1- nn))
                  )
     ));;从45到-45度范围内的管口号。
  (command  "OSNAP" "MID,CEN,END,PERP,INT")
  )
     
cad提示的错误是命令: ; 错误: 参数太多: (IF (AND (> ANGLEE PI4) (<= ANGLEE (* 3 PI4))) (SETQ P2
(LIST (CAR P1) (CADR PP))) (SETQ P3 (LIST (CAR P1) (+ (CADR P2) ZH))) (SETQ P4
(LIST (+ (CAR P3) ZH) (CADR P3))) (SETQ P5 (LIST (- (CAR P3) ZH) (CADR P3)))
(COMMAND "line" P1 P2 "") (COMMAND "cirle" P3 ZH) (COMMAND "line" P4 P5 "")
(WHILE (< NN 1) (SETQ P3 (LIST (CAR P3) (+ (CADR P3) CD))) (SETQ P4 (LIST (CAR
P4) (+ (CADR P4) CD))) (SETQ P5 (LIST (CAR P5) (+ (CADR P5) CD))) (COMMAND
"cirle" P3 ZH) (COMMAND "line" P4 P5 "") (SETQ NN (1- NN))))


不胜感谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 7233个

财富等级: 富甲天下

发表于 2006-10-25 17:01:25 | 显示全部楼层
(if (and (> anglee pi4) (<= anglee (* 3 pi4)))
      (setq p2 (list (car p1) (cadr pp)))
      .
      .
      .
        (setq nn (1- nn))
      )
    )
   
    ====>
    (if (and (> anglee pi4) (<= anglee (* 3 pi4)))
      (progn      ; 加  <===
      (setq p2 (list (car p1) (cadr pp)))
      .
      .
      .
        (setq nn (1- nn))
      )
    );progn     加 <====
    )
   
    &下同
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2006-10-25 17:09:32 | 显示全部楼层
方法一:用 If 函数,将判断条件对半分开:
  1. (if a
  2.   (if b1
  3.     (c1)
  4.     (c2)
  5.   )
  6.   (if b2
  7.     (c3)
  8.     (progn                ;执行函数条目不只是一条时
  9.       (c4)
  10.       ....
  11.     )
  12.   )
  13. )


方法二:使用 cond 函数:
  1. (cond
  2.   (条件1 ...)
  3.   (条件2 ...)
  4.   ...
  5.   (t ...)
  6. )
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-25 18:46:08 | 显示全部楼层
谢谢了,2楼的试过了,非常好,解决了.
(defun c:gkh(/ ds p1 pp nn old p2 p3 p4 p5)
(command "cmdecho" 0 )

(setq ds(getvar "dimscale"))
(setq p1(getpoint "\n     起始点"))
(setq pp(getpoint "\n     管口的方向"))
  (setq old (getvar "osmode"))
(setvar "osmode" 0)   ;去掉捕捉
(setq nn(getint "\n    连件的数量"))

(setq cd(* 12 ds))
(setq zh(* 6  ds))
(setq anglee(angle p1 pp))



   (setq p2(list (car pp) (cadr pp)))
     (setq p3(polar p2 anglee zh))
      (setq p4(list (+ (car p3) zh) (cadr p3)))
      (setq p5(list (- (car p3) zh) (cadr p3)))
      (command "line" p1 p2 "")
      (command "circle" p3 zh)
      (command "line" p4 p5 "")
                (while (> nn 1)
                   (setq p3(polar p3 anglee cd))
                  (setq p4(polar p4 anglee cd))
                   (setq p5(polar p5 anglee cd))
                   (command "circle" p3 zh)
                   (command "line" p4 p5 "")
                   (setq nn(1- nn))
                 
   (setvar "cmdecho" 1)
    (setvar "osmode" old);恢复捕捉
    (princ)
  ))
(prompt "*************** 用快捷键gkh运行 *****************")

(prin1)

这是拉任意方向的管口号.谢谢了.
就是捕捉太讨厌了,在输入点的时候需要捕捉精确,但是这样的话,画出来的图形可能不对,真是一个矛盾??
高手是怎么解决的??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2006-10-25 20:40:34 | 显示全部楼层
;;;试试看--->当连件的数量为20时,当...比较有何不同。

(defun c:gkh(/ ds old oldblip p1 pp nn  p2 p3 p4 p5)
(command "cmdecho" 0 )

(setq ds(getvar "dimscale"))
(setq old (getvar "osmode"))
(setq oldblip (getvar "BLIPMODE"))
(setvar "BLIPMODE" 1)
(setvar "osmode" 1)
(setq p1 (getpoint "\n 起始点:"))
(setq pp(getpoint "\n 管口的方向:"))
(setvar "osmode" 0) ;去掉捕捉
(setq nn(getint "\n 连件的数量:"))

(setq cd(* 12 ds))
(setq zh(* 6 ds))
(setq anglee(angle p1 pp))

(setq p2(list (car pp) (cadr pp)))
(setq p3(polar p2 anglee zh))
(setq p4(list (+ (car p3) zh) (cadr p3)))
(setq p5(list (- (car p3) zh) (cadr p3)))
(command "line" p1 p2 "")
(command "circle" p3 zh)
(command "line" p4 p5 "")
(while (> nn 1)        
(setq p3(polar p3 anglee cd))
(setq p4(polar p4 anglee cd))
(setq p5(polar p5 anglee cd))
(command "circle" p3 zh)
(command "line" p4 p5 "")
(setq nn(- nn 1))  

(setvar "cmdecho" 1)
(setvar "osmode" old);恢复捕捉
(setvar "BLIPMODE" oldblip)

(princ)
))
(prompt "*************** 用快捷键gkh运行 *****************")

(prin1)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-25 20:52:39 | 显示全部楼层
BLIPMODE是什么意思,有什么用.
加上以后情况是好些,但是还是有时候不能画的好.特别是比较少的时候.
谢谢你
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-26 13:59:35 | 显示全部楼层
BLIPMODE 系统变量   

类型:  整数
保存位置:  注册表
初始值:  0

控制点标记是否可见。 BLIPMODE 既是命令又是系统变量。 使用 SETVAR 命令访问此变量。

0:关闭点标记
1:打开点标记
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 04:46 , Processed in 0.355436 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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