明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1527|回复: 5

求一个程序,能修改lisp程序的参数。

[复制链接]
发表于 2012-11-25 01:24:53 | 显示全部楼层 |阅读模式
我想遍一个程序A,实现如下功能:
提示用户输入一些和制图标准有关文字信息,程序A将信息赋值给相应全局变量,并能存储在一个lisp程序B里(或者其他方式,我只能想到这个方法),下次只要运行程序B,就能一次更改这些全局变量的值。或者将程序B做成自定义函数,让其他二次开发程序调用这个函数,自动完成环境设置。
因为程序B是一个lisp程序,对于我自己,我可以修改里面的内容,但我总不能要求我的用户也有这样的能力,我也不可能一个用户发一个版本。所以最好用户能通过程序自己一次性地修改参数。


程序B的一部分如下:
(defun standard()

     (setq text-layer "note")
     (setq dim-layer "dim")
     (setq hatch-layer "hat")
     (setq symbols-layer "sym")
     (setq text-style "note")
     (setq dim-style "dim")
)   



发表于 2012-11-25 10:05:50 | 显示全部楼层
说复杂也复杂,说简单也简单。
对于用户设置或修改,你可以在程序的适当位置加一个选项(关键字),对这些变量逐个进行设置(修改),不进入选项则按程序默认设置的数值进行。
至于变量的保存问题,如果能找到合理的默认值,使得大部分情况下都适应,就可以在程序的开始设置一下,然后使用永久变量,则在图形中可以适应,如果这些值经常会变动,那么最好在程序执行完成(或执行中)将这些变量的数值保存为文本文件,在程序运行时先读入。
我的这个程序是使用永久变量的方法,你可以参考:http://bbs.mjtd.com/thread-99104-1-1.html
其它的方法也有,诸如把信息保存在图形文件中,使用起来比较复杂,而且管理也比较乱,不建议使用。
发表于 2012-11-25 11:27:48 | 显示全部楼层
可用文件保存:
  1. (defun readfile (lst file)
  2. (if (setq fn (findfile file)) (progn
  3.   (setq fp (open fn "r"))
  4.   (foreach x lst (set x (read-line fp)))
  5.   (close fp)
  6. ) (progn
  7.   (setq mrsj '("note" "dim" "hat" "sym" "note" "dim"));默认值
  8.   (mapcar '(lambda (x y)(set x y)) lst mrsj)
  9. ))
  10. )
  11. (defun writefile (lst file)
  12. (setq fp (open file "w"))
  13. (setq i 0)
  14. (foreach x lst (princ (strcat (eval x) "\n") fp))
  15. (close fp)
  16. )
  17. (defun standard()
  18. (setq blb '(text-layer dim-layer hatch-layer symbols-layer text-style dim-style)
  19. (readfile blb "datafile") ;读数据
  20. ; ...
  21. (writefile blb "datafile") ;写数据
  22. )
 楼主| 发表于 2012-12-10 01:11:59 | 显示全部楼层
本帖最后由 millermin 于 2012-12-10 01:30 编辑
ZZXXQQ 发表于 2012-11-25 11:27
可用文件保存:


我先把readfile单独提取出来运行。经过跟踪发现,运行过程顺利,fn的值已经是文件名了,但是lst却是nil。如果刻意让他找不到文件,运行下面那段,lst也是nil,为什么?

点评

lst本身是个因变量,只在运行函数时代入值,函数运行结束自动清空。  发表于 2012-12-10 09:18
 楼主| 发表于 2012-12-10 10:17:30 | 显示全部楼层
本帖最后由 millermin 于 2012-12-10 10:25 编辑
millermin 发表于 2012-12-10 01:11
我先把readfile单独提取出来运行。经过跟踪发现,运行过程顺利,fn的值已经是文件名了,但是lst却是nil ...


我有点糊涂了。等我再琢磨,实在不懂再问。
 楼主| 发表于 2012-12-10 10:50:47 | 显示全部楼层
搞懂了。原以为学习应该一步步来,先试函数,再搞主程序。经提点,才发现必须和主程序一起运行,才达到预想的结果。
同时也有一个疑问,如果文件名前无路经,那程序会找不到文件,好像不会整个硬盘搜索。不过提供路经倒是我多年的习惯。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-3 13:33 , Processed in 0.267904 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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