找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 675|回复: 5

[日积月累]:我学习LISP的历程

[复制链接]
发表于 2004-11-24 20:48:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
学习LISP已经快一个月了,编了如下几个小程序(照书抄的就不算了):
1.标注圆半径(标在圆外),线长自动适应文字,大小符合天正出图比例;
2.注标高.立面设定正负零后自动累加.
3.SPLINE线转PLINE,使转换后的顶点尽量少,精度同样适应出图比例;
4.加粗曲线.包括圆,PLINE,LINE,ARC,SPLINE,可象晓东工具一样刷过去,默认值按出图比例大小决定线宽.
5.统计图块数量,并标注在图上.
6.图块替换.
7.引出标注带圆点,适应出图比例;
8.数字序号标注;
    在高手看来不值一提,就是我自己回头一看也确实很简单,但毕竟是从零开始的,每写完一个小程序都要高兴半天.这首先要感谢晓东空间,给了我学习LISP的愿望,也要感谢论坛里的诸位先行者给我的帮助和指导,所以发个帖子庆贺一下.
   我是急性子,所以不是按部就班地啃完书再编程序,而是先看基础书有一个大概的了解,就下手写程序,遇到不会用的函数再查书.所以进展比较快,也比较累人.而且到现在还有些函数和变量不会用,但我认为这种学习方法是正确的,最起码能提高学习兴趣,不至于半途而废.
   心得也有一些:
1.要养成好的习惯,变量名要见名知意,用下划线是个好办法,不要怕麻烦,看看CAD自己的LISP程序就知道了;
2.要写子程序,模块化.
3.重视出错处理;
4.重视用户的需要和习惯,程序要用起来方便.
  其实我编程的欲望是因为没有一个CAD软件能完全满足我用CAD的需要,就是论坛里虽然有海量的程序,大部分还是跟我的要求有距离,所以干脆自己学着写.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-11-24 23:49:17 | 显示全部楼层
不好意思问一下楼主,你那个线长自动适应文字是怎么实现的呀?文字的长度怎么取得呢?我学lisp时间比你长,效果比你差(不是广告)!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-25 00:09:03 | 显示全部楼层
测量一个指定文本对象的尺寸

(textbox elist)

elist 参数是一个图元定义数据表,其格式与 entget 函数返回的表的格式相同。它定义的必须是一个文本对象。如果在 elist 表中定义文本参数(而不是文本本身)的那些域被省略,则使用当前值或缺省值。如果 textbox 函数调用成功,它返回一个包括两个点的表;否则它返回 nil。

textbox 函数可以接受的最小的表是文本本身:

(textbox '((1 . "Hello world.")))                可能返回 ((0.0 0.0 0.0) (0.8 0.2 0.0))

在这种情况下,textbox 函数将使用当前缺省值来为文本提供其余参数。

textbox 函数返回的点描述了文本对象的边框(假定该文本对象的插入点是 (0,0,0),而它的旋转角度是 0)。通常由 textbox 函数返回的第一个子表是点 (0.0 0.0 0.0),除非该文本对象是倾斜的、或者是垂直书写的、或者它包含的字符串中有下行字符(如 g 和 p)。第一个点表的值指定从文本的插入点到围住该文本的最小矩形的左下角的偏移量。第二个点表的值指定该矩形框的右上角。无论被测量文本的方向怎样,返回的两个点表总是描述围住文本的矩形框的左下角和右上角。

例如:
(command "text" "0,0" "3.0" "0" "要写的文字")
(setq textlength (car (cadr (textbox (entget (entlast))))))

返回文字的水平长度。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-25 09:03:34 | 显示全部楼层
谢谢你的答复,不过还有一点疑问。我在(0,0)写一个字,textbox返回的是'((20.8333 -5.20833 0.0) (1312.5 463.542 0.0)),而且试过在不同的地方写相同的字,返回值的第二个表元素相同,难道说函数的解释有问题?不是说右上角坐标吗?还是返回的第二个元素表就是表示文本框的长度、宽度值?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-25 14:55:16 | 显示全部楼层
不是很明白,不过可以先保存,以后慢慢理解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-28 18:37:34 | 显示全部楼层
我是直接在图上量一个字的距离,测一个字宽与字高的系数来定的,效果还不错.别笑我啊,我早说了有些函数还不会用.其实看看CAD的帮助就明白了,不过有时候是想不起来用哪一个函数.还是一个熟不熟练的问题.
    还有一点想说的是调试问题.象我这样的新手,写的程序往往是错误百出,现在当然比一开始好多了,一些很低级的错误很少犯了,比如:
1.括号多了或少了;漏了文本的引号等.建议在200i的autolisp编辑器里编辑你的程序,会有提示.
2.car\cdr\assoc等对表操作的函数的对象一定要是表.如下面的错误犯了N回了:(setq entype (cdr(assoc 0 (entsel))))
3.ssget函数过滤表要这样写:ssget '((0 . "INSERT")) 注意大写!两个括号!
4.好象跑题了,言归正传,可以设一个语句来查找错误出在哪,比从头一句一句看快多了.比如:
.......
(prompt "ALLRIGHT!")
......
如果程序运行后命令行出现了ALLRIGHT,说明从PROMPT语句以上没有语法问题,再剪切掉往下粘贴,可以比较快地找到出错的地方.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 15:34 , Processed in 0.184518 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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