这个旋转动画用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")))
)
还是老老实实用delay吧,wait 这种,计算的次数太多了,可能导致CAD 转圈圈假死
页:
[1]