找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 841|回复: 6

[分享]:显示模拟进程条的函数 同时附返回屏幕四个角坐标的函数

[复制链接]
发表于 2002-11-19 12:40:18 | 显示全部楼层 |阅读模式

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

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

×
显示模拟进程条的函数 同时附返回屏幕四个角坐标的函数
考虑UCS为VIEW的状态

  1. ;;———————————————————————————————————
  2. ;;processbar-jw.lsp
  3. ;; Copyright (C) 2001 by ZJW ,WuXi Municipal Enginerring Design Institue. All Rights Reserved.
  4. ;;
  5. ;;命令(函数)名称:     (processbar-jw doing  total  FIRST)
  6. ;;返    回    值:      
  7. ;;使用的公用变量:     无
  8. ;;调用的其他函数:     无
  9. ;;功          能:     显示进程条
  10. ;;适用条件和范围:     第一次使用时FIRST为T  其他时刻为NIL  
  11. ;;使用方法和技巧:     无
  12. ;;功能扩展的方向:
  13. ;;程序漏洞 (BUG):     暂无
  14. ;;程序完成地日期:     9:35 01-12-6
  15. ;;开    发    者:     zjw
  16. ;;修  改  日  志:     无
  17. ;;附  加  说  明:     无
  18. ;;———————————————————————————————————
  19. ;{start
  20. ;;内部变量简要说明:
  21. ;;
  22. (defun processbar-jw ( doing  total first / p1 p2 p3 p4 pa pb )
  23. (if first
  24. (progn
  25. (setq p1 (nth 3 (wincorner-jw)))
  26. (setq p2 (nth 3 (wincorner2-jw 1 0.495)))
  27. (setq p3 (nth 3 (wincorner2-jw 0.93 0.495)))
  28. (setq p4 (nth 3 (wincorner2-jw 0.93 1)))
  29.   (grdraw p1 p2 1)
  30.   (grdraw p2 p3 1)
  31.   (grdraw p3 p4 1)
  32.   (grdraw p4 p1 1)
  33. )
  34. )
  35. (setq total (float total))
  36. (setq doing (float doing))
  37. (setq pa (nth 3 (wincorner2-jw 0.935 (- 0.998 (* (/ doing total) 0.5))  )))
  38.   (setq pb (nth 3 (wincorner2-jw 0.995 (- 0.998 (* (/ doing total) 0.5)) )))
  39.   ;(grdraw pa pb 2 )
  40.   ;(grdraw pa pb -1 );对于统计量较大的用这种,可以重复调用,每次出现的效果不一样
  41.   (grdraw pa pb 5)
  42. (princ)
  43. )
  44. ;
  45. ;end}
  46. ;;——————————————————END————————————————————





  1. ;;———————————————————————————————————
  2. ;;wincorner-jw.lsp
  3. ;; Copyright (C) 2001 by ZJW ,WuXi Municipal Enginerring Design Institue. All Rights Reserved.
  4. ;;
  5. ;;命令(函数)名称:     (wincorner-jw) (wincorner2-jw perx pery)
  6. ;;参  数  说  明:     perx pery 为返回点区域占屏幕的百分率
  7. ;;返    回    值:     表,表中有四个坐标点为当前窗口的左上、右上、右下、左下的坐标
  8. ;;使用的公用变量:     无
  9. ;;调用的其他函数:     (ucsorview)
  10. ;;功          能:     
  11. ;;适用条件和范围:     
  12. ;;使用方法和技巧:     
  13. ;;功能扩展的方向:
  14. ;;程序漏洞 (BUG):     暂无
  15. ;;程序完成地日期:     12:48 01-12-10
  16. ;;开    发    者:     zjw
  17. ;;修  改  日  志:     无
  18. ;;附  加  说  明:     无
  19. ;;———————————————————————————————————
  20. ;{start
  21. ;;内部变量简要说明:
  22. ;;
  23. (defun wincorner-jw( / p h w p1 p2 p3 p4 s num ename alpha y x)
  24.   (setq p (getvar "screensize"))
  25.    (setq h (/ (getvar "viewsize") 2))
  26.    (setq w (* h (/ (nth 0 p)  (nth 1 p) )))
  27.   (setq p (getvar "viewctr"))
  28.   (setq alpha (- 0 (ucsorview))) ;;求坐标偏移角
  29. ;
  30.   (setq  x (+ (* w (cos alpha)) ( * h (sin alpha))) )
  31.   (setq  y (- (* h (cos alpha)) ( * w (sin alpha))))
  32.   (setq p1 (list (- (nth 0 p) x) (+ (nth 1 p) y)))
  33.   (setq p3 (list (+ (nth 0 p) x) (- (nth 1 p) y)))
  34. ;;
  35.   (setq  x (+ (* (- 0 w) (cos alpha)) ( *  h (sin alpha))) )
  36.   (setq  y (- (* h (cos alpha)) ( * (- 0 w) (sin alpha))))
  37.   (setq p2 (list (- (nth 0 p) x) (+ (nth 1 p) y)))
  38.   (setq p4 (list (+ (nth 0 p) x) (- (nth 1 p) y)))
  39. ;;
  40. (list p1 p2 p3 p4)

  41. )
  42. ;
  43. ;end}
  44. ;;———————————————————————————————————
  45. ;{start
  46. ;;内部变量简要说明:
  47. ;;
  48. (defun wincorner2-jw( perx pery / p h w p1 p2 p3 p4  alpha y x)
  49.   (setq p (getvar "screensize"))
  50.    (setq h  (/ (getvar "viewsize") 2))
  51.    (setq w  (* h (/ (nth 0 p)  (nth 1 p) )))
  52.    (setq h (* pery h))
  53.    (setq w (* perx w))
  54.   (setq p (getvar "viewctr"))
  55.   (setq alpha (- 0 (ucsorview))) ;;求坐标偏移角
  56. ;
  57.   (setq  x (+ (* w (cos alpha)) ( * h (sin alpha))) )
  58.   (setq  y (- (* h (cos alpha)) ( * w (sin alpha))))
  59.   (setq p1 (list (- (nth 0 p) x) (+ (nth 1 p) y)))
  60.   (setq p3 (list (+ (nth 0 p) x) (- (nth 1 p) y)))
  61. ;;
  62.   (setq  x (+ (* (- 0 w) (cos alpha)) ( *  h (sin alpha))) )
  63.   (setq  y (- (* h (cos alpha)) ( * (- 0 w) (sin alpha))))
  64.   (setq p2 (list (- (nth 0 p) x) (+ (nth 1 p) y)))
  65.   (setq p4 (list (+ (nth 0 p) x) (- (nth 1 p) y)))
  66.   ;(grdraw p1 p2 1)
  67.   ;(grdraw p2 p3 2)
  68.   ;(grdraw p3 p4 3)
  69.   ;(grdraw p4 p1 4)
  70. ;;
  71. (list p1 p2 p3 p4)
  72. )
  73. ;
  74. ;end}
  75. ;;——————————————————END————————————————————

  76. (defun ucsorview ( / lpoint2 tw)
  77. (if  (= 1 (getvar "worlducs")) (getvar "viewtwist")  0 )
  78. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-11-19 15:52:10 | 显示全部楼层
进度条在doslib中有专门的函数

  1. (defun work1(prom y)
  2.   (setq x 0)
  3.   (dos_getprogress prom "进行中,请耐心等待..." y)
  4.   (repeat (fix (/ y 3))
  5.     (setq a 1)
  6.   )
  7.   (while (< x y)
  8.     (dos_getprogress -1)
  9.     (setq x (1+ x))
  10.   )
  11.   (dos_getprogress t)
  12. )
  13. ;;;(work1 "数据处理" 1000);;;1000~10000
  14. (defun work2 (prom y)
  15.   (dos_progbar prom 10)
  16.   (repeat (fix (/ y 3))
  17.     (setq a 1)
  18.   )
  19.   (dos_progbar –1)
  20.   (dos_progbar)
  21.   (setq x 0)
  22.   (dos_progbar prom y)
  23.   (while (< x y)
  24.     (dos_progbar -1)
  25.     (setq x (1+ x))
  26.   )
  27.   (dos_progbar)
  28. )


这都是doslib-help中抄来改的,
一个进度条在图中,一个在状态行。
不过一般而言,进度条是唬人的玩艺儿,
其实浪费时间。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-19 18:07:49 | 显示全部楼层
进程条本来没什么 但不用会让人以为程序死掉了
而且同样的程序用2秒
用了进程条要3秒  给人的感觉却是后者要快
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2002-11-19 20:08:36 | 显示全部楼层
是啊,人的思维是活的,有一些小小的创意时。就很好!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-19 20:17:46 | 显示全部楼层
XDRX_API提供的进度条函数,用了ARX的方法,应该说把使用进度条需要的时间降到了最低,在状态栏上。和ACAD自己打开图的时候的进度条表现完全一致。

在大程序运行的时候,比如消除重线等等,使用进度条还是很方便的,以前做过测试,20万条线,有进度条和没有也就差几秒。
但如果没有进度条,用户不知道什么时候会完。程序要人性是最主要的,其次才是在算法上研究。


  1. [FONT=courier new]

  2. 96. xdrx_pbarbegin

  3. 功能:设置ACAD状态行进度条初值值

  4. 调用格式:(xdrx_pbarbegin <提示字符串> <终值>)

  5. 说明:1.参数<终值>:整数值
  6.       2.显示进度条,必须先调用此函数,在LISP的循环体外

  7. 97. xdrx_pbarsetpos

  8. 功能:设置进度条的位置

  9. 调用格式:(xdrx_pbarsetpos <位置>)

  10. 说明:1.<位置>:在0和由函数xdrx_pbarbegin设置的终值之间的整数值
  11.       2.该函数在lisp循环体内调用

  12. 返回值:NIL
  13. 98. xdrx_pbarend

  14. 功能:清除ACAD状态行的进度条

  15. 调用格式: (xdrx_pbarend)

  16. 返回值:NIL

  17. 举例:函数xdrx_pbarbegin,xdrx_pbarsetpos,xdrx_pbarend函数应用

  18.      (defun c:test(/ i)
  19.         (xdrx_pbarbegin "已经完成:" 100)
  20.         (setq i 0)
  21.         (repeat 100  ;;循环执行10秒左右
  22.            (xdrx_pbarsetpos (setq i (1+ i)))
  23.            (xdrx_sleep 100);延迟0.1秒
  24.         )
  25.         (xdrx_pbarend)
  26.         (princ)
  27.      )

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

使用道具 举报

发表于 2004-9-30 15:39:24 | 显示全部楼层
下次楼主最好能附上个实例应用程序,这样测试起来方便些
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-4 08:20:15 | 显示全部楼层
考慮UCS為VIEW的狀態------好像無效
使用例
(defun C:TT (/ N)
  (command "_.redraw")
  (setq N 1)
  (PROCESSBAR-JW 1 1500 t)
  (repeat 1500
    ;;(command "_.rotate" "l" "" "0,0" 5)
    ;;(print N)
    (PROCESSBAR-JW N 1500 NIL)
    (setq N (1+ N)
    )
  )
  (command "_.redraw")
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 13:43 , Processed in 0.195516 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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