Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 25205|回复: 34

Allegro 界面的时钟

[复制链接]
发表于 2013-6-9 17:20:28 | 显示全部楼层 |阅读模式
本帖最后由 chuankay 于 2013-6-9 23:17 编辑

今天要放假了 ,比较激动,本想写个倒计时的代码的,觉得被领导发现不好,写个时钟,还能复习函数。(注:之前发的代码有误,优化后没有及时测试,代码可能不是最简洁的,大家有意见,多提,共同进步。)

时钟效果

时钟效果
  1. ;  load("clock.il")
  2. ;  by chen_ck
  3. ; allegro-skill论坛学习交流用

  4. axlCmdRegister("clock" ,'clock)
  5. axlCmdRegister("stop" , 'stop)
  6. defun( clock ()

  7.         gc()
  8.         S = nil
  9.         M = nil
  10.         H = nil
  11.         if(boundp('timerIDS) || boundp('timerIDM) || boundp('timerIDH)
  12.                 then
  13.                         stop()
  14.         );if
  15.         initializer_time()
  16.         axlClearSelSet()
  17.         axlSetFindFilter(?enabled list("noall" "lines") ?onButtons list("noall" "lines"))
  18.         lines = axlGetSelSet(axlAddSelectAll())
  19.         foreach(db lines
  20.                 cond(
  21.                         (db->layer == "BOARD GEOMETRY/OUTLINE" S = db)
  22.                         (db->layer == "ETCH/TOP" M = db)
  23.                         (db->layer == "ETCH/BOTTOM" H = db)
  24.                         );cond
  25.         );foreach               
  26.         timerIDS = nil
  27.         timerIDM = nil
  28.         timerIDH = nil        
  29.         timerIDS = axlUIWTimerAdd(nil 1000 nil 'updateS)
  30.         timerIDM = axlUIWTimerAdd(nil 60000 nil 'updateM)
  31.         timerIDH = axlUIWTimerAdd(nil 3600000 nil 'updateH)
  32. );defun

  33.         
  34. defun(updateS (window timerIDS elapseTime)
  35.         axlTransformObject(S, ?angle -6 ?origin 0:0)
  36. );defun
  37. defun(updateM (window timerIDM elapseTime)
  38.         axlTransformObject(M, ?angle -6 ?origin 0:0)
  39. );defun
  40. defun(updateH (window timerIDH elapseTime)
  41.         axlTransformObject(H, ?angle -6 ?origin 0:0)
  42. );defun
  43.         
  44. defun( initializer_time ()

  45.         time = nth(2 parseString(getCurrentTime()))        
  46.         timeH = atoi(car(parseString(time ":")))
  47.         timeM = atoi(cadr(parseString(time ":")))
  48.         timeS = atoi(caddr(parseString(time ":")))

  49.         S = caar(axlDBCreateLine( (list 0:0 0:400), 10, "BOARD GEOMETRY/OUTLINE"))
  50.         M = caar(axlDBCreateLine( (list 0:0 0:360), 20, "ETCH/TOP"))
  51.         H = caar(axlDBCreateLine( (list 0:0 0:300), 40, "ETCH/BOTTOM"))
  52.         axlDBCreateCircle( list(0:0 500) , 5 , "PACKAGE GEOMETRY/PLACE_BOUND_TOP")
  53.         axlDBCreateCircle( list(0:0 450) , 5 , "PACKAGE GEOMETRY/PLACE_BOUND_TOP")
  54.         BAR = caar(axlDBCreateLine( (list 0:360 0:420), 25, "PACKAGE GEOMETRY/PLACE_BOUND_TOP"))
  55.         for(i 1 11
  56.                 angle_ = i * 30
  57.                 axlCopyObject(BAR , ?angle eval(angle_) ?origin 0:0)
  58.         );for
  59.         myorient = make_axlTextOrientation(?textBlock "7", ?rotation 0.0,?mirrored nil, ?justify "center")
  60.         axlDBCreateText("CHEN_CK", 0:165, myorient,"PACKAGE GEOMETRY/PLACE_BOUND_TOP", nil)
  61.                
  62.         axlTransformObject(S, ?angle -timeS * 6 ?origin 0:0)
  63.         axlTransformObject(M, ?angle -timeM * 6 ?origin 0:0)
  64.         axlTransformObject(H, ?angle (-timeH + 12 - timeM / 60.0) * 30 , ?origin 0:0)
  65. );defun
  66.         
  67. defun( stop ()
  68.         axlUIWTimerRemove(timerIDS)
  69.         axlUIWTimerRemove(timerIDM)
  70.         axlUIWTimerRemove(timerIDH)
  71.         );defun stop
复制代码

评分

参与人数 2威望 +4 SKILL币 +9 贡献 +11 收起 理由
woods + 5 楼主很有想法,不错哦
vivienluo + 4 + 4 + 11 很给力!

查看全部评分

发表于 2013-6-9 19:09:34 | 显示全部楼层
这个很不错,很有创意。。。。楼主强人啊。。。。{:soso__8968018481728829654_1:}
发表于 2013-6-9 21:38:12 | 显示全部楼层
顶一个!!
 楼主| 发表于 2013-6-9 22:52:20 | 显示全部楼层
子木 发表于 2013-6-9 21:45
咋加载成功后没画面啊

不好意思刚开始清零有问题:boundp('timerIDS) || boundp('timerIDM) || boundp('timerIDH)
有一处s应该是大写,写成小写了。快下班了比较激动优化完没有测试一下,实在抱歉。
发表于 2013-6-12 10:29:42 | 显示全部楼层
 楼主| 发表于 2013-6-14 22:12:07 | 显示全部楼层
子木 发表于 2013-6-14 21:46
我把那处小写的换成大写后还是没画面,出现如下提示

HI 子木:显示的文字应该是在编译器里面显示的吧,第一函数就是 clock() 就是主函数,在编译器中运行clock()就可以了啊(要一个空白的brd哦,我参考的函数是16.5的),建议重新复制代码试试看,函数都比较简单,看看提提错!


 楼主| 发表于 2013-6-15 21:07:22 | 显示全部楼层
子木 发表于 2013-6-15 20:52
哦,是有前提条件嗖

是的呀 随便写写的 只为简单实现功能 没考虑太多 所以导致功能实现局限性
 楼主| 发表于 2013-6-16 11:11:48 | 显示全部楼层
子木 发表于 2013-6-16 10:51
不过很有创意

之前发一个帖子关于form中加动态logo的,只是提了下,所以这个贴也是为了补充如何加动态logo的主题,有兴趣可以试试加一个动态logo啊。
 楼主| 发表于 2013-6-17 23:27:06 | 显示全部楼层
子木 发表于 2013-6-17 22:57
如果在16.3上面显示,需要怎么修改代码呢?

函数比较简单,虽然是参考16.5的函数,但是在16.3上应该适用,我记得截图就是16.3版本的。
 楼主| 发表于 2013-6-18 20:47:20 | 显示全部楼层
子木 发表于 2013-6-18 18:55
是吗,为啥我这里加载成功后还是没画面啊?

HI 子木:
       刚试了一下,时钟的是在原点生成的,如果原点比较偏也是不行的,下图是刚刚生成的钟表图,对照函数看看吧,里面还有些地方写的不合理,看了多指正。

未命名.JPG
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-11-23 20:54 , Processed in 0.140406 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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