找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 508|回复: 1

[求助] [求助]:动态画线程序有时可用有时出错,高手帮忙!

[复制链接]
发表于 2006-2-11 22:53:40 | 显示全部楼层 |阅读模式

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

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

×
自编了一个动态画平行线的程序(选择被平行对象,随着鼠标移动出现它的平行线,点鼠标左键跳出对话框响应此时的偏移距离也可更改数值,点确定及刻画出),但有时用的挺好,有时却出错,比如,两次都选同一个对象作偏移的对象,就容易出问题,不知何因,还请高手帮忙看看!
;;;----------------------------------------------------------
;;;画动态平行线
(defun draw_dline (/ os en endata tmp a p dd)
  (defun dcl_dia1a (en / dcl_id ostr nstr oke) ;调用对话框子函数
    (setq dcl_id (load_dialog "pattendia.dcl"))
    (if        (not (new_dialog "length010" dcl_id))
      (exit)
    )
    (setq ostr (rtos (distance (cadr a) p)))
    (set_tile "l" ostr)
    (setq nstr ostr)
    (mode_tile "l" 2)
    (action_tile "l" "(setq nstr $value) ")
    (action_tile "accept" "(done_dialog 1)")
    (action_tile "cancel" "(entdel (entlast))(done_dialog 0)")
    (setq oke (start_dialog))
    (if        (= oke 1)
      (progn
        (entdel (entlast))
        (command "offset" (atof nstr) en (cadr a) "")
      )
    )
    (unload_dialog dcl_id)
  )
  ;;子函数结束
  (vl-load-com)
  (setvar "cmdecho" 0)
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (setq ent (car (entsel "\n 选取被平行线:")))
  (setq endata (entget ent))
  (command ".copy" ent "" "@" "@")

  (SETQ tmp t)
  (while tmp
    (setq a (grread t 4 0))
    (cond
      ((= (car a) 5)
       (entdel (entlast))
       (setq p (vlax-curve-getClosestPointTo
                 (vlax-ename->vla-object ent)
                 (cadr a)
               )
       )
       (setq dd (distance (cadr a) p))
       (command ".offset" dd ent (cadr a) "")

      )
      ((= (car a) 3)
       (entdel (entlast))
       (setq p (vlax-curve-getClosestPointTo
                 (vlax-ename->vla-object ent)
                 (cadr a)
               )
       )
       (setq dd (distance (cadr a) p))
       (command ".offset" dd ent (cadr a) "")

       (setq tmp nil)

      )
    )
  )
  (dcl_dia1a ent)
  (setvar "osmode" os)
  (princ)
)


//平行线对话框 pattendia.dcl
  length010: dialog{
        label="平行线";
        :concatenation{
                  :text_part {label="间隔=";}
                  :edit_box{edit_width=15;key="l";}
                  :text_part {label="cm";}
        }
        spacer_1;
        ok_cancel;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-2-14 14:40:45 | 显示全部楼层
把DD改成(+ dd 0.001)即可,当DD是0的时候程序会出错,因为offset的偏移距离不能为0
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 02:36 , Processed in 0.187629 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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