找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2693|回复: 3

[求助] [求助]:帮忙看一下程序

[复制链接]
发表于 2006-12-18 12:58:25 | 显示全部楼层 |阅读模式

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

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

×
我前面发了一个 没发成  斑竹帮忙删掉 我再发一次
问题是这样的 我用的一个lsp程序 开一张新图时 执行它 就会出现error: AutoCAD 变量设置被拒绝: "osmode" nil  然后点一下对象捕捉 就可以正常运行了 点两下也可以正常运行 我用的是cad2007 下面是程序 希望高手能够帮忙搞定这个
(defun c:lt( / x y x1 y1 pt0 hh cmd)
  (setq cmd (getvar "osmode"))
  (setvar "cmdecho" 0)
  (initget 6 "Right Left")
  (setq word (getkword "\n Left/<Right> "))
  (if (not word) (setq word "Right"))
  (if (= word "Right") (setq k 1) (setq k -1))
  (if (not hf) (setq hf 1500.0))
  (initget 6)
  (setq x (getreal (strcat "\nHight of stair <" (rtos hf 2 0) ">: ")))
  (if (/= x nil) (setq hf x))
  (if (not num) (setq num 10))
  (initget 6)
  (setq x (getint (strcat "\nNumber of stair <" (itoa num) ">: ")))
  (if (/= x nil) (setq num x))
  (if (not bs) (setq bs 250.0))
  (initget 6)
  (setq x (getreal (strcat "\nWidth of stair <" (rtos bs 2 0) ">: ")))
  (if (/= x nil) (setq bs x))
  (if (not ts) (setq ts 100.0))
  (initget 6)
  (setq x (getreal (strcat "\nThickness of stair <" (rtos ts 2 0) ">: ")))
  (if (/= x nil) (setq ts x))
  (initget 7)
  (setq pt0 (getpoint "\nPick the start point of stair: "))
  (setq x (car pt0) y (cadr pt0) x1 x y1 y hh (/ hf num))
;  (setvar "clayer" "S0")
  (repeat num
    (setq x1 (+ x1 (* k bs)) y1 (+ y1 hh))
    (command "line" (list x y) (list x y1) (list x1 y1) "")
    (setq x x1 y y1)
  )
  (setq hh (/ (* (sqrt (+ (* bs bs) (* hh hh))) ts) bs))
  (setq x (car pt0) y (- (cadr pt0) hh) y1 (- y1 hh))
  (command "line" (list x y) (list x1 y1) "")
  )
  (setvar "osmode" cmd)
; end of lout
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-12-18 13:18:50 | 显示全部楼层
问题出在最后一句(setvar "osmode" cmd)

你的意思应该是:在函数结束时把恢复系统变量设置,这一句放在DEFUN定义以内。

而你上面给出的代码写到了DEFUN定义以外,则在加载的时候就运行了这一句。
但在加载代码时,变量CMD是没有定义的,其值为nil,所以就有了
; 错误: AutoCAD 变量设置被拒绝: "OSMODE" nil[/COLOR]

修改后的代码见下:

  1.   [FONT=courier new]
  2. (defun c:lt (/ x y x1 y1 pt0 hh cmd)
  3.     (setq cmd (getvar "osmode"))
  4.     (setvar "cmdecho" 0)
  5.     (initget 6 "Right Left")
  6.     (setq word (getkword "\n Left/ "))
  7.     (if        (not word)
  8.         (setq word "Right")
  9.     )
  10.     (if        (= word "Right")
  11.         (setq k 1)
  12.         (setq k -1)
  13.     )
  14.     (if        (not hf)
  15.         (setq hf 1500.0)
  16.     )
  17.     (initget 6)
  18.     (setq x (getreal (strcat "\nHight of stair <" (rtos hf 2 0) ">: ")))
  19.     (if        (/= x nil)
  20.         (setq hf x)
  21.     )
  22.     (if        (not num)
  23.         (setq num 10)
  24.     )
  25.     (initget 6)
  26.     (setq x (getint (strcat "\nNumber of stair <" (itoa num) ">: ")))
  27.     (if        (/= x nil)
  28.         (setq num x)
  29.     )
  30.     (if        (not bs)
  31.         (setq bs 250.0)
  32.     )
  33.     (initget 6)
  34.     (setq x (getreal (strcat "\nWidth of stair <" (rtos bs 2 0) ">: ")))
  35.     (if        (/= x nil)
  36.         (setq bs x)
  37.     )
  38.     (if        (not ts)
  39.         (setq ts 100.0)
  40.     )
  41.     (initget 6)
  42.     (setq x (getreal
  43.                 (strcat "\nThickness of stair <" (rtos ts 2 0) ">: ")
  44.             )
  45.     )
  46.     (if        (/= x nil)
  47.         (setq ts x)
  48.     )
  49.     (initget 7)
  50.     (setq pt0 (getpoint "\nPick the start point of stair: "))
  51.     (setq x  (car pt0)
  52.           y  (cadr pt0)
  53.           x1 x
  54.           y1 y
  55.           hh (/ hf num)
  56.     )
  57.                                         ; (setvar "clayer" "S0")
  58.     (repeat num
  59.         (setq x1 (+ x1 (* k bs))
  60.               y1 (+ y1 hh)
  61.         )
  62.         (command "line" (list x y) (list x y1) (list x1 y1) "")
  63.         (setq x        x1
  64.               y        y1
  65.         )
  66.     )
  67.     (setq hh (/ (* (sqrt (+ (* bs bs) (* hh hh))) ts) bs))
  68.     (setq x  (car pt0)
  69.           y  (- (cadr pt0) hh)
  70.           y1 (- y1 hh)
  71.     )
  72.     (command "line" (list x y) (list x1 y1) "")
  73.     (setvar "osmode" cmd)
  74. );;;★请注意此闭括号的位置★。

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

使用道具 举报

发表于 2006-12-18 13:45:43 | 显示全部楼层
你这个程序osmode变量根本就没用到- -
我想你本意应该这样的:
(setq os(getvar "osmode"))
(setq cmd (getvar "cmdecho"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
...

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

使用道具 举报

 楼主| 发表于 2006-12-18 14:41:34 | 显示全部楼层
楼上说的对 原程序是(setvar "osmode" 0)  本人不太懂lsp,就胡乱改 谢谢楼上了啊 本来弄了本书看 越看越瞌睡 后来就放弃了 哈哈哈
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 04:30 , Processed in 0.294763 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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