找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 709|回复: 6

[求助] [求助]:时间函数的应用

[复制链接]
发表于 2006-8-8 09:25:30 | 显示全部楼层 |阅读模式

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

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

×
最近按照书上例题练习,编制一个钟表程序,可是表的指针不会走,只能在执行程序时把表针旋转到系统时间,但不知怎么才能让表针“走”起来。程序如下:
   (defun c:lsp_22 ()
  (setq os (getvar "osmode"))
  (setq cen (getpoint "\n中心点:"))
  (setq rr (* (getdist cen "\n半径:") 2))
  (lsp_22a)
  (lsp_22b)
  (setvar "osmode" os)
  )
;------------------------------->子程序
(defun lsp_22a ()
  (setvar "cecolor" "3")
  (command "donut" (* (/ rr 39) 40) rr cen "")
  (setvar "cecolor" "1")
  (setq pp_12 (polar cen (/ pi 2) (/ rr 2)))
  (setq pp_3 (polar cen 0 (/ rr 2)))
  (setq pp_6 (polar cen (* pi 1.5) (/ rr 2)))
  (setq pp_9 (polar cen pi (/ rr 2)))
  (command "donut" 0 (/ rr 12) pp_12 pp_3 pp_6 pp_9 "")
  (setvar "cecolor" "7")
  (command "pline" cen "w" (/ rr 40) "" (polar cen (/ pi 2) (* (/ rr 20) 7)) "")
  (setq en3 (entlast))
  (command "pline" cen "w" (/ rr 50) "" (polar cen (/ pi 2) (* (/ rr 20) 8)) "")
  (setq en1 (entlast))
  (command "pline" cen "w" 0 "" (polar cen (/ pi 2) (* (/ rr 20) 9)) "" )
  (setq en2 (entlast))
  (setvar "cecolor" "bylayer")
(setq ti (rtos (getvar "cdate") 2 6))
  (setq tt (substr ti 10 2))
  (setq dd (substr ti 12 2))
  (setq mm (substr ti 14 2))
  (while mm
  (setq ti (rtos (getvar "cdate") 2 6))
  (setq tt (substr ti 10 2))
  (setq dd (substr ti 12 2))
  (setq mm (substr ti 14 2))
  (command "rotate" en3 "" cen (* (atoi tt) -30))
  (command "rotate" en2 "" cen (* (atoi mm) -6))
  (command "rotate" en1 "" cen (* (atoi dd) -6))
  (command "rotate" en3 "" cen (* (atoi dd) -0.5))
  )
  )
(defun lsp_22b ()
  (setq tex_12 (polar pp_12 (* pi 1.5) (/ rr 10)))
  (setq tex_3 (polar pp_3 pi (/ rr 10)))
  (setq tex_6 (polar pp_6 (/ pi 2) (/ rr 10)))
  (setq tex_9 (polar pp_9 pi (/ rr 10)))
  (command "text" "m" tex_12 (/ rr 12) 0 "12")
  (command "text" "m" tex_3 (/ rr 12) 0 "3")
  (command "text" "m" tex_6 (/ rr 12) 0 "6")
  (command "text" "m" tex_9 (/ rr 12) 0 "9")
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-8 10:19:16 | 显示全部楼层
你的这个试的我机子当机了~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-8 16:43:08 | 显示全部楼层
呵呵,缘分阿
我学LISP后的第一个程序也是这个

不过还是不完善
再加个定时校正指针位置的函数就好了
不过这种东西
只能算是奇巧淫技
玩玩还可以
过分追求就有点本末倒置了

;时钟
;[Autolisp&DCL基础篇]
;VS
;铁甲蚂蚁
(defun c:clock ()
    (setvar "cmdecho" 0)
    (setq os (getvar "osmode"))
    (setvar "osmode" 0)
    (setq cen (getpoint "\n中心点:"))
    (setq rr (* (getdist cen "\n半径:") 2))
    (lsp_22a)
    (lsp_22b)
    (lsp_22c)
    (setvar "osmode" os)
    (setq *error* errorfun)
    (prin1)
)

(defun lsp_22a ()
    (setvar "cecolor" "131")
    (command "donut" 0 (/ (* rr 43) 40) cen "")
    (setq pp_12 (polar cen (/ pi 2) (/ rr 2)))
    (setq pp_3 (polar cen 0 (/ rr 2)))
    (setq pp_6 (polar cen (* pi 1.5) (/ rr 2)))
    (setq pp_9 (polar cen pi (/ rr 2)))
    (setvar "cecolor" "2")
    (command "donut" 0 (/ rr 48) pp_12 "")
    (command "array" (entlast) "" "p" cen 60 360 "")
    (setvar "cecolor" "1")
    (command "donut" 0 (/ rr 24) pp_12 "")
    (command "array" (entlast) "" "p" cen 12 360 "")
    (setvar "cecolor" "7")
    (setq t1 (polar cen (/ pi -2) (* (/ rr 100) 4)))
    (setq t2 (polar cen (/ pi 2) (* (/ rr 20) 7)))
    (command "pline"
             t1
             "W"
             0
             (/ rr 36)
             cen
             "w"
             (/ rr 36)
             0
             t2
             ""
    )
    (setq en3 (entlast))
    (setvar "cecolor" "3")
    (setq d1 (polar cen (/ pi -2) (* (/ rr 100) 6)))
    (setq d2 (polar cen (/ pi 2) (* (/ rr 20) 8)))
    (command "pline"
             d1
             "W"
             0
             (/ rr 40)
             cen
             "w"
             (/ rr 40)
             0
             d2
             ""
    )
    (setq en1 (entlast))
    (setvar "cecolor" "5")
    (setq m1 (polar cen (/ pi -2) (* (/ rr 100) 7)))
    (setq m2 (polar cen (/ pi 2) (* (/ rr 20) 8.8)))
    (setq m3 (polar cen (/ pi -2) (* (/ rr 100) 1)))
    (command "pline"         m1    "w"   0           0         m3    "a"   "ce"
             cen   "a"         180   "a"   180   "ce"         cen   "l"   m2
             ""
            )
    (setq en2 (entlast))
    (setvar "cecolor" "bylayer")
    (setq ti (rtos (getvar "cdate") 2 6))
    (setq tt (substr ti 10 2))
    (setq dd (substr ti 12 2))
    (setq mm (substr ti 14 2))
    (command "rotate" en3 "" cen (* (atoi tt) -30))
    (command "rotate" en3 "" cen (* (atoi dd) -0.5))
    (command "rotate" en1 "" cen (* (atoi dd) -6))
    (command "rotate" en2 "" cen (* (atoi mm) -6))
)

(defun lsp_22b ()
    (setq txt_1 (polar cen (/ pi -2) (/ rr 4)))
    (setq data (substr ti 1 8))
    (setvar "cecolor" "6")
    (command "text" "m" txt_1 (/ rr 24) 0 data)
)

(defun lsp_22c ()
    (while (/= (car (setq m (grread t 8))) 25)
        (setq ti1 (rtos (getvar "cdate") 2 6))
        (setq tt1 (substr ti1 10 2))
        (setq dd1 (substr ti1 12 2))
        (setq mm1 (substr ti1 14 2))
        (if (/= dd1 dd)
            (progn
                (setq dd dd1)
                (command "rotate" en3 "" cen -0.1)
            )
        )
        (if (/= mm1 mm)
            (progn
                (setq mm mm1)
                (command "rotate" en1 "" cen -0.1)
                (command "rotate" en2 "" cen -6)
            )
        )
    )
)


(defun errorfun        (msg)
    (setvar "osmode" os)
    (princ "\r")
)

(princ "\n\n…………〉〉时钟〈〈…………")
(prin1)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-10 20:22:57 | 显示全部楼层
(setq *error* errorfun)
这一句是什么意思,带"**"表示什么呢?请高人解答一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-11 00:39:56 | 显示全部楼层
表示字符啊:)

铁甲马甲原来就是三楼啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-11 17:03:21 | 显示全部楼层
4楼

(*error* string)

If *error* is not nil, it is executed as a function whenever an AutoLISP error condition exists. AutoCAD passes one argument to *error*, which is a string containing a description of the error.

Your *error* function can include calls to the command function without arguments (for example, (command)). This will cancel a previous AutoCAD command called with the command function.

Return Values

This function does not return, except when using vl-exit-with-value.

Examples

The following function does the same thing that the AutoLISP standard error handler does. It prints the word "error," followed by a description:

(defun *error* (msg)
  (princ "error: ")
  (princ msg)
  (princ)
)

5楼
铁甲蚂蚁
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 85个

财富等级: 招财进宝

发表于 2016-12-1 00:15:09 | 显示全部楼层
感觉很好玩。只是命令完了就结束了。能不能一直挂在旁边啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 23:05 , Processed in 0.302840 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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