- UID
- 675606
- 积分
- 3400
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2013-5-6
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 /db_自贡黄明儒_ 于 2014-10-16 09:27 编辑
;;在明经混了许多年,又在晓东混了几年了,渐发现原来写的程序不是太合理,全改又没有那么多精力了.
;;对于lisp程序结构,我自己有了自己的看法,自己总结一下,今后套用这种格式。 自贡黄明儒 2014.10.15
;;1 建立通用和自定义函数库,分别保存为Public.lsp和MyLsp.lsp,今后加载和修改就方便了
;;今后只需要加载两个文件,这就方便了;通用函数的建立,给自己修改来方便。
;;2 自定函数
(defun C:w1 (/ CMD1 OSM1 SS)
;;2.1 错误处理
;;定义在函数内部,作用范围也只限于此函数。
;;写在开头,以保证后面的代码发生错误,均会执行错误处理。
(defun *error* (msg)
;;2.1.1 写在开头,错误处理反跟踪,找出调试错误所在。调试完毕后,可注释掉
(vl-bt)
;;2.1.2 如果命令还在执行,中断它
(while (not (equal (getvar "cmdnames") "")) (command nil))
;;2.1.3 在错误发生之前改变的变量,发生错误时后面的代码不再执行,必须恢复
(setvar "nomutt" 0);容量忘了它,没恢复成0后面使用起来怪怪的
(cond (cmd1 (setvar 'cmdecho cmd1)))
(cond (osm1 (setvar 'osmode osm1)))
(princ "\n 出错啦!")
;;2.1.4 静默退出
(princ)
)
;;2.2 其它临时函数,非通用的
()
;;2.3 一般说来,执行一个程序,总是要选择对象。如果希望先择后执行,就要有这句,而且写在开头
(cond ((cadr (ssgetfirst)) (setq ss (ssget "_P" '((0 . "*TEXT"))))))
;;2.4 检查加载vl扩展,有这句没有坏处,也不会造成程序多大的额外负担,因为如果已经加载扩展,不做任何事情
(VL-LOAD-COM)
;;2.5 *acad* *DOC*是常用的,不必释放。前面加*号,编辑器检查形参时会把它们排在前面,便于我们去除
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *DOC* (setq *DOC* (vla-get-ActiveDocument *acad*)))
;;2.6 获取并修改变量
(setq cmd1 (getvar "cmdecho"));如果后面用到command,不希望显示一些信息
(setvar "cmdecho" 0)
(setq osm1 (getvar "osmode"));如果后面用到command画图,不关闭捕捉,就可能不是我们需要的点
(setvar "osmode" 0)
;;2.7 编组开始
;;便于按后悔键Ctrl+Z时,一步退到位
|
|