找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 636|回复: 8

[求助] [求助]:这样画多义线有问题吗?

[复制链接]
发表于 2005-4-30 15:12:35 | 显示全部楼层 |阅读模式

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

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

×
(command "pline" p11 p12 p13 p14 p15 p16"")

我调试前面的都没错,就是画出来的出错了。为什么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-30 15:28:08 | 显示全部楼层
是否为:
(command "pline" p11 p12 p13 p14 p15 p16 "")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-30 15:40:09 | 显示全部楼层
最初由 qjcpj 发布
[B]是否为:
(command "pline" p11 p12 p13 p14 p15 p16 "") [/B]


不是这个问题,我得到的点都是对的,就是画出来的线不对。.

;;;画剖断线
(defun c:ttt ()
(setvar "cmdecho" 0)
(setq p1 (getpoint"\n选择第一点"))
(setq p2 (getpoint"\n选择第二点"))
;;求两点的坐标角
(if (< (abs (-(car p1) (car p2)) ) 0.0001)
(setq tg (/ pi 2))
(setq tg (atan (/ (-(cadr p1) (cadr p2)) (-(car p1) (car p2)))))
);if结束
;;求两点的距离
(setq dis (sqrt (+ (* (-(car p1) (car p2)) (-(car p1) (car p2))) (* (-(cadr p1) (cadr p2)) (-(cadr p1) (cadr p2))) ) ) )
;;定义伸出长度
(setq d1 0.125)
;;定义中间长度
(setq d2 0.01)
;;求中点坐标
(setq midP (list (/ (+(car p1) (car p2)) 2) (/ (+(cadr p1) (cadr p2)) 2) 0))
;;求p11
(setq p11 (list (+ (car midP) (* dis (+ d1 0.5) (cos tg))) (+ (cadr midP) (* dis (+ d1 0.5) (sin tg))) 0 ))
;;求p12
(setq p12 (list (+ (car midP) (* dis d2 (cos tg))) (+ (cadr midP) (* dis d2 (sin tg))) 0 ))
;;求p13
(setq tg1 (- tg (/ pi 4)))
(setq p13 (list (+ (car midP) (* dis (* (sqrt 2) d2) (cos tg1))) (+ (cadr midP) (* dis (* (sqrt 2) d2) (sin tg1))) 0 ))
;;求16
(setq p16 (list (- (* (car midP) 2) (car p11)) (- (* (cadr midP) 2) (cadr p11)) 0))
;;求15
(setq p15 (list (- (* (car midP) 2) (car p12)) (- (* (cadr midP) 2) (cadr p12)) 0))
;;求14
(setq p14 (list (- (* (car midP) 2) (car p13)) (- (* (cadr midP) 2) (cadr p13)) 0))
;;转换到某一个层上
(command "-layer"  "s"  "0" "" )
(command "pline" p11 p12 p13 p14 p15 p16 "")
(setvar "cmdecho" 1)
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-30 17:16:42 | 显示全部楼层
在系统变量"osmode"为"0"时测试,绘图是正确的。"osmode"不为"0"时绘图不正确的,我的意见是如下修改:
;;;画剖断线
(defun c:ttt (/ os)
(setvar "cmdecho" 0)         
(setq os (getvar "osmode"))   ;此句为新添加
(setvar "osmode" 0);此句为新添加
(setq p1 (getpoint"\n选择第一点"))
  ......
;;转换到某一个层上
(command "-layer" "s" "0" "" )
(command "pline" p11 p12 p13 p14 p15 p16 "")
(setvar "osmode" os)  ;此句为新添加
(setvar "cmdecho" 1)
(princ)
)

以下是我在AutoCAD 2000的VLISP控制台上调试过程,以下调试系统变量"osmode"为"0"

; 1 表格 从 #<editor "D:/CCAD/LISP/adebug.LSP"> 加载
_$
_$ (c:ttt)
_$ p1
(135.512 98.073 0.0)
_$ p2
(199.841 147.522 0.0)
_$ p11
(207.882 153.703 0)
_$ p12
(168.32 123.292 0)
_$ p13
(168.814 122.649 0)
_$ p14
(166.539 122.946 0)
_$ p15
(167.033 122.303 0)
_$ p16
(127.471 91.8919 0)
_$
_$ (command "pline" p11 p12 p13 p14 p15 p16 "") ;使用此句与使用(c:ttt)所绘object完全一样。
nil
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-5-3 22:07:18 | 显示全部楼层
如果存在捕捉(osnap),画线时如果图中物体较多,实际操作点会因捕捉形式发生变化,肯定会出错。
改成这样就应该没问题了:
[php]
;;;画剖断线
(defun c:ttt ()
  (setvar "cmdecho" 0)
  (setq        p1 (getpoint "\n选择第一点 : ")
        p2 (getpoint p1 "\n选择第二点 : ")
        os (getvar "osmode")
  )
  (if (< (abs (- (car p1) (car p2))) 0.0001)
    (setq tg (/ pi 2))
    (setq tg (atan (/ (- (cadr p1) (cadr p2)) (- (car p1) (car p2)))))
  )
  (setq    dis        (sqrt (+ (* (- (car p1) (car p2)) (- (car p1) (car p2)))
                 (* (- (cadr p1) (cadr p2)) (- (cadr p1) (cadr p2)))
              )))
  (setq        d1 0.125
        d2 0.01
  )
  (setq        midP (list (/ (+ (car p1) (car p2)) 2)
                   (/ (+ (cadr p1) (cadr p2)) 2)
                   0)
        p11  (list (+ (car midP) (* dis (+ d1 0.5) (cos tg)))
                   (+ (cadr midP) (* dis (+ d1 0.5) (sin tg)))
                   0)
        p12  (list (+ (car midP) (* dis d2 (cos tg)))
                   (+ (cadr midP) (* dis d2 (sin tg)))
                   0)
        tg1  (- tg (/ pi 4))
        p13  (list (+ (car midP) (* dis (* (sqrt 2) d2) (cos tg1)))
                   (+ (cadr midP) (* dis (* (sqrt 2) d2) (sin tg1)))
                   0)
        p16  (list (- (* (car midP) 2) (car p11))
                   (- (* (cadr midP) 2) (cadr p11))
                   0)
        p15  (list (- (* (car midP) 2) (car p12))
                   (- (* (cadr midP) 2) (cadr p12))
                   0)
        p14  (list (- (* (car midP) 2) (car p13))
                   (- (* (cadr midP) 2) (cadr p13))
                   0)
  )
  ;;转换到某一个层上
(command "-layer" "s" "0" "")
  (setvar "osmode" 0)
  (command "pline" p11 p12 p13 p14 p15 p16 "")
  (setvar "osmode" os)
  (setvar "cmdecho" 1)
  (princ)
)
[/php]
剖断线的大小应是固定的。
可以试试:“折断波浪云图线”程序
http://www.xdcad.net/forum/showthread.php?s=&threadid=287063
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-5-3 22:57:42 | 显示全部楼层
我这也有一个画剖断线的程序,如下:
(defun c:ttt(/ pt1 pt2 pt3 pt4 pt5 pt6 ang dis old old1)
   (setq old1 (getvar "blipmode"))
   (setvar "blipmode" 0)
   (setq pt1 (getpoint "\nSelect the first point:"))
   (setq pt2 (getpoint pt1 "\nSelect the second point:"))
   (setq old (getvar "osmode"))
   (setq dis (distance pt1 pt2))
   (setq ang (angle pt1 pt2))
   (setq pt1 (polar pt1 (+ pi ang) (* dis 0.15)))
   (setq pt2 (polar pt2 ang (* dis 0.15)))
   (setq pt3 (polar pt1 ang (* dis 0.6)))
   (setq pt4 (polar pt3 (- ang (* (/ 80.0 180.0) pi)) (* dis 0.15)))
   (setq pt5 (polar pt4 (+ ang (* (/ 80.0 180.0) pi)) (* dis 0.3)))
   (setq pt6 (polar pt5 (- ang (* (/ 80.0 180.0) pi)) (* dis 0.15)))
   (setvar "osmode" 0)
   (command "_Pline" pt1 "w" 0 0 pt3 pt4 pt5 pt6 pt2 "")
   (setvar "osmode" old)
   (setvar "blipmode" old1)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-3 23:56:59 | 显示全部楼层
最初由 lh869 发布
[B]我这也有一个画剖断线的程序,如下:
(defun c:ttt(/ pt1 pt2 pt3 pt4 pt5 pt6 ang dis old old1)
   (setq old1 (getvar "blipmode"))
   (setvar "blipmode" 0)
   (setq pt1 (getpoint "\nSelect the first po... [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 05:26 , Processed in 0.384756 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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