给代码添加记忆功能!
本帖最后由 gcho 于 2011-9-4 16:46 编辑;记忆上次输入比例
(if *Scale* (setq SC (getreal (strcat"\n输入比例1:<" (rtos *Scale* 2 0) ">:") ) )
(setq SC (getreal "\n输入比例1:<100>: ")))
(if (null SC) (setq SC *Scale*) (setq *Scale* SC ))
;记忆上次基点高程
(if *NewBASE* (setq H_BASE (getreal (strcat"\n基点高程<" (rtos *NewBASE* 2 2) ">:") ) )
(setq H_BASE (getreal "\n输入基点高程<0.00>: ")))
(if (null H_BASE) (setq H_BASE *NewBASE*) (setq *NewBASE* H_BASE ))
;记忆上次基点位置
(if *NewPTBASE* (setq PT_BASE ??? ) )
(setq PT_BASE (getpoint "\n指定基点<0,0,0>: ")))
(if (null PT_BASE) (setq H_BASE *NewPTBASE*) (setq *NewPTBASE* PT_BASE ))
上面三块代码分别是记忆上次;记忆上次输入比例,记忆上次基点高程,记忆上次基点位置
现在有两个问题:
1、最后一块记忆上次基点位置时不能仿照前两个来写,那“???”处不知道该怎么填(或者另辟方法);
2、前面两块虽然能正确地运行,但是也有一个缺点,就是程序初次运行时SC、H_BASE值为空,非要给定一个值后它们才能往下运行,再次运行时就能记住给定的那个值。
一般全局变量基本能搞定,如果要达到关闭CAD也有记忆功能,可考虑写入注册表,写读写程序就行,有想法的朋友可加我QQ交流,110788013,加我的时候注明LISP交流 学习了,谢谢无私分享 很有用,谢谢分享 楼主抽空学点lisp吧,一两天的时间搞定的事 无语了!!! gcho 发表于 2011-9-5 15:14 static/image/common/back.gif
无语了!!!
你还无语? 方法很多种:
1.直接使用全局变量,这种方法最简单。(特点:关闭文档“记忆”就被关闭)
2.写入、读取图形词典。(特点:记忆只储存在当前图形文档)
3.写入、读取注册表。(特点:记忆储存于计算机,可以任何文档任何时候读取或修改)
4.写入、读取文件,如TXT文件(特点:同上)
5.写入、读取环境变量(特点:同上)
本帖最后由 yjr111 于 2011-9-5 19:33 编辑
看看是不是满足你的要求....
(defun c:hello(/ scale newbase pt-base)
(setvar "cmdecho" 0)
;记忆上次输入比例
(initget "Scale NewbasePt-base")
(setq key (getkword "\n请选择(比例<S>或基点高程<N>或基点<P>)<默认S>:"))
(if (not key) (setq key "Scale"))
(if (= key "Scale")
(progn
(setq SC (getreal "\n输入比例<100>:"))
(if (not sc) (setq sc 100))
)
)
;记忆上次基点高程
(if (= key "Newbase")
(progn
(setq H_BASE (getreal "\n输入基点高程<0.00>: "))
(if (not H_BASE) (setq sc 0.00))
)
)
;记忆上次基点位置
(if (= key "Pt-base")
(progn
(setq p_BASE (getpoint "\n指定基点<上次基点>: "))
(command "point" p_base);;;此句不能少!
(command )
(if (/= p_base nil)
(progn
(setq e1(entlast))
(setq ss1 (entget e1))
(setq pp(cdr(assoc 10 ss1)))
)
(setq p_BASE pp)
)
(setq p1 (getpoint "\n指定点: "));;;;示例
(command "line" p1 p_BASE "");;;;示例
)
)
)
yjr111 发表于 2011-9-5 19:28 static/image/common/back.gif
看看是不是满足你的要求....
我下午弄了一下,也弄出来了,仍然谢谢你的帮助,你的方法也很不错! 不知道你是用什么方法的,能不能贴出来看看? yjr111 发表于 2011-9-5 20:36 static/image/common/back.gif
不知道你是用什么方法的,能不能贴出来看看?
;记忆上次基点位置
(initget 128 " ")
(setq PT_BASEE (getpoint "\n指定基点或[上次基点(回车)]:"))
(cond
((= PT_BASEE " ")
(setq PT_BASEE *NewPTBASE*)
)
((= (TYPE BSPOINT) 'LIST)
)
)
举一反三,多谢指教
页:
[1]
2