明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18635|回复: 43

[【不死猫】] [分享]小猫自学成长月记--vLisp快速晋级之道

    [复制链接]
发表于 2009-1-21 15:19 | 显示全部楼层 |阅读模式
本帖最后由 nonsmall 于 2013-5-13 11:38 编辑

我先简单说一下对Lisp语言的理解和我的学习方法(有错误请大家批评指正)再说几个月的自学进程.

Lisp语言的语法总结:
1 括号成对
2 任意一个括号都有且只有一个返回值 所以任意一对括号可以看做一个变量
3 括号内形式: 一个函数 + 参数(个数不定)
4 参数可以是变量 可以是任意() 只是值类型不同 个数不同而已
----------
你理解上面的规则 写Lisp就不会有太多错误 可以随心所欲

例1:
(defun c:tt()(print 1))
因为()=nil
所以(defun c:tt nil (print 1))合法

例2:
(ssget nil)合法所以函数里面可以加提示
(ssget (car (list nil (print "请选择"))))

例3:
CAD有内置对话框如何用lisp操作?
过滤选择0层图元:
(Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand (car (list "Qselect "
(Vlax-Invoke-Method (Vlax-Get-Or-Create-Object "WScript.Shell" ) 'Sendkeys "%p{DOWN}{Enter}"))))

例4:
获得lwpline多线顶点坐标
(vl-remove-if 'not (mapcar '(lambda (x) (if (= (car x) 10) (cdr x))) (entget(car(entsel)))))

例5:
把反应器回调函数集成在反应器里
(setq rector (vlr-mouse-reactor nil (list (vl-list* :vlr-beginRightClick (defun test (a b)(print a)(print b))))))

--------------

学习方法小结:

1 注重开发效率
一切电脑上的操作皆可简化: AutoCAD简化绘图 编程简化AUTOCAD操作 编程本身也可以简化 一切重复性的电脑操作皆可简化 一切复杂的电脑操作皆可简化(包括写代码 调试) 这是我开发效率比常人高的主要原因 意味着我有更多的时间学习新的知识 思考更快的开发方法

2 看书要快
知道有这个函数 有这个方法即可 不需死记 需要时回头找找 时间一长就记住了

3 多学多问多看
现在玩Lisp真的很幸福,一般Lisp能做的事情网上都有答案,你总会找到比你写的更好的代码或者"居然这样也行?"的方法.
你知道有多少种不同的Lisp写法一句话实现简单的(command "line" '(0 0) '(1 1) "")完全相同的结果?
我想到不同的方法最少有9个
注:把'(0 0)改成(list 0 0)或"0,0"之类不算数的
开阔视野的好处是会让你的路越走越宽

4 组建个人函数库
自己清楚自己的需求 理解自己的函数 平时有空写点自己的函数或者把最近代码中的精华提炼出来 现在是制造 时间一长 自己的函数多起来 再写东西只需组装就行了 当然注释和整理更重要 这也算第一点的延伸吧(把代码简化为一个函数)

因为个人情况不同 想法不同 我个人是喜欢开发效率 如果你更看重代码执行效率 也可以谈一下.

点评

不错!支持死猫,顶你一个  发表于 2011-12-24 14:55

评分

参与人数 4威望 +1 明经币 +5 金钱 +20 贡献 +5 激情 +5 收起 理由
自贡黄明儒 + 1 很给力!
lidaxiu + 1 多谢分享经验,赞一个!
【KAIXIN】 + 1 赞一个!
mccad + 1 + 2 + 20 + 5 + 5 【精华】好文章

查看全部评分

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

本帖被以下淘专辑推荐:

发表于 2017-8-6 23:12 | 显示全部楼层
  1. 把最近代码中的精华提炼出来,
复制代码
谢谢毛老师的建议。
发表于 2017-8-13 13:08 来自手机 | 显示全部楼层
为什么要离开?
发表于 2017-8-7 08:02 | 显示全部楼层
猫准备去哪里?
 楼主| 发表于 2009-1-21 15:22 | 显示全部楼层

Lisp语言探索心得:

本帖最后由 作者 于 2009-1-23 17:26:33 编辑

语言是相通的 Lisp和汉语 英语本质上没什么区别
都是用来转换思想表达的一种方式
只要你汉语会说 学编程不是难事

前面说了Lisp函数的学习方法
VLA-开头的函数虽然多 但是更不需要背
你只需要理解概念这些函数就都会用了

什么是对象?
你能画出来 能操作到的都可以算
对象可以包含子对象 子对象也可以找到父对象
但对任何对象的操作都需要从根对象入手
AutoCAD根对象的取得有2种方式
最正常的是(Vlax-Get-Acad-Object)
在其他情况可以这样(Vlax-Get-Object "Autocad.Application")

什么是属性?
对象的特性,如颜色 线型 图层等信息
有3种方式可以取得属性
(vla-get-属性 对象)
(vlax-get 对象 '属性)
(vlax-get-property 对象 '属性)
设置属性:
(vla-put-属性 对象 值)
(vlax-put 对象 '属性 值)
(vlax-put-property 对象 '属性 值)
注: '属性 等价于 "属性"

什么是方法?
对象可以进行的操作
有3种方式可以使用方法
(vla-方法 对象 [可能的参数])
(vlax-invoke 对象 '方法 [可能的参数])
(vlax-invoke-method 对象 '方法 [可能的参数])
注: '方法 = "方法"

如果你觉得这些太抽象 可以使用我的小助手试试
它会帮你写出一些代码 并且理解上面的内容
上面每个都有3种方法 在使用中你会发现他们的不同

关于反应器:
只是特定的代码格式
加载后会在特定的时候触发Lisp(只是这个触发不是人的主观操作而已)

关于VBA:
玩Lisp真的要多少了解下VBA
可以通过eval来使用 配合自定义变量 词典 xdata等返回值
多行语句可以用:分隔
很多时候可以帮你节省很多工作时间(三楼提供例子)
比如混合运算:
(vla-eval (vlax-get-acad-object) (strcat "s=3:s=s*s+s/\s-(2+5):msgbox s"))

==========================================
之前我心存疑问:想知道vlisp到底能干什么 最强能实现什么功能?
.bat .vbs .js .hta VBA .....Lisp都可以弄
语言作为工具能做什么不重要 重要是它擅长干什么
因为 每种语言都有其瓶颈有其优缺 择优而用才是正道
二次开发的目的是提高生产力
用什么语言做什么功能还要看你的需求
每个人情况不同 这里就不多说了
但是走出Lisp看看外面的世界
你会发现很多精彩

 楼主| 发表于 2009-1-21 15:29 | 显示全部楼层
本帖最后由 作者 于 2009-1-22 10:45:22 编辑

下面是一点点代码

奇怪现在感觉自己没什么能拿出手的了

9种方法答案:
command
sendcommand
vl-cmdf
vla-eval  (VBA语句)
vlax-invoke(vlax-invoke-method)
vla-addline
sendkeys  (键盘模拟)
entmake
^C^C_line;0,0;1,1;; (菜单宏)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2009-1-21 15:42 | 显示全部楼层

即将告别。。。

祝福猫。。。

发表于 2009-1-21 16:00 | 显示全部楼层
老猫,顶你,很崇拜你。
发表于 2009-1-21 18:34 | 显示全部楼层
"改个图元计算几个数" ,绝非这么简单。
 楼主| 发表于 2009-1-21 19:22 | 显示全部楼层
zml84发表于2009-1-21 18:34:00\"改个图元计算几个数\" ,绝非这么简单。

好吧 我的话不够严谨 更正下 但我没有小看Lisp的意思

语言各有其价值

发表于 2009-1-21 19:30 | 显示全部楼层
CONTINUE....
发表于 2009-1-21 21:11 | 显示全部楼层

为什么要离开?大家要想你的!!

发表于 2009-1-21 22:46 | 显示全部楼层
猫,你还回来吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 01:27 , Processed in 0.293885 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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