明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2944|回复: 11

自己写的一个lisp程序 出现了只能用一次就失效的情况 求助!!

  [复制链接]
发表于 2011-9-24 21:05 | 显示全部楼层 |阅读模式
1明经币


编的一个绘制螺纹的lisp程序
当载入lisp程序第一次运行时 程序可以正确绘制出所需要的图形
如下图



第二次运行这个程序的时候 就会出现线条错误  如下图




此外  还有一个问题是  在程序要求输入插入点时
必须选择坐标原点才能正常生成图形  如果插入点不是原点 而是随便一个点
图形错误 如下图




源文件  


提供几个程序需要输入的数据
外螺纹大径:133.34
外螺纹长度:114.3
内孔直径:0
半锥角:4.764
(摘自API标准)

刚接触lisp  请大大不吝指教!!


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

最佳答案

查看完整内容

你忘记把系统捕捉关闭了,在开始画线条时加入(setq os (getvar "osmode"))(setvar "osmode" 0),绘图结束后再把原来的系统捕捉参数恢复(setvar "osmode" os);这里的os是自己定义的变量,可以自己改为习惯的变量名。

点评

好东西,谢谢  发表于 2012-3-16 14:09
发表于 2011-9-24 21:05 | 显示全部楼层
你忘记把系统捕捉关闭了,在开始画线条时加入(setq os (getvar "osmode"))(setvar "osmode" 0),绘图结束后再把原来的系统捕捉参数恢复(setvar "osmode" os);这里的os是自己定义的变量,可以自己改为习惯的变量名。
回复

使用道具 举报

发表于 2011-9-24 21:31 | 显示全部楼层
(defun c:cc (/ p1 p2 p3 p4 p5 p6 q1 q2 q3 q4 q5 q6 m1 m2 m3 m4 n1 n2 L1 L2 L3 a)
  (setvar "cmdecho" 0)
  (setvar "angbase" 0)
  (setq osmode_save(getvar "osmode"))
  (setvar "osmode" 0)
  (setvar "angdir" 0)
  (graphscr)
  (setq L1 (getdist "输入外螺纹大径:"))
  (setq L2 (getdist "输入外螺纹长度:"))
  (setq L3 (getdist "输入内孔直径<无内孔输入0>:"))
  (setq a (getangle "输入半锥角:"))
  (setq p1 (getpoint "插入点:"))
  (setq p2 (polar p1 (/ pi 2) L1))
  (setq p3 (polar p2 (* a -1) (/ (- L2 5) (cos a))))
  (setq p4 (polar p3 (* (/ pi 6) -1) (/ 5 (cos (/ pi 6)))))
  (setq p6 (polar p1 a (/ (- L2 5) (cos a))))
  (setq p5 (polar p6 (/ pi 6) (/ 5 (cos (/ pi 6)))))
  (command "line" p1 p2 p3 p4 p5 p6 "c")
  (setq q1 (polar p1 a (/ 15.875 (cos a))))
  (setq q2 (polar p2 (* a -1) (/ 15.875 (cos a))))
  (setq q3 (polar p2 (* a -1) (/ 12.7 (cos a))))
  (setq q4 (polar p4 (- pi a) (/ (- L2 12.7) (cos a))))
  (setq q5 (polar p5 (+ pi a) (/ (- L2 12.7) (cos a))))
  (setq q6 (polar p1 a (/ 12.7 (cos a))))
  (command "line" q1 q2 "")
  (command "line" q5 q6 "")
  (command "line" q4 p4 "")
  (command "line" q5 p5 "")
  (setq m1 (list (car p1) (/ (+ (cadr p1) (cadr p2)) 2)))
  (setq m2 (list (car p4) (/ (+ (cadr p4) (cadr p5)) 2)))
  (setq m3 (polar m1 0 12.7))
  (setq m4 (polar m2 pi 5))
  (setq n1 (polar m1 (* (/ pi 2) -1) (/ L3 2)))
  (setq n2 (polar m2 (* (/ pi 2) -1) (/ L3 2)))
  (command "line" q3 m3 "")
  (command "line" p3 m4 "")
  (command "line" (list (car q3) (/ (+ (cadr q3) (cadr q4)) 2)) (list (/ (+ (car p3) (car p4)) 2) (/ (+ (cadr p3) (cadr p4)) 2)) "")
  (command "line" (list (car q5) (/ (+ (cadr q5) (cadr q6)) 2)) (list (/ (+ (car p5) (car p6)) 2) (/ (+ (cadr p5) (cadr p6)) 2)) "")
  (command "line" m1 m2 "")
  (command "line" n1 n2 "")
  (setvar "cmdecho" 1)
  (setvar "osmode" osmode_save)
  (princ)
)
回复

使用道具 举报

发表于 2011-9-24 23:10 | 显示全部楼层


  1. ;; 需要e派工具箱(XCAD)的支持:[url=http://xyp1964.ys168.com]http://xyp1964.ys168.com[/url]
  2. (defun c:tt (/ ilst ll1 ll2)
  3.   (cmdla0)
  4.   (defun main-pro ()
  5.     (while (setq p1 (getpoint "插入点: "))
  6.       (setvar "osmode" 0)
  7.       (setq a  (xyp-d2r ang)
  8.      p2 (polar p1 (/ pi 2) L1)
  9.      p3 (polar p2 (* a -1) (/ (- L2 5) (cos a)))
  10.      p4 (polar p3 (* (/ pi 6) -1) (/ 5 (cos (/ pi 6))))
  11.      p6 (polar p1 a (/ (- L2 5) (cos a)))
  12.      p5 (polar p6 (/ pi 6) (/ 5 (cos (/ pi 6))))
  13.      q1 (polar p1 a (/ 15.875 (cos a)))
  14.      q2 (polar p2 (* a -1) (/ 15.875 (cos a)))
  15.      q3 (polar p2 (* a -1) (/ 12.7 (cos a)))
  16.      q4 (polar p4 (- pi a) (/ (- L2 12.7) (cos a)))
  17.      q5 (polar p5 (+ pi a) (/ (- L2 12.7) (cos a)))
  18.      q6 (polar p1 a (/ 12.7 (cos a)))
  19.      q7 (list (car q3) (/ (+ (cadr q3) (cadr q4)) 2.))
  20.      q8 (list (car q5) (/ (+ (cadr q5) (cadr q6)) 2.))
  21.      m1 (list (car p1) (/ (+ (cadr p1) (cadr p2)) 2.))
  22.      m2 (list (car p4) (/ (+ (cadr p4) (cadr p5)) 2.))
  23.      m3 (polar m1 0 12.7)
  24.      m4 (polar m2 pi 5)
  25.      n1 (polar m1 (* (/ pi 2) -1) (/ L3 2.))
  26.      n2 (polar m2 (* (/ pi 2) -1) (/ L3 2.))
  27.       )
  28.       (xyp-Entmake-lwPolyline (list p1 p2 p3 p4 p5 p6) t)
  29.       (xyp-line q1 q2)
  30.       (xyp-line q5 q6)
  31.       (xyp-line q4 p4)
  32.       (xyp-line q5 p5)
  33.       (xyp-line q3 m3)
  34.       (xyp-line p3 m4)
  35.       (xyp-line q7 (xyp-get-MidPoint p3 p4))
  36.       (xyp-line q8 (xyp-get-MidPoint p5 p6))
  37.       (xyp-line m1 m2)
  38.       (xyp-line n1 n2)
  39.     )
  40.   )
  41.   (setq ll1 '(l1 l2 l3 ang)
  42. ll2 '(100. 200. 50. 0.)
  43.   )
  44.   (defun ajbcs () (xyp-Multiple-Settile ll1 ll2))
  45.   (xyp-initSet ll1 ll2)
  46.   (setq ilst '(("l1" "外螺纹直径" "real" "8")
  47.         ("l2" "外螺纹长度" "real" "8")
  48.         ("l3" "内孔直径" "real" "8")
  49.         ("ang" "半锥角" "real" "8")
  50.         "spacer;"
  51.         ("jbcs" "缺省参数" "button1" "(ajbcs)")
  52.         "spacer;"
  53.         "ioc"
  54.        )
  55.   )
  56.   (if (= (xyp-Dcl-Init Ilst "【绘制螺纹】" t) 1)
  57.     (main-pro)
  58.   )
  59.   (cmdla1)
  60. )

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2011-9-25 11:35 | 显示全部楼层
唉,错过了10个明经币啊!!!!!
回复

使用道具 举报

 楼主| 发表于 2011-9-26 21:04 | 显示全部楼层
lisfhust 发表于 2011-9-24 21:25
你忘记把系统捕捉关闭了,在开始画线条时加入(setq os (getvar "osmode"))(setvar "osmode" 0),绘图结束后再 ...

请问在什么情况下要关闭【系统捕捉】?
回复

使用道具 举报

发表于 2011-9-27 08:21 | 显示全部楼层
fergus1987 发表于 2011-9-26 21:04
请问在什么情况下要关闭【系统捕捉】?

“未注意系统捕捉”可能是初学者常常碰到的问题,对于涉及到点的时候就要考虑到是否要关闭捕捉状态。有时候取点需要打开捕捉,而进行程序绘制时,则需要关闭捕捉。
回复

使用道具 举报

 楼主| 发表于 2011-9-27 08:46 | 显示全部楼层
ljpnb 发表于 2011-9-27 08:21
“未注意系统捕捉”可能是初学者常常碰到的问题,对于涉及到点的时候就要考虑到是否要关闭捕捉状态。有时 ...

有点难懂 应该要多联系才能参透吧 谢谢你!
回复

使用道具 举报

发表于 2011-9-27 14:38 | 显示全部楼层
ljpnb 发表于 2011-9-27 08:21
“未注意系统捕捉”可能是初学者常常碰到的问题,对于涉及到点的时候就要考虑到是否要关闭捕捉状态。有时 ...

这个问题是很正常的,我也曾遇到过。对于编程我觉得最好就是随命令而开关所要的状态。主要命令运行前,一般加上(setq osmode_old(getvar "osmode")) (setq "osmode" 0) ...你的程序...(setq "osmode" osmode_old)这样就好了,这样不影响其它使用者(你写的程序可能比较好而被其它人使用哦!)。

点评

你这个方法很好,但是不完善。程序正常退出时可以恢复捕捉设置,但是异常退出时则不会恢复(比如按ESC键退出)。正解应该是自定义错误处理函数,好好研究下*error*的功能,明经上多得是  发表于 2011-10-3 21:25
回复

使用道具 举报

 楼主| 发表于 2011-9-28 08:43 | 显示全部楼层
革天明 发表于 2011-9-27 14:38
这个问题是很正常的,我也曾遇到过。对于编程我觉得最好就是随命令而开关所要的状态。主要命令运行前,一 ...

看来这是个很实用的功能! 再次受教! 谢谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 03:33 , Processed in 0.188667 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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