songyuan 发表于 2003-5-28 14:56:00

请各位高手英雄赐教,不胜感激!

紧急!!!请问有谁能帮帮我解决这样一个问题,多谢!
我设计的一个程序中,出现这样的一个情况,就是前面我定义了3五个YES和NO的选择,既是让操作者选择Y和N,但是我的这个程序在现实中是不允许全部都选择N的,所以,我想请教各位高手,能不能教我用AUTOLISP定义一个这样的函数,每出现一次N,这个变量就自加1,当这个变量等于一个数,比如说自加到3时,就提示错误,并重新做开始说到的那3个Y或N的选择。用C语言我会编写,但是我才开始用AUTOLISP没有多久,很是菜,所以请各位高手赐教,不胜感谢。
   我用while不知道该怎么在以下这段程序中实现???

;插入断路器隔离开关串1
(defun inchuanABC ()
(command "layer" "s" "breaker" "")
(prompt "\n注意!!!在选择断路器串类型时不能全部为“N”!!! ")
(initget 3 "Y y n N")
(setq answerA (getkword "\n需要完整串吗?(Y/N): "))
(if (= answerA "Y")
   (progn
    (setq nct (getint "\n请输入完整串个数:"))
    (prompt "请在母线W1的上找完整串的插入基点: ")
    (repeat nct
   (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
   (command "insert" "c:\\song\\c6.dwg" p22 bl bl "" "")
    )
   )
)
;插入断路器隔离开关串2
(initget 3 "Y y n N")
(setq answerB (getkword "\n需要上部串吗?(Y/N): "))
(if (= answerB "Y")
   (progn
    (setq nct (getint "\n请输入上部串个数:"))
    (prompt "请在母线W1的上找上部串的插入基点: ")
    (repeat nct
   (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
   (command "insert" "c:\\song\\c9.dwg" p22 bl bl "" "")
    )
   )
)
;插入断路器隔离开关串
(initget 3 "Y y n N")
(setq answerC (getkword "\n需要下部串吗?(Y/N): "))
(if (= answerC "Y")
   (progn
    (setq nct (getint "\n请输入下部串个数:"))
    (prompt "\n请在母线W1的上找下部串的插入基点: ")
    (repeat nct
   (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
   (command "insert" "c:\\song\\c10.dwg" p22 bl bl "" "")
    )
   )
)
)

Taoyimaier 发表于 2003-5-28 19:22:00

不知道能不能给你帮助,

你可以用一个用户系统变量useri1来保存或者在程序中用一个非局部变量(就是在定义函数时不要声明)来保存这个值,函数开始时初始化它为零,让后判断如果选择的时n,则自增,当达到3时将这个变量重置为零,让后用流程控制,让他从新开始,这样的问题,应该不会太难吧,自己应该可以解决的

王咣生 发表于 2003-5-29 09:34:00

answer

;用一个临时变量控制,试试吧

;插入断路器隔离开关串1
(defun inchuanABC ( / num)
(command "layer" "s" "breaker" "")
(prompt "\n注意!!!在选择断路器串类型时不能全部为“N”!!! ")
(setq num 0)
(initget 3 "Y y n N")
(setq answerA (getkword "\n需要完整串吗?(Y/N): "))
(if (or (= answerA "N") (= answerA "n"))
    (setq num (+ num 1))
)
(if (= answerA "Y")
   (progn
    (setq nct (getint "\n请输入完整串个数:"))
    (prompt "请在母线W1的上找完整串的插入基点: ")
    (repeat nct
   (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
   (command "insert" "c:\\song\\c6.dwg" p22 bl bl "" "")
    )
   )
)

;插入断路器隔离开关串2
(initget 3 "Y y n N")
(setq answerB (getkword "\n需要上部串吗?(Y/N): "))
(if (or (= answerB "N") (= answerB "n"))
    (setq num (+ num 1))
)
(if (= answerB "Y")
   (progn
    (setq nct (getint "\n请输入上部串个数:"))
    (prompt "请在母线W1的上找上部串的插入基点: ")
    (repeat nct
   (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
   (command "insert" "c:\\song\\c9.dwg" p22 bl bl "" "")
    )
   )
)

;插入断路器隔离开关串
(initget 3 "Y y n N")
(setq answerC (getkword "\n需要下部串吗?(Y/N): "))
(if (or (= answerC "N") (= answerC "n"))
    (setq num (+ num 1))
)

(alert (rtos num))
(if (and (= answerC "Y") (< num 3))
   (progn
    (setq nct (getint "\n请输入下部串个数:"))
    (prompt "\n请在母线W1的上找下部串的插入基点: ")
    (repeat nct
   (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
   (command "insert" "c:\\song\\c10.dwg" p22 bl bl "" "")
    )
   )
)
(if (= num 3)
    (progn
      (alert "不允许全部都选择N,请重新选择!")
      (setq num 0)
      (inchuanABC)
    )
)
)

songyuan 发表于 2003-5-29 13:19:00

致谢!!

songyuan 发表于 2003-5-29 13:22:00

致谢!!

在各位大虾的帮助下,小弟顺利解决了我程序的问题,在这里特别向帮助过本人的各位道谢了!!你们在百忙中抽出时间不厌其烦地帮助我,我真是感激不尽
页: [1]
查看完整版本: 请各位高手英雄赐教,不胜感激!