明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4176|回复: 13

给代码添加记忆功能!

  [复制链接]
发表于 2011-9-4 16:42:01 | 显示全部楼层 |阅读模式
本帖最后由 gcho 于 2011-9-4 16:46 编辑
  1. ;记忆上次输入比例
  2.   (if *Scale* (setq SC (getreal (strcat  "\n输入比例1:<" (rtos *Scale* 2 0) ">:") ) )  
  3.   (setq SC (getreal "\n输入比例1:<100>: ")))
  4.   (if (null SC) (setq SC *Scale*) (setq *Scale* SC ))
  5.   ;记忆上次基点高程
  6.   (if *NewBASE* (setq H_BASE (getreal (strcat  "\n基点高程<" (rtos *NewBASE* 2 2) ">:") ) )  
  7.   (setq H_BASE (getreal "\n输入基点高程<0.00>: ")))
  8.   (if (null H_BASE) (setq H_BASE *NewBASE*) (setq *NewBASE* H_BASE ))
  9.     ;记忆上次基点位置
  10.    (if *NewPTBASE* (setq PT_BASE ??? ) )  
  11.   (setq PT_BASE (getpoint "\n指定基点<0,0,0>: ")))
  12. (if (null PT_BASE) (setq H_BASE *NewPTBASE*) (setq *NewPTBASE* PT_BASE ))

上面三块代码分别是记忆上次;记忆上次输入比例,记忆上次基点高程,记忆上次基点位置
现在有两个问题:
1、最后一块记忆上次基点位置时不能仿照前两个来写,那“???”处不知道该怎么填(或者另辟方法);
2、前面两块虽然能正确地运行,但是也有一个缺点,就是程序初次运行时SC、H_BASE值为空,非要给定一个值后它们才能往下运行,再次运行时就能记住给定的那个值。


"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2016-5-1 22:39:24 | 显示全部楼层
一般全局变量基本能搞定,如果要达到关闭CAD也有记忆功能,可考虑写入注册表,写读写程序就行,有想法的朋友可加我QQ交流,110788013,加我的时候注明LISP交流
回复 支持 0 反对 1

使用道具 举报

发表于 2020-9-28 09:27:42 来自手机 | 显示全部楼层
学习了,谢谢无私分享
发表于 2020-9-28 15:30:52 | 显示全部楼层
很有用,谢谢分享
发表于 2011-9-4 16:52:08 | 显示全部楼层
楼主抽空学点lisp吧,一两天的时间搞定的事
 楼主| 发表于 2011-9-5 15:14:54 | 显示全部楼层
无语了!!!
发表于 2011-9-5 15:19:43 | 显示全部楼层
gcho 发表于 2011-9-5 15:14
无语了!!!

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

评分

参与人数 1金钱 +20 收起 理由
gcho + 20 谢谢指教!

查看全部评分

发表于 2011-9-5 19:28:06 | 显示全部楼层
本帖最后由 yjr111 于 2011-9-5 19:33 编辑

看看是不是满足你的要求....
  1. (defun c:hello(/ scale newbase pt-base)
  2.   (setvar "cmdecho" 0)
  3. ;记忆上次输入比例
  4.   (initget "Scale Newbase  Pt-base")
  5.   (setq key (getkword "\n请选择(比例<S>或基点高程<N>或基点<P>)<默认S>:"))
  6.   (if (not key) (setq key "Scale"))
  7.       (if (= key "Scale")
  8.       (progn
  9.       (setq SC (getreal "\n输入比例<100>:"))
  10.       (if (not sc) (setq sc 100))
  11.       )
  12.       )
  13. ;记忆上次基点高程
  14.       (if (= key "Newbase")
  15.       (progn
  16.       (setq H_BASE (getreal "\n输入基点高程<0.00>: "))
  17.       (if (not H_BASE) (setq sc 0.00))
  18.       )
  19.       )
  20. ;记忆上次基点位置
  21.       (if (= key "Pt-base")
  22.       (progn
  23.       (setq p_BASE (getpoint "\n指定基点<上次基点>: "))
  24.       (command "point" p_base);;;此句不能少!
  25.       (command )
  26.       (if (/= p_base nil)
  27.         (progn
  28.         (setq e1  (entlast))
  29.         (setq ss1 (entget e1))
  30.         (setq pp  (cdr(assoc 10 ss1)))
  31.         )
  32.         (setq p_BASE pp)
  33.        )
  34.       (setq p1 (getpoint "\n指定点: "));;;;示例
  35.       (command "line" p1 p_BASE "");;;;示例
  36.       )
  37.       )
  38.   )

评分

参与人数 1金钱 +20 收起 理由
gcho + 20

查看全部评分

 楼主| 发表于 2011-9-5 20:09:24 | 显示全部楼层
yjr111 发表于 2011-9-5 19:28
看看是不是满足你的要求....

我下午弄了一下,也弄出来了,仍然谢谢你的帮助,你的方法也很不错!
发表于 2011-9-5 20:36:35 | 显示全部楼层
不知道你是用什么方法的,能不能贴出来看看?
 楼主| 发表于 2011-9-5 21:17:57 | 显示全部楼层
yjr111 发表于 2011-9-5 20:36
不知道你是用什么方法的,能不能贴出来看看?

;记忆上次基点位置
          (initget 128 " ")
                (setq PT_BASEE (getpoint "\n指定基点或[上次基点(回车)]:"))
                (cond
                  ((= PT_BASEE " ")
                         (setq PT_BASEE *NewPTBASE*)
                        )
                        ((= (TYPE BSPOINT) 'LIST)
                        )
                )
         
发表于 2013-11-15 21:16:51 | 显示全部楼层
举一反三,多谢指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-24 02:13 , Processed in 0.205672 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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