找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1098|回复: 13

[求助] [求助]:,帮帮我,画直线有时候乱跑?

[复制链接]
发表于 2007-3-16 17:57:13 | 显示全部楼层 |阅读模式

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

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

×
我写了一个画直线时加倒角的程序,就是画三根直线,两端的表示是角,倒角是55度,平时的时候没问题,但是当选择点时,这个点边上也有其它的交点时(很靠近,捕捉时要比较注意),P3,P4点就会不正确,线就会乱飞,但是时用调试程序检查点的位置又是正确的,请问为什么?

(defun c:wire()
(graphscr)
  
(setq p1 (getpoint "Enter first point"))
(setq p2 (getpoint "Enter second point"))
  
(setq ang1 (angle p1 p2))
   
(setq p3 (polar p1 (+ ang1 0.96) 350))
  
(setq p4 (polar p2 (+ ang1 2.181) 350))

(command "line" p1 p3 p4 p2 "")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-3-16 20:36:24 | 显示全部楼层
把捕捉功能关闭或在command前面加上(setvar "OSMODE" 0)就可以了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-16 22:12:52 | 显示全部楼层
(setq old_osmode (getvar "osmode"))

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

使用道具 举报

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

使用道具 举报

发表于 2007-3-19 23:10:52 | 显示全部楼层
在画线时可以根据需要按功能键关闭捕捉功能,需要时再打开,用程序设置捕捉功能灵活性差.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2007-3-20 08:01:54 | 显示全部楼层
最初由 tsml 发布
[B]楼上的,这样做了以后会有问题,就是对象捕捉有时会恢复不了,请问为什么? [/B]

加入错误处理机制

  1. (defun c:wire(/ fun_be fun_en errnew errold)
  2.   (defun fun_be()
  3.     [color=red](setq old_osmode (getvar "osmode")) [/color]
  4.     (setq errold *error*)
  5.     (setq *error* errnew)
  6.   )
  7.   (defun errnew(msg)
  8.     (princ msg)
  9.     (fun_en)
  10.   )

  11. (defun fun_en()
  12.   [color=red](setvar "osmode" old_osmode) [/color]
  13.   (setq *error* errold)
  14. )
  15.   ;;---------------
  16.   ;;主程序开始
  17.   (fun_be)
  18.   (graphscr)
  19.   (setq p1 (getpoint "Enter first point"))
  20.   (setq p2 (getpoint "Enter second point"))
  21.   (setq ang1 (angle p1 p2))

  22.   (setq p3 (polar p1 (+ ang1 0.96) 350))

  23.   (setq p4 (polar p2 (+ ang1 2.181) 350))
  24.   [color=red](setvar "osmode" 0 )[/color]
  25.   (command "line" p1 p3 p4 p2 "")
  26.   (fun_en)
  27. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7231个

财富等级: 富甲天下

发表于 2007-3-20 08:02:00 | 显示全部楼层
也可以这样安插
(setvar "osmode" 0 )
(command "line" p1 p3 p4 p2 "")
(setvar "osmode" old_osmode)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-20 13:28:31 | 显示全部楼层
1、版主,你是不是写错了,    (setq *error errnew))中的error少加了个双引号?
2、(fun_be)不能放在程序开始,否则一开始就无法捕捉对象点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-20 14:50:35 | 显示全部楼层
程序就是要在无法捕捉对象点情况下才能正常运行,
(setq *error errnew)少个"*"号,应是(setq *error* errnew)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-21 09:06:20 | 显示全部楼层

还有一个问题

还有个问题就是执行完程序后按撤消命令,往往会执行到(setvar "osmode" 0 )后面,无对象捕捉状态,再次撤消,对象捕捉才返回正确状态,请问怎么解决,可以撤消一次把整个程序撤消完?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-21 09:06:20 | 显示全部楼层
我觉得放在 (getpoint "Enter first point"))后才行,否则一开始就无法捕捉了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-3-21 09:23:30 | 显示全部楼层
试一试下面这个:

  1. (defun c:test (/ old-osmode p1 p2 ang1 p3 p4)
  2.     (setq old_osmode (getvar "osmode"))
  3.     (graphscr)
  4.     (if        (setq p1 (getpoint "\nEnter first point:"))
  5.         (if (setq p2 (getpoint p1 "Enter second point:"))
  6.             (progn
  7.                 (setq ang1 (angle p1 p2)
  8.                       p3   (polar p1 (+ ang1 0.96) 350)
  9.                       p4   (polar p2 (+ ang1 2.181) 350)
  10.                 )
  11.                 (setvar "osmode" 0)
  12.                 (command "_pline" p1 p3 p4 p2 "")
  13.             )
  14.         )
  15.     )
  16.     (setvar "osmode" old_osmode)
  17.     (princ)
  18. )

<br>
题外话:楼主的代码运行时,当P1与P2两点间距较小情况下,会产生不合常理的结果,应该在代码中予以判断并避免。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-3-22 12:27:19 | 显示全部楼层
要学习开发,请先学习Acad本身。

  1. ;;;zml84 于 2007-03-22 12:25
  2. (defun c:test (/ old-osmode p1 p2 ang1 p3 p4)
  3.   (graphscr)
  4.   (if (setq p1 (getpoint "\n第一点:"))
  5.     (if        (setq p2 (getpoint p1 "第二点:"))
  6.       (progn
  7.         (setq ang1 (angle p1 p2)
  8.               p3   (polar p1 (+ ang1 0.96) 350)
  9.               p4   (polar p2 (+ ang1 2.181) 350)
  10.         )
  11.         (setq old_osmode (getvar "osmode"))
  12.         (command "_.undo" "be")
  13.         (setvar "osmode" 0)
  14.         (command "_pline" p1 p3 p4 p2 "")
  15.         (setvar "osmode" old_osmode)
  16.         (command "_.undo" "e")
  17.       )
  18.     )
  19.   )
  20.   (princ)
  21. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 15:48 , Processed in 0.442951 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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