找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 657|回复: 2

[LISP程序]:晓东,上次尺寸标注还有点小问题

[复制链接]
发表于 2002-3-19 11:17:48 | 显示全部楼层 |阅读模式

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

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

×
执行你修改后的程序dh,在(command "dimlinear")后,由于需要等待用户拾取两点等一系列操作,故(command "exit")会返回错误,程序不能退回到command:提示符下,且(mkstr2)也不执行。若将(command "exit")放在(command "dimlinear")之前,(mkstr2)同样返回错误。
    我在学习lisp的过程中也常遇到类似这种情况,不知有何好办法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

 楼主| 发表于 2002-3-19 17:32:31 | 显示全部楼层

Re: [LISP程序]:晓东,上次尺寸标注还有点小问题

最初由 mrbean13 发布
[B]执行你修改后的程序dh,在(command "dimlinear")后,由于需要等待用户拾取两点等一系列操作,故(command "exit")会返回错误,程序不能退回到command:提示符下,且(mkstr2)也不执行。若将(command "exit")放在(comman... [/B]


以前给你修改的程序,在(command "exit")前,需要你有固定的操作,也就是在DIM命令里面,你要有固定的操作,用变量,而不是用交互,这样程序流程才可以继续。

解决方法:

1. 若让程序自动执行(不在DIM命令里面和ACAD交互),那么你在执行DIM命令前,先用getXXX函数让用户输入具体信息,比如取点等放入变量,然后在(command "dimlinear")中,后面需要的参数用变量代替。

2. 很多情况下,希望用户在命令里面和ACAD交互,用户自己输入exit退出到命令行,那么要用技巧,论坛以前我贴过方法,就是动态的和ACAD交互命令,让程序知道什么时候命令结束退到命令行状态的方法,在命令里面使用cmdactive系统变量或者cmdname变量。

   比如你的程序要用DIM命令,那么:

   1. 先执行命令头,(command "dim") 或者上次说的(sldna "dimn"),执行后,进入dim:状态,这时候等待用户和ACAD交互,如何判断用户什么时候结束呢?

   2. 做循环
     

  1.        (while (= (getvar "cmdactive") 1)
  2.           (command pause)
  3.        )
  4.       


      系统变量cmdactive的值若为1,则表明当前正在执行某个命令而不是在COMMAND:状态下。上面的循环就是说,若一直在命令状态下,那么用pause等待用户输入,直到用户用某种方法退回到command:下,系统变量cmdactive=0,结束循环,进行下一步处理。

      当然,若知道当前执行的是什么命令的前提下,也可以用cmdname代替cmdactive,系统变量cmdname的值是字符串,代表当前正在执行的命令名,上面的代码改为:
   

  1.         (while (= "DIM" (getvar "cmdname"))
  2.            (command pause)
  3.         )
  4.    


      当然,使用cmdactive更灵活。

   关于mkstr2函数的问题,天正系列采用了结构化处理,就是:
    对于建筑3.X系列:
    1、在程序开始的地方使用(pouts ..)函数保存现场,并设置初始化环境, 可以设置层等等。

    2、在程序的最后调用(mkstr2)来恢复现场,“消尸灭迹”。

    所以,(mkstr2)必须在程序的最后,不需要改变系统状态的位置调用,一般就在最后。

    另外:跟你分析过了,天正建筑、结构、水、暖、电都用了同一套核心,只是同一个功能的函数在不同的软件里面名字不一样,故意给搞混了(当然要混,否则各个软件用一把钥匙通用了:) ),若你对天正核心很了解,那么完全可以把不同专业的LISP文件的天正核心都改到建筑下来,那样就真用一把锁开多个门了,这是题外话。 所以,建议你不要使用天正建筑的核心函数,它的名字没有任何规律,难记还不通用,若你把你程序要用到天正结构下,就不可以了。所以,再此还是推荐你用XDRX_API,天正的所有核心函数XDRX_API都有,并且还比天正的核心函数多了200多个函数。XDRX_API函数名字是按照实际的英文命名的,好记忆,通用。你写的函数可以在R14,2000+上版本的软件上任意使用。

   若感兴趣,欢迎在论坛讨论XDRX_API的使用,我不会有任何保留的。

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

使用道具 举报

发表于 2002-3-20 00:27:19 | 显示全部楼层

再问关于lisp中与acad交互

使用
(while (= (getvar "cmdactive") 1)
          (command pause)
       )
则原acad命令中的提示语句不可见。
怎么办?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-20 13:55 , Processed in 0.380669 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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