myjping 发表于 2012-9-17 10:18:53

错误函数求助

本帖最后由 myjping 于 2012-9-18 13:02 编辑

做了个动态移动的东东,基本达到了要求,比MOVE少一步,有时候挺方便的,但问题有两外:
1,按下ESC 时不能返回初始状态
2,(grdraw pt2 ptg1 -1 1)如果换成(grdraw pt2 ptg1 1 1)即要用红线就会显示出很多线,按说我上面有 (if (/= pt3 nil)(grdraw pt2 pt3 -1 1))会把线反显的啊,为什么不起做用






(defun c:mm ( / ent i mouse pt1 ptg ss pt2 pt3 ptg1 *error*_Old *error*_New)
   (princ "\n 选取要移动的多个对象[右击退出]...")
   (setq *error*_Old *error*)      ;保存出错处理函数
   (setq *error* *error*_New)
   (if (null CurDoc)
      (setq CurDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
   )
   (setq ent (ssget))
   (RedrawSel ent 3)
   (while (and(/= ent nil)(= (car (setq mouse (grread mouse 5 2))) 5))
          (setq i 0)
          (setq ptg1 (cadr mouse) )
          (setq ptg (trans (cadr mouse) 1 0))
          ;(princ ptg)
          (if (= pt1 nil) (setq pt1 ptg))
          (if (= pt2 nil) (setq pt2 ptg1))
          (if (/= pt3 nil)(grdraw pt2 pt3 -1 1));反显
         
          (while (setq ss (ssname ent i))
             (vla-move (vlax-ename->vla-object ss) (vlax-3d-point pt1)(vlax-3d-point ptg))   
             (setq i (1+ i))
         )
          (setq pt1 ptg )
          (setq pt3 ptg1 )
      (grdraw pt2 ptg1 -1 1);反显
      )
   
; )
   (RedrawSel ent 4)
   (redraw)
   (vla-EndUndoMark curdoc)
   (princ)
   )
;;;重画选择集
;;;出错处理
(defun *error*_New (msg)
(setq *error* *error*_Old)
(if (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
    (if (= (getvar "LOCALE") "CHS")
      (princ "\n你按了强制退出")
      (princ "\nYou cancelled The operation!")
    )
    (princ (strcat "\n" msg))
)
(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) ;回退,为什么会没用呢
(princ)
)
(defun RedrawSel (Sel mode / i ent)
(setq i 0)
(repeat (sslength Sel)
    (setq ent (ssname Sel i))
    (redraw ent mode)
    (setq i (1+ i))
)
)

myjping 发表于 2012-9-18 09:13:51

顶啊,这个问题应该不难吧

daidong013 发表于 2012-9-18 09:36:55

帮忙顶一下!~~

myjping 发表于 2012-9-18 13:02:36

myjping 发表于 2012-9-18 09:13 static/image/common/back.gif
顶啊,这个问题应该不难吧

已更新,少了一个函数
页: [1]
查看完整版本: 错误函数求助