找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 812|回复: 5

[求助]:帮忙看一下这段画折断线的lisp代码

[复制链接]
发表于 2004-3-31 09:07:53 | 显示全部楼层 |阅读模式

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

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

×
帮忙看一下以下画折断线的代码:
[program]
(defun c:test ()
   (setq p0 (getpoint "\nInput point"))
   (setq pe (getpoint p0 "\nInput Second Point:"))
   (setq dist (distance p0 pe))
   (if (> dist 200.0)
      (setq h (/ dist 50.0)) (setq h (/ dist 40.0))   
   )
   (if (< dist 100.00) (setq h (/ dist 30.0)))
   (if (< dist 50.00) (setq h (/ dist 20.0)))
   (if (< dist 20.00) (setq h (/ dist 12.0)))
   (setq a (angle p0 pe)
         p1 (polar p0 a (- (/ dist 2) h))
         p2 (polar p1 (+ a (/ pi 2)) h)
         p4 (polar p0 a (+ (/ dist 2) h))
         p3 (polar p4 (- a (/ pi 2)) h)
   )
   (princ p0)
   (princ p1)
   (princ p2)
   (princ p3)
   (princ p4)
   (princ pe)
   (vl-cmdf "pline" p0 p1 p2 p3 p4 pe "")
) [/program]

为什么p0,p1,p2,p3,p4,pe都显示正确,可最后一行画出来的折断线不对?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-3-31 10:26:43 | 显示全部楼层
你这是改的别人的程序吧?  没有问题呀? "最后一行画出来的折断线" 有什么不对?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-31 11:29:46 | 显示全部楼层
经过测试,程序改为如下,没有出现任何问题,原因是没有把捕捉取消,导致画线时捕捉点[program]
(defun c:test (/ oldosmode p0 pe p1 p2 p3 p4 a dist)
  (setq oldosmode (getvar "osmode"))
  (setvar "osmode" 0)
  (setq p0 (getpoint "\nInput point"))
  (setq pe (getpoint p0 "\nInput Second Point:"))
  (setq dist (distance p0 pe))
  (cond                                        ;cond
    ((> dist 200.0) (setq h (/ dist 50.0)))
    ((and (> dist 200.0) (< dist 100.00))
     (setq h (/ dist 40.0))
    )
    ((and (< dist 100.00) (> dist 50.00))
     (setq h (/ dist 30.0))
    )
    ((and (< dist 50.00) (> dist 20.00)) (setq h (/ dist 20.0)))
    ((< dist 20.00) (setq h (/ dist 12.0)))
  )                                        ;endcond
  (setq        a  (angle p0 pe)
        p1 (polar p0 a (- (/ dist 2) h))
        p2 (polar p1 (+ a (/ pi 2)) h)
        p4 (polar p0 a (+ (/ dist 2) h))
        p3 (polar p4 (- a (/ pi 2)) h)
  )
  (princ p0)
  (princ p1)
  (princ p2)
  (princ p3)
  (princ p4)
  (princ pe)
  (vl-cmdf "pline" p0 p1 p2 p3 p4 pe "")
  (setvar "osmode" oldosmode)
)[/program]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-31 14:40:19 | 显示全部楼层
最初由 lsjjm 发布
[B]你这是改的别人的程序吧?  没有问题呀? "最后一行画出来的折断线" 有什么不对? [/B]


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

使用道具 举报

发表于 2004-3-31 22:20:25 | 显示全部楼层
没把捕捉osmode设为0即取消,导致画时的东西不是想要的,这个对初学者来说是经常犯的错误。以前我也吃过这种苦,后来不犯了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-1 08:22:46 | 显示全部楼层
非常感谢大家的帮助,终于完成了一个画折断线的代码,弄出来与需要的人分享,代码如下:

(defun c:zdx(/ oldosmode oldecho oldplinewid p0 pe pm p1 p2 p3 p4 a dist h)
   (vl-load-com)
   (setq oldosmode (getvar "OSMODE"))
   (setq oldecho (getvar "CMDECHO"))
   (setq oldplinewid (getvar "PLINEWID"))
   (setvar "osmode" 0)
   (setvar "CMDECHO" 0)
   (setvar "PLINEWID" 0)
   (setq p0 (getpoint "\nInput first point:"))
   (setq pe (getpoint p0 "\nInput Second Point:"))
   (setq dist (distance p0 pe))
   (if (> dist 200.0)
      (setq h (/ dist 50.0)) (setq h (/ dist 40.0))   
   )
   (if (< dist 100.00) (setq h (/ dist 30.0)))
   (if (< dist 50.00) (setq h (/ dist 20.0)))
   (if (< dist 20.00) (setq h (/ dist 12.0)))
   (setq a (angle p0 pe)
         pm (polar p0 a (/ dist 2))
         p1 (polar p0 a (- (/ dist 2) (/ h 2)))
         p2 (polar pm (+ a (/ pi 2)) h)
         p3 (polar pm (- a (/ pi 2)) h)
         p4 (polar p0 a (+ (/ dist 2) (/ h 2)))
   )
   (vl-cmdf "pline" p0 p1 p2 p3 p4 pe "")
   (setvar "PLINEWID" oldplinewid)
   (setvar "CMDECHO" oldecho)
   (setvar "OSMODE" oldosmode)
   (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-21 02:50 , Processed in 0.176877 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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