明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5482|回复: 37

[LISP]请问各位大侠我的程序有问题 不知道什么改正?

  [复制链接]
发表于 2003-12-8 09:48:00 | 显示全部楼层 |阅读模式
请问飞哥 我的程序怎么样才能默认上次的输入 假如我上次输入的fuhao 是 “w "
一直标到”w20" 但是中途我因为某种原因而使程序中断 现在我继续标注,而且不输入FUHAO 和 I 值  让程序自己回到上次结束时的状态 请问飞哥我该怎么改

(defun wlayer(llay)
    (if (/= (tblobjname "layer" llay) nil)
      (setvar "clayer" llay)
     )
)
(defun c:ty (/ oce ofe fh p0 m nn i  fuhao)
    (setq oce (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (setq ofe (getvar "clayer" ))
    (command ".undo" "be")
    (setq fuhao (getstring "\nplease input fuhao:"))
    (setq i(getint "\nplease input number:"))
    (cond
      ((= fuhao "w") (wlayer "0-w"))
      ((= fuhao "y") (wlayer "0-y"))
      ((= fuhao "j") (wlayer "0-j"))
      ((= fuhao "dl") (wlayer "2-电力"))
      ((= fuhao "ld") (wlayer "2-路灯"))
      ((= fuhao "dx") (wlayer "2-电信"))
    )
    (while  (/= p0 "")
       (setq p0 (getpoint "  pickpoint:"))
         (if (= p0 nil)
             (progn
                 (setvar "cmdecho" oce)
                 (command ".undo" "e")
                 (setvar "clayer" ofe)
                      (exit)
             )
          )
          (setq fh (strcase fuhao))
          (setq m (itoa i))
          (setq nn(strcat fh m))
          (command ".text" "j" "m" p0 (getvar "textsize") "0" nn)
          (setq i (+ 1 i))
       )
   
   (prin1)   
)
发表于 2003-12-8 11:44:00 | 显示全部楼层
把变量定义为全局变量(其实你只要不把它定义为局部变量就可以了),一个好的习惯在变量名前后加*,如*FUHAO*,易于识别。

在进行程序时先进行变量检查,检查时先判断符号类型。
具体如下:
(if (= 'STR (type *FUHAO*))
  (if (/= "" (setq TMP (getstring "\nplease input fuhao:")))
    (setq *FUHAO* TMP)
  )
  (while (/= "" (setq *FUHAO* (getstring "\nplease input fuhao:"))))
)
 楼主| 发表于 2003-12-8 11:58:00 | 显示全部楼层
首先谢谢lockmyeye 版主的解答 不过你的也好象不行呀  试不试我改的不对 请教你改的步骤
 楼主| 发表于 2003-12-8 11:58:00 | 显示全部楼层
请问具体需要怎么改?
发表于 2003-12-8 12:04:00 | 显示全部楼层
应该学会自己多试试。。。

注:全局变量就是将变量从(defun xxx( / ...))的...的地方去掉
 楼主| 发表于 2003-12-8 13:19:00 | 显示全部楼层
请问我将程序做了以下调整为什么还是不行? i回到次结束的状态 但是*fuhao*去怎么也传递不过去 这是为什么呢?

(defun wlayer(llay)
    (if (/= (tblobjname "layer" llay) nil)
      (setvar "clayer" llay)
     )
)
(defun c:ty (/ oce ofe fh p0 m nn i)
    (setq oce (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (setq ofe (getvar "clayer" ))
    (command ".undo" "be")
    (setq fh (strcase (getstring "\nplease input fuhao:")))
    (if (/= fh nil)
        (setq *fuhao* fh)
        (setq fh *fuhao*)
    )
   
    (setq i (getint "\nplease input number:"))
    (if (= i nil)
        (setq i *i*)
    )
    (cond
      ((= fh "w") (wlayer "0-w"))
      ((= fh "y") (wlayer "0-y"))
      ((= fh "j") (wlayer "0-j"))
      ((= fh "dl") (wlayer "2-电力"))
      ((= fh "ld") (wlayer "2-路灯"))
      ((= fh "dx") (wlayer "2-电信"))
    )
    (while  (/= p0 "")
       (setq p0 (getpoint "  pickpoint:"))
         (if (= p0 nil)
             (progn
                 (setq *i* i)
                 (setvar "cmdecho" oce)
                 (command ".undo" "e")
                 (setvar "clayer" ofe)
                      (exit)
             )
          )
          (setq m (rtos i))
          (setq nn(strcat fh m))
          (command ".text" "m" p0 (getvar "textsize") "0" nn)
          (setq i (+ 1 i))
       )
   
   (prin1)   
)
发表于 2003-12-8 13:29:00 | 显示全部楼层
自己仔细理一遍程序的运行过程,再看看眼哥的提示,问题并不难。

应该学会自己找问题了,如果这个问题(仅只这个程序中你所提的功能)你还找不出来,就不应该了。。。
 楼主| 发表于 2003-12-8 18:16:00 | 显示全部楼层
飞哥我是第一次接触到类似的问题 问题的关键就是在FH传给*FUHAO* 的时候 它的TYPE B变了吗 我??
发表于 2003-12-8 18:29:00 | 显示全部楼层
(TYPE。。。)只是想证明这个东西有值,你可以直接用(if *fuhao*...),用type仅仅是为了更加准确判断这个变量是否被其它程序修改过。。。
这个问题根本不是问题,没有任何特殊性,除非你还不懂什么是全局变量,什么是局部变量。。。
发表于 2003-12-8 19:06:00 | 显示全部楼层
我给你改好了,包括一些小问题,还是希望你自己明白后在看看我的程序

  1. (defun wlayer (llay)
  2.   (if (/= (tblobjname "layer" llay) nil)
  3.     (setvar "clayer" llay)
  4.   )
  5. )
  6. (defun c:ty (/ oce ofe fh p0 m nn i)
  7.   (setq oce (getvar "cmdecho"))
  8.   (setvar "cmdecho" 0)
  9.   (setq ofe (getvar "clayer"))
  10.   (command ".undo" "be")
  11.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  12.   (if (not *fuhao*)
  13.     (progn
  14.       (initget 0)
  15.       (setq *fuhao* (getstring "\nplease input fuhao:"))
  16.     )
  17.     (progn
  18.       (setq fh (getstring (strcat "\nplease input fuhao<" *fuhao* ">:")))
  19.       (if (/= fh "")
  20.         (setq *fuhao* fh)
  21.       )
  22.     )
  23.   )
  24.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;注意此范围内的内容;;;;;;;;;;;;;;;;;;
  25.   (if (not *i*)
  26.     (progn
  27.       (initget 3)
  28.       (setq *i* (getint "\nplease input number:"))
  29.     )
  30.     (progn
  31.       (setq i (getint (strcat "\nplease input number<" (itoa *i*) ">:")))
  32.       (if i
  33.         (setq *i* fh)
  34.       )
  35.     )
  36.   )
  37.   
  38.   (setq i *i*)

  39.   (setq *fuhao* (strcase *fuhao* 0))

  40.   (cond
  41.     ((= *fuhao* "w") (wlayer "0-w"))
  42.     ((= *fuhao* "y") (wlayer "0-y"))
  43.     ((= *fuhao* "j") (wlayer "0-j"))
  44.     ((= *fuhao* "dl") (wlayer "2-电力"))
  45.     ((= *fuhao* "ld") (wlayer "2-路灯"))
  46.     ((= *fuhao* "dx") (wlayer "2-电信"))
  47.   )
  48.   
  49.   (while (setq p0 (getpoint "\npick point:"))
  50.     (setq m (rtos i))
  51.     (setq nn (strcat *fuhao* m))
  52.     (command ".text" "m" p0 (getvar "textsize") "0" nn)
  53.     (setq i (+ 1 i))

  54.   )
  55.   (setvar "cmdecho" oce)
  56.   (command ".undo" "e")
  57.   (setvar "clayer" ofe)   
  58.   (prin1)
  59. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-3 09:41 , Processed in 0.208970 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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