明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 610|回复: 1

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

[复制链接]
发表于 2021-9-17 19:54:06 | 显示全部楼层 |阅读模式
本帖最后由 guosheyang 于 2021-9-17 20:00 编辑

http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1NTU2fGY2YzVkNzk0MGI3MTM4MzIzNjI5NGVjMDI5MGE0OWU2fDE3NDczNjczMjc%3D&request=yes&_f=.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函数搭配 又可以运行动画 但是转速较慢 如何让转快点儿

http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1NTU3fDQ4MzExMjI0N2M1ZjkyOTVjZGY3YmMwN2M3Mjg4M2FmfDE3NDczNjczMjc%3D&request=yes&_f=.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")))
)



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-9-18 08:47:32 | 显示全部楼层
还是老老实实用delay吧  ,wait 这种,计算的次数太多了,可能导致CAD 转圈圈假死
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-16 11:48 , Processed in 0.169385 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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