songyuan 发表于 2003-5-31 10:15:00

谁能帮我看看这段程序?问题出现在什么地方?

我编写了一段程序,意在实现选择开启鸟瞰器。在下面的这段程序中,是可以实现这一目的的
;开启鸟瞰器
(defun viewer ()
    (setq num 0)
    (initget 3 "Y y n N")
    (setq gcanswer (getkword "\n需要开启鸟瞰图帮助插入吗?(Y/N): "))
    (if (or (= gcanswer "Y") (= gcanswer "y"))
      (setq num (+ num 1))
    )
    (if (= gcanswer "Y")
       (progn
          (command "dsviewer" "on" "")
       )
    )
)
;选择插入发电机组类型
;选择发电机串1
(defun fadian ()
(command "layer" "s" "linein" "")
(alert "接下操作为选择插入发电机组")
(alert "注意!以下至少要选择一种插入类型的发电机组,即不能全选“N”!!!")
(setq num 0)
(initget 3 "Y y n N")
(setq answerGX (getkword "\n需要插入点在下部的发电机组吗?(Y/N): "))
(if (or (= answerGX "N") (= answerGX "n"))
      (setq num (+ num 1))
)
(if (= answerGX "Y")
   (progn
    (setq nct (getint "\n请输入插入点在下部的发电机组串个数:"))
    (prompt "\n请在断路器隔离开关串“下部”指定插入基点: ")
    (repeat nct
   (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
   (command "insert" "c:\\song\\c7a.dwg" p22 bl bl "" "")
    )
   )
)
;选择发电机串2
(initget 3 "Y y n N")
(setq answerGS (getkword "\n需要插入点在上部的发电机组吗?(Y/N): "))
(if (or (= answerGS "N") (= answerGS "n"))
      (setq num (+ num 1))
)
(if (and (= answerGS "Y") (< num 2))
   (progn
      (setq nct (getint "\n请输入插入点在上部的发电机组串个数:"))
      (prompt "\n请在断路器隔离开关串“上部”指定插入基点: ")
      (repeat nct
         (setq p22 (getpoint "\n 请找第N个块的插入基点:"))
         (command "insert" "c:\\song\\c7b.dwg" p22 bl bl "" "")
      )
   )
)
(if (= num 2)
    (progn
       (alert "必须插入某种类型的发电机串,即不能全选择N,请重新选择!")
       (setq num 0)
       (fadian)
   )
   )
)
(defun clviewer ()
   (if (and (= gcanswer "Y") (= num 1))
   (progn
      (alert "插入任务结束,鸟瞰器关闭")
      (command "dsviewer" "off" "")
   )
    )
)
(defun C:abc ()
(viewer)
(fadian)
(clviewer)
)
   即当我只是在(viewer)和(clviewer)中间加(fadian)时,程序完全正常。但是在在下面的程序中却不能实现关闭鸟瞰器了
;开启鸟瞰器
(defun viewer ()
    (setq num 0)
    (initget 3 "Y y n N")
    (setq gcanswer (getkword "\n需要开启鸟瞰图帮助插入吗?(Y/N): "))
    (if (or (= gcanswer "Y") (= gcanswer "y"))
      (setq num (+ num 1))
    )
    (if (= gcanswer "Y")
       (progn
          (command "dsviewer" "on" "")
       )
    )
)
;请选择出线类型
(defun Xlineout ()
   (command "layer" "s" "lineout" "")
   (prompt "\n以下操作为出线串类型的选择! ")
   (alert "以下操作为出线串类型的选择!")
   (alert "注意!在选择出线串类型时请考虑周全,且不能全都选择“N”! ")
   (alert "请您慎重选择")
   (setq num 0)
;上左上出线串
   (initget 3 "Y y n N")
   (setq XanswerA (getkword "\n需向上的左侧上部出线串吗?(Y/N): "))
   (if (or (= XanswerA "N") (= XanswerA "n"))
      (setq num (+ num 1))
   )
   (if (= XanswerA "Y")
      (progn
         (setq nct (getint "\n请输上左上串个数:"))
         (prompt "请在适当的断路器隔离开关串上指定插入点: ")
            (repeat nct
            (setq p22 (getpoint "\n 请找第N个上左上串的插入基点:"))
            (command "insert" "c:\\song\\c8A.dwg" p22 bl bl "" "")
            )
       )
    )
;上左下出线串
   (initget 3 "Y y n N")
   (setq XanswerB (getkword "\n需向上的左侧下部出线串吗?(Y/N): "))
   (if (or (= XanswerB "N") (= XanswerB "n"))
      (setq num (+ num 1))
   )
   (if (= XanswerB "Y")
      (progn
         (setq nct (getint "\n请输上左下串个数:"))
         (prompt "请在适当的断路器隔离开关串上指定插入点: ")
            (repeat nct
            (setq p22 (getpoint "\n 请找第N个上左下串的插入基点:"))
            (command "insert" "c:\\song\\c8B.dwg" p22 bl bl "" "")
            )
       )
    )
;下右上出线串
   (initget 3 "Y y n N")
   (setq XanswerH (getkword "\n需向下的右侧上部出线串吗?(Y/N): "))
   (if (or (= XanswerH "N") (= XanswerH "n"))
       (setq num (+ num 1))
   )
   (if (and (= XanswerH "Y") (< num 3))
      (progn
         (setq nct (getint "\n请输下右上串个数:"))
         (prompt "请在适当的断路器隔离开关串上指定插入点: ")
            (repeat nct
            (setq p22 (getpoint "\n 请找第N个下右上串的插入基点:"))
            (command "insert" "c:\\song\\c8H.dwg" p22 bl bl "" "")
            )
       )
    )
    (if (= num 3)
      (progn
         (alert "至少要选择一种类型的串,不能全部选N,否则不符合实际情况!")
         (alert "请重新选择!")
         (setq num 0)
         (Xlineout)
         )
   )
)
(defun clviewer ()
   (if (and (= gcanswer "Y") (= num 1))
   (progn
      (alert "插入任务结束,鸟瞰器关闭")
      (command "dsviewer" "off" "")
   )
    )
)
(defun C:abc ()
(viewer)
(fadian)
(Xlineout)
(clviewer)
)

   即我在(fadian)后面又加上(Xlineout)以后,就不能实现关闭鸟瞰器了,请问大家,这个问题出现在什么地方?怎么解决

mmmmmm 发表于 2003-6-3 17:06:00

代码错了

代码错了:(command "dsviewer" "on" "")
应该改为:(command "dsviewer")

重复调用:(command "dsviewer") 可直接实现鸟瞰器的开关切换

songyuan 发表于 2003-6-3 23:42:00

你没有说对,这样起不到任何作用,同时,你没有看明白我的求助的内容

不知道你做过这样的比较不

代码错了:(command "dsviewer" "on" "")
应该改为:(command "dsviewer")

重复调用:(command "dsviewer") 可直接实现鸟瞰器的开关切换


你说的这个根本没有区别,你也没有看我的问题,问题的关键不是开跟关,而是如何控制开跟关的时间。请你先仔细读读我的求助的内容
但是,不管怎么样,还是非常感谢你对我的问题的关心,这里,谢了!

mmmmmm 发表于 2003-6-4 13:23:00

我没有图块,所以检查不了全部的代码

页: [1]
查看完整版本: 谁能帮我看看这段程序?问题出现在什么地方?