找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 751|回复: 13

[求助]:lisp有问题

[复制链接]
发表于 2005-11-16 21:13:34 | 显示全部楼层 |阅读模式

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

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

×
刚开始学习lisp,写了一个,第一次运行可以,第二次就出错。请帮忙检查修改。是不是全局变量和局部变量应用问题?

  1.   [FONT=courier new]
  2. (defun c:jpg(/ l w h ew pa pb pc pd ma mb mc md me mf mg na ne e1 e2 e3 e4 ss ss1 )
  3.         (setvar "cmdecho" 0)
  4.         (setvar "blipmode" 0)
  5.         ;;以下需要输入
  6.         (setq pa (getpoint "\n起点:"))
  7.         (setq l (getdist "\n长:"))
  8.         (setq w (getdist "\n宽:"))
  9.         (setq h (getdist "\n高:"))
  10.         (setq ew (getdist "\n贴位宽:"))
  11.         ;;以下需要求出
  12.         (setq pb (polar pa 0 l))
  13.         (setq pc (polar pb (* pi 0.5) w))
  14.         (setq pd (polar pc pi l))
  15.         (setq ma (polar pb 0 h))
  16.         (setq mb (polar ma pi (- h 1.5)))
  17.         (setq mc (polar mb (* pi 1.5) 3))
  18.         (setq md (polar mc 0 (- ew 1.5)))
  19.         (setq me (polar md (* pi 1.5) (- h 3)))
  20.         (setq mf (polar me pi ew))
  21.         (setq mg (polar mf (* pi 0.5) (- h 1.5)))
  22.         (setq na (polar ma (* pi 0.5) w))
  23.         (setq ne (polar me pi (+ (* ew 2) l)))
  24.         ;;以下依据pa、pb、pc、pd点画矩形
  25.         (command "pline" pa pb pc pd "c")
  26.         ;;以下依据ma、pb、mb、mc、md点画线并命名图元
  27.         (command "pline" ma mb "a" mc "l" md me "")
  28.         (setq e1 (entlast))
  29.         ;;以下依据mb、me点画线并命名图元
  30.         (command "line" mf mg "")
  31.         (setq e2 (entlast))
  32.         ;;建立选择集
  33.         (setq ss (ssadd e1))
  34.         (ssadd e2 ss)
  35.         ;;画其它三个角
  36.         (command "mirror" ss "" "m2p" pa pb "m2p" pc pd "n")
  37.         (command "mirror" ss "" "m2p" pa pd "m2p" pb pc "n")
  38.         (command "rotate" ss "" "m2p" pa pc "c" "180")
  39.         ;;画ma-na线 me-ne并镜像
  40.         (command "line" ma na "")
  41.         (setq e3 (entlast))
  42.         (command "line" me ne "")
  43.         (setq e4 (entlast))
  44.         (setq ss1 (ssadd e3))
  45.         (ssadd e4 ss1)
  46.         (command "rotate" ss1 "" "m2p" pa pc "c" "180")
  47.         (command "pedit" "m" "all" "" "j" "" "")
  48.         (command "zoom" "e" "")
  49.         (prin1)
  50. )
  51.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-16 21:54:32 | 显示全部楼层
"m2p"是什么选项?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-17 12:04:59 | 显示全部楼层
最初由 xyp1964 发布
[B]"m2p"是什么选项? [/B]



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

使用道具 举报

发表于 2005-11-17 12:58:44 | 显示全部楼层
最初由 ewenhui 发布
[B]


“m2p”或“mtp”是两点之间的中点。 [/B]

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

使用道具 举报

 楼主| 发表于 2005-11-17 13:20:28 | 显示全部楼层
定位两点的中点

命令行: 在定位点的提示下,输入 mtp

两点的中点 (MTP) 命令修饰符可以在运行对象捕捉或对象捕捉替代时使用。 (OSNAP 命令)

在定位点的任何命令提示下,输入 mtp 或 m2p。


类似于“cen”、“qua”、“tan”等等。初学者不是很懂,不能这样用吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-17 13:38:07 | 显示全部楼层
  1. [FONT=courier new](defun c:jpg (/        pa pb pc pd ma mb mc md        me mf mg na ne e1 e2 e3        e4 ss
  2.               ss1)
  3.   (setvar "cmdecho" 0)
  4.   (setvar "blipmode" 0)
  5.   ;;以下需要输入
  6.   (setq        pa (getpoint "\n起点:")
  7.         l  (UREAL 7 "" "\n长" l)
  8.         w  (UREAL 7 "" "\n宽" w)
  9.         h  (UREAL 7 "" "\n高" h)
  10.         ew (UREAL 7 "" "\n贴位宽" ew)
  11.   )
  12.   ;;以下需要求出
  13.   (setq pb (polar pa 0 l))
  14.   (setq pc (polar pb (* pi 0.5) w))
  15.   (setq pd (polar pc pi l))
  16.   (setq ma (polar pb 0 h))
  17.   (setq mb (polar ma pi (- h 1.5)))
  18.   (setq mc (polar mb (* pi 1.5) 3))
  19.   (setq md (polar mc 0 (- ew 1.5)))
  20.   (setq me (polar md (* pi 1.5) (- h 3)))
  21.   (setq mf (polar me pi ew))
  22.   (setq mg (polar mf (* pi 0.5) (- h 1.5)))
  23.   (setq na (polar ma (* pi 0.5) w))
  24.   (setq ne (polar me pi (+ (* ew 2) l)))
  25.   ;;以下依据pa、pb、pc、pd点画矩形
  26.   (command "pline" pa pb pc pd "c")
  27.   ;;以下依据ma、pb、mb、mc、md点画线并命名图元
  28.   (command "pline" ma mb "a" mc "l" md me "")
  29.   (setq e1 (entlast))
  30.   ;;以下依据mb、me点画线并命名图元
  31.   (command "line" mf mg "")
  32.   (setq e2 (entlast))
  33.   ;;建立选择集
  34.   (setq ss (ssadd e1))
  35.   (ssadd e2 ss)
  36.   ;;画其它三个角
  37.   (command "mirror" ss "" (_midp pa pb) (_midp pc pd) "n")
  38.   (command "mirror" ss "" (_midp pa pb) (_midp pb pc) "n")
  39.   (command "rotate" ss "" (_midp pa pc) "180")
  40.   ;;画ma-na线 me-ne并镜像
  41.   (command "line" ma na "")
  42.   (setq e3 (entlast))
  43.   (command "line" me ne "")
  44.   (setq e4 (entlast))
  45.   (setq ss1 (ssadd e3))
  46.   (ssadd e4 ss1)
  47.   (command "rotate" ss1 "" (_midp pa pc) "180")
  48.   (command "pedit" "m" "all" "" "Y" "j" "" "")
  49.   (command "zoom" "e")
  50.   (princ)
  51. )
  52. (defun _midp (p1 p2)
  53.   (list        (/ (+ (car p1) (car p2)) 2)
  54.         (/ (+ (cadr p1) (cadr p2)) 2)
  55.   )
  56. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-17 15:42:47 | 显示全部楼层
还是老问题:
①第一次正常,第二次如果输入的数字比第一次大,通过,第三次失败。
②第一次正常,第二次如果输入的数字比第一次小,失败。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-17 18:05:41 | 显示全部楼层
最初由 ewenhui 发布
[B]还是老问题:
①第一次正常,第二次如果输入的数字比第一次大,通过,第三次失败。
②第一次正常,第二次如果输入的数字比第一次小,失败。 [/B]

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

使用道具 举报

 楼主| 发表于 2005-11-17 20:16:43 | 显示全部楼层
我要的图形一个款式多种尺寸,用此lisp的结果如附件,出错的地方是第二次或第三次画ma-mb线时mb点错误,而变成画ma-pb。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-17 21:40:05 | 显示全部楼层
按图重新编程:
  1. [FONT=courier new]
  2. (load "xyp_lib")
  3. ;|加载通用函数(可在签名栏直接下载)
  4. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  5. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  6. ★1·在acad.lsp中增加(load"xyp_lib")
  7. ■2·在每个程序内增加(load"xyp_lib")
  8. ■3·在command下,输入(load"xyp_lib")
  9. ■4·在菜单.mnl中增加(load"xyp_lib")
  10. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  11. [COLOR=red] ★通用函数下载地址:[/COLOR]
  12. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  13. |;

  14. (defun c:test ()
  15.   (CMDLA0)
  16.   (setvar "osmode" 0)
  17.   (setq        pt0  (getpoint "\n起点:")
  18.         l    (UREAL 7 "" "\n长" l)
  19.         w    (UREAL 7 "" "\n宽" w)
  20.         h    (UREAL 7 "" "\n高" h)
  21.         ew   (UREAL 7 "" "\n贴位宽" ew)
  22.         pt1  (list (+ (car pt0) l) (+ (cadr pt0) w))
  23.         pt00 (xyp-get-MidPoint pt0 pt1)
  24.         pt2  (list (- (car pt0) h) (cadr pt0))
  25.         pt3  (list (car pt2) (+ (cadr pt2) (/ w 2.0)))
  26.         pt4  (list (- (car pt0) 1.5) (cadr pt0))
  27.         pt5  (list (car pt4) (- (cadr pt4) 3.0))
  28.         pt6  (list (- (car pt5) (- ew 1.5)) (cadr pt5))
  29.         pt7  (list (car pt6) (- (cadr pt6) (- h 3)))
  30.         pt8  (list (+ (car pt7) ew (/ l 2.0)) (cadr pt7))
  31.         pt9  (list (car pt0) (- (cadr pt0) 1.5))
  32.         pt10 (list (car pt0) (- (cadr pt0) h))
  33.   )
  34.   (mkla "test1" 1)
  35.   (command "rectang" pt0 pt1)
  36.   (mkla "test2" 2)
  37.   (command "pline" pt3 pt2 pt4 "a" pt5 "l" pt6 pt7 pt8 "")
  38.   (setq s1 (entlast))
  39.   (command "mirror" s1 "" pt00 pt3 "")
  40.   (setq s2 (entlast))
  41.   (command "mirror" s1 "" pt00 pt8 "")
  42.   (setq s3 (entlast))
  43.   (command "mirror" s3 "" pt00 pt3 "")
  44.   (setq s4 (entlast))
  45.   (command "pedit" "m" s1 s2 s3 s4 "" "j" "" "")
  46.   (mkla "test3" 3)
  47.   (command "line" pt9 pt10 "")
  48.   (setq s1 (entlast))
  49.   (command "array" s1 "" "p" pt00 2 360 "")
  50.   (setq s2 (entlast))
  51.   (command "mirror" s1 s2 "" pt00 pt8 "")
  52.   (CMDLA1)
  53. )[/FONT]

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

使用道具 举报

已领礼包: 11286个

财富等级: 富甲天下

发表于 2005-11-17 22:57:52 | 显示全部楼层
[php]
(defun c:jpg(/ l w h ew pa pb pc pd ma mb mc md me mf mg na ne e1 e2)
        (setvar "cmdecho" 0)
        (setvar "blipmode" 0)
        (setvar "osmode" 0)
        ;;以下需要输入
        (setq pa (getpoint "\n起点:"))
        (setq l (getdist "\n长:"))
        (setq w (getdist "\n宽:"))
        (setq h (getdist "\n高:"))
        (setq ew (getdist "\n贴位宽:"))
        ;;以下需要求出
        (setq pb (polar pa 0 l))
        (setq pc (polar pb (* pi 0.5) w))
        (setq pd (polar pc pi l))
        (setq ma (polar pb 0 h))
        (setq mb (polar ma pi (- h 1.5)))
        (setq mc (polar mb (* pi 1.5) 3))
        (setq md (polar mc 0 (- ew 1.5)))
        (setq me (polar md (* pi 1.5) (- h 3)))
        (setq mf (polar me pi ew))
        (setq mg (polar mf (* pi 0.5) (- h 1.5)))
        (setq na (polar ma (* pi 0.5) w))
        (setq ne (polar me pi (+ (* ew 2) l)))
        ;;以下依据pa、pb、pc、pd点画矩形
        (command "pline" pa pb pc pd "c")
        ;;以下依据ma、pb、mb、mc、md点画线并命名图元
        (command "pline" ma mb "a" mc "l" md me "")
        (setq e1 (entlast))
        ;;以下依据mb、me点画线并命名图元
        (command "line" mf mg "")
        (setq e2 (entlast))
        ;;画其它三个角
        (command "mirror" e1 e2 ""
          (polar pa (angle pa pb) (/ (distance pa pb) 2))
          (polar pc (angle pc pd) (/ (distance pc pd) 2)) "n")
        (command "mirror" e1 e2 ""
          (polar pa (angle pa pd) (/ (distance pa pd) 2))
          (polar pb (angle pb pc) (/ (distance pb pc) 2)) "n")
        (command "copy" e1 e2 "" pa pa)
        (command "rotate" e1 e2 ""
          (polar pa (angle pa pc) (/ (distance pa pc) 2)) "180")
        ;;画ma-na线 me-ne并镜像
        (command "line" ma na "")
        (setq e1 (entlast))
        (command "line" me ne "")
        (setq e2 (entlast))
        (command "copy" e1 e2 "" pa pa)
        (command "rotate" e1 e2 ""
          (polar pa (angle pa pc) (/ (distance pa pc) 2)) "180")
        (command "pedit" "m" "all" "" "j" "" "")
        (command "zoom" "e" "")
        (prin1)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-18 13:39:10 | 显示全部楼层
多谢二位的支持!二位的lisp都可以正常运行,而且连我写的(一楼)也正常运行(今天)!!!非常非常郁闷!请问是什么原因?病毒?
刚开始学,不知我的思路健康吗?因为只熟悉cad的命令,所以用command多些。请指点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-18 13:48:18 | 显示全部楼层
最初由 ewenhui 发布
[B]多谢二位的支持!二位的lisp都可以正常运行,而且连我写的(一楼)也正常运行(今天)!!!非常非常郁闷!请问是什么原因?病毒?
刚开始学,不知我的思路健康吗?因为只熟悉cad的命令,所以用command多些。请指点... [/B]

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 01:05 , Processed in 0.211516 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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