gcho 发表于 2011-9-4 16:42:01

给代码添加记忆功能!

本帖最后由 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值为空,非要给定一个值后它们才能往下运行,再次运行时就能记住给定的那个值。


rdhhb 发表于 2016-5-1 22:39:24

一般全局变量基本能搞定,如果要达到关闭CAD也有记忆功能,可考虑写入注册表,写读写程序就行,有想法的朋友可加我QQ交流,110788013,加我的时候注明LISP交流

paulpipi 发表于 2020-9-28 09:27:42

学习了,谢谢无私分享

执骨哟 发表于 2020-9-28 15:30:52

很有用,谢谢分享

cnks 发表于 2011-9-4 16:52:08

楼主抽空学点lisp吧,一两天的时间搞定的事

gcho 发表于 2011-9-5 15:14:54

无语了!!!

cnks 发表于 2011-9-5 15:19:43

gcho 发表于 2011-9-5 15:14 static/image/common/back.gif
无语了!!!

你还无语?

caoyin 发表于 2011-9-5 15:48:03

方法很多种:
1.直接使用全局变量,这种方法最简单。(特点:关闭文档“记忆”就被关闭)
2.写入、读取图形词典。(特点:记忆只储存在当前图形文档)
3.写入、读取注册表。(特点:记忆储存于计算机,可以任何文档任何时候读取或修改)
4.写入、读取文件,如TXT文件(特点:同上)
5.写入、读取环境变量(特点:同上)

yjr111 发表于 2011-9-5 19:28:06

本帖最后由 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 "");;;;示例
      )
      )
)

gcho 发表于 2011-9-5 20:09:24

yjr111 发表于 2011-9-5 19:28 static/image/common/back.gif
看看是不是满足你的要求....

我下午弄了一下,也弄出来了,仍然谢谢你的帮助,你的方法也很不错!

yjr111 发表于 2011-9-5 20:36:35

不知道你是用什么方法的,能不能贴出来看看?

gcho 发表于 2011-9-5 21:17:57

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)
                        )
                )
       

twsyzx 发表于 2013-11-15 21:16:51

举一反三,多谢指教
页: [1] 2
查看完整版本: 给代码添加记忆功能!