guosheyang 发表于 2021-9-17 19:54:06

这个旋转动画用wait函数为啥不运行?

本帖最后由 guosheyang 于 2021-9-17 20:00 编辑

attach://115556.gif朋友们为啥这个旋转动画用wait函数不运行,但将wait 那句注释掉,用delay命令那句又可以,请大神们帮忙看看, 另外, esc退出后 原来的形状有时候会转变形,如何保证 esc退出后原来的形状不变   谢谢!

;自定义选中动画命令 esc退出运行(defun c:xzdh (/ ANG CEN_PT SS TN)
(progn
    (princ "\n请选择旋转的对象")
    (setq ss (ssget))
)
(setq cen_pt (getpoint "\n请点击旋转中心点"))
(setq ang (cond      ((getreal "\n请输入每次旋转的角度值<33>"))
      (33)
            )
)
(setq tn (cond ((getreal "\n请输入每次停顿的时间<100>"))
               (100)
         )
)
(xzdh ss cen_pt ang tn)
)
(defun xzdh (ss cen_pt ang tn)
(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(while ang
                  ; (command "._ROTATE" ss ""
                  ; "none" cen_pt (-
                  ; ang))
    (foreach x lst
      (vla-Rotate
      (vlax-ename->vla-object x)
      (vlax-3D-point cen_pt)
      (/ (* ang pi) 180)
      )
    )
    (redraw)
                  ; (command "._DELAY" tn);;foreach搭配delay函数可以
    (wait (/ tn 1000.0))
)
)
;; 参数: seconds为整数或实数.
(defun wait (seconds / stop)
(setq stop (+ (getvar "DATE") (/ seconds 86400.0)))
(while (> stop (getvar "DATE")))
)


----------------------------------------------------
以下代码可以运行动画但要用conmmand 调用delay命令
;自定义选中动画命令 esc退出运行
(defun c:xzdh (/ ANG CEN_PT SS TN)
(progn
    (princ "\n请选择旋转的对象")
    (setq ss (ssget))
)
(setq cen_pt (getpoint "\n请点击旋转中心点"))
(setq ang (cond      ((getreal "\n请输入每次旋转的角度值<33>"))
      (33)
            )
)
(setq tn (cond ((getreal "\n请输入每次停顿的时间<100>"))
               (100)
         )
)
(xzdh ss cen_pt ang tn)
)
(defun xzdh (ss cen_pt ang tn)
(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(while ang
                  ; (command "._ROTATE" ss ""
                  ; "none" cen_pt (-
                  ; ang))
    (foreach x lst
      (vla-Rotate
      (vlax-ename->vla-object x)
      (vlax-3D-point cen_pt)
      (/ (* ang pi) 180)
      )
    )
    (redraw)
    (command "._DELAY" tn)

                  ;(wait (/ tn 1000.0))
)
)
----------------------------------------------------
以下代码用command调用rotate 命令和wait函数搭配 又可以运行动画 但是转速较慢 如何让转快点儿

attach://115557.dwgattach://115557.dwg
;自定义选中动画命令 esc退出运行
(defun c:xzdh (/ ANG CEN_PT SS TN)
(progn
    (princ "\n请选择旋转的对象")
    (setq ss (ssget))
)
(setq cen_pt (getpoint "\n请点击旋转中心点"))
(setq ang (cond      ((getreal "\n请输入每次旋转的角度值<33>"))
      (33)
            )
)
(setq tn (cond ((getreal "\n请输入每次停顿的时间<100>"))
               (100)
         )
)
(xzdh ss cen_pt ang tn)
)
(defun xzdh (ss cen_pt ang tn)
;(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(while ang
    (command "._ROTATE" ss "" "none" cen_pt (- ang))
    (redraw)
    (wait (/ tn 1000.0))
)
)
;; 参数: seconds为整数或实数.
(defun wait (seconds / stop)
(setq stop (+ (getvar "DATE") (/ seconds 86400.0)))
(while (> stop (getvar "DATE")))
)



菜卷鱼 发表于 2021-9-18 08:47:32

还是老老实实用delay吧,wait 这种,计算的次数太多了,可能导致CAD 转圈圈假死
页: [1]
查看完整版本: 这个旋转动画用wait函数为啥不运行?