找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 715|回复: 9

[求助] [求助]:初学LISP,帮忙看看这个程序有什么错误?

[复制链接]
发表于 2004-10-18 20:53:56 | 显示全部楼层 |阅读模式

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

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

×
为了画出这个图形!!
http://www.xdcad.net/forum/showthread.php?s=&threadid=270888

[php]
(defun hd(a)
  (*a(/ pi 180))
  )
(defun c:lx(/ l r p0 p1 p2 p3 p4 p5 p6 ob la)
  (setq l (getdist "\n 请输入键槽的长度:"))
  (setq r (getdist "\n 请输入键槽的宽度:"))
  (setq la (getstring "\n 请输入中心线的图层:"))
  (setq p0 (getpoint "\n 请输入键槽的一个中心点:"))
  (setq p1 (polar p0 (hd 90) (+(/ r 2) 10)))
  (setq p2 (polar p0 (hd 90) (/ r 2)))
  (setq p3 (polar p0 (hd 180) (+(/ r 2) 10)))
  (setq p4 (polar p0 (hd 360) (+(+(/ r 2) 10) l)))
  (setq p5 (poiar p0 (hd 270) (+(/ r 2) 10)))
  (setq p6 (polar p0 (hd 360) l))
  (setvar "clayer" la)
  (command "line" p1 p5)
  (setq ob (entlast))
  (command "line" p3 p4)
  (command "copy" ob "" p0 p6)
  (setvar "clayer" "0")
  (command "pline" p2 "a" "a" "180" "r" (/ r 2) "270" "l" "l"  l "a" "a" "180" "r" (/ r 2) "90" "l" "c")
  (princ)
  )
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 4个

财富等级: 恭喜发财

发表于 2004-10-18 21:07:11 | 显示全部楼层
(setq p5 (poiar p0 (hd 270) (+(/ r 2) 10)))
中的poiar应该为polar
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-18 21:26:37 | 显示全部楼层
谢了,可是修改后这么会这样?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-18 23:01:05 | 显示全部楼层
给初学者

  1. (defun c:test (/ p l h l2 h2 p1        p2 p3 p4 pl pr oldos p0        p0_ p00        p00_
  2.                oldlt)
  3.   (if (and (setq p (getpoint "\n中心点: "))
  4.            (setq l (getdist p "\nL = "))
  5.            (setq h (getdist p "\nH = "))
  6.       ) ;_ 必要条件
  7.     (progn
  8.       (setq l2          (/ l 2)
  9.             h2          (/ h 2)
  10.             oldos (getvar "osmode") ;_因为用command 捕捉会有影响
  11.       )
  12.       (setq p1         (mapcar '+ p (list (- l2) h2 0.)) ;_左上点
  13.             p2         (mapcar '+ p (list l2 h2 0.)) ;_ 右上点
  14.             p3         (mapcar '+ p (list (- l2) (- h2) 0.)) ;_ 左下点
  15.             p4         (mapcar '+ p (list l2 (- h2) 0.)) ;_ 右下点
  16.             pl         (polar p pi (+ l2 h2)) ;_ 左弧顶点
  17.             pr         (polar p 0. (+ l2 h2)) ;_ 右弧顶点
  18.             p0         (polar p pi l)
  19.             p0_         (polar p 0. l)
  20.             p00         (polar p (/ pi 2) h)
  21.             p00_ (polar p (/ pi -2.) h)
  22.       ) ;_ end setq 至此取点结束, 如果用 vl-cmdf 命令以上赋值可以省略
  23.       (setvar "osmode" 0) ;_ 暂时取消
  24.       (command ".line" p1 p2 "")
  25.       (command ".line" p3 p4 "")
  26.       (command ".arc" p1 pl p3)
  27.       (command ".arc" p2 pr p4)
  28.       ;|
  29.        还可以用pline画图
  30.       (command ".pline" p2 "a" "s" pr p4 "l" p3 "a" "s" pl p1 "l" "c")
  31.       |;
  32.       (setq oldlt (getvar "celtype")) ;_当前线形
  33.       (if (tblsearch "ltype" "center")
  34.         (setvar "celtype" "center")
  35.         (progn
  36.           (command ".linetype" "l" "center" "acad.lin" "")
  37.           (setvar "celtype" "center")
  38.         )
  39.       )
  40.       (command ".line" p0 p0_ "")
  41.       (command ".line" p00 p00_ "")
  42.       (setvar "osmode" oldos)
  43.       (setvar "celtype" oldlt)
  44.     )
  45.   )
  46.   (princ)
  47. )

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

使用道具 举报

 楼主| 发表于 2004-10-19 18:49:28 | 显示全部楼层
谢谢3楼!

由于是刚学,身边也没有什么好的教材!你的lisp中的有些函数还不了解,请指教:

1.(setq p1         (mapcar '+ p (list (- l2) h2 0.))  mapcar ' 是什么意思?0后面的. 有什么作用?

2.(command ".line" p1 p2 "") 中line前面的.又起什么作用?

3.(if (tblsearch "ltype" "center") 中tblsearch是什么函数?

4.看了你的程序后,对我启发很大,发现我上面的程序只要在执行前关闭对象捕捉,程序执行就不会错!请问在LISP中如何关闭对象捕捉?是(setvar "osmod" 0)吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-27 17:05:36 | 显示全部楼层

楼上的姐姐帮帮我!————急!!!

我是初学lisp的,编号程序后,加载成功,可是就不能运用,画不出图来,请问怎么回事呀?感激!!
程序如下:
;this program will prompt you to enter three points
;of a triangle from the keyboard,or select three points
;by using the screen cursor,p1,p2,p3 are triangle corners
(defun c:triang1()
(setq p1(getpoint"\n enter first point of triangle:"))
(setq p2(getpoint"\n enter second point of triangle:"))
(setq p3(getpoint"\n enter third point of triangle:"))
(command"line" p1 p2 p3 "c")
)
显示出现的错误是:
命令: (command:triang1)
; 错误: no function definition: COMMAND:TRIANG1
谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-10-27 21:49:59 | 显示全部楼层
直接输入
triang1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-11-17 21:15:53 | 显示全部楼层

Re: 楼上的姐姐帮帮我!————急!!!

最初由 一生有你 发布
[B]我是初学lisp的,编号程序后,加载成功,可是就不能运用,画不出图来,请问怎么回事呀?感激!!
程序如下:
;this program will prompt you to enter three points
;of a triangle from the keyboard,or select ... [/B]

改成以下可能更好:
[php]
(defun c:test ()
  (setq p1 (getpoint "\n三角形第一点 : ")
        p2 (getpoint p1 "\n三角形第二点 : "))
  (grdraw p1 p2 1 3)
  (setq p3 (getpoint p2 "\n三角形第三点 : :"))
  (command "pline" p1 p2 p3 "c")
  (redraw)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 15:21 , Processed in 0.335017 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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