设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 67|回复: 5

[求助] 拖动过程如何避免闪烁

[复制链接]

签到天数: 131 天

连续签到: 2 天

[LV.7]常住居民III

已领礼包: 56个

财富等级: 招财进宝

发表于 2017-8-11 21:40:43 | 显示全部楼层 |阅读模式

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

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

x
我这个代码想实现在拖动过程中,支持一键回车,可能代码写的有点问题,在按S键时会闪烁
给指点一下,另外xdrx_inget放到那里比较合适,回调函数内,还是xdrx_drag_jig
  1. (defun c:tt (/ e loop mark p1 promptstr rtn1 dragtable)
  2.   (setq e (car(entsel)))
  3.   (vl-acad-defun 'dragtable)
  4.   (defun dragtable (p)
  5.     (xdrx_initget "S")   
  6.     (xdrx_setpropertyvalue e "position" p)
  7.   )
  8.   (setq p1 (getvar "lastpoint"))
  9.   (setq loop t)
  10.   (setq mark nil)
  11.   (if mark
  12.     (setq promptstr "\n&#209;&#161;&#212;&#241;±í&#184;&#241;2&#229;è&#235;μ&#227;,μ±&#199;°í&#172;ê±±ê×¢·&#191;&#188;&#228;&#196;ú2&#191;<S&#199;D&#187;&#187;>: ")
  13.     (setq promptstr "\n&#209;&#161;&#212;&#241;±í&#184;&#241;2&#229;è&#235;μ&#227;,μ±&#199;°&#189;&#246;ê&#228;3&#246;±í&#184;&#241;<S&#199;D&#187;&#187;>: ")
  14.   )
  15.   (while loop
  16.     (setq rtn1
  17.            (xdrx_drag_jig
  18.              ;; Name of callback - finction
  19.              "dragtable"
  20.              ;; Prompt string
  21.              promptstr
  22.              ;; Keyword string
  23.              "S"
  24.              ;; Input flag
  25.              (+ 2 128 2048)
  26.              ;; Allow entering empty and 3D-points
  27.              ;; Cursor type
  28.              0
  29.              ;;  RubberBand
  30.              ;; Base point (in UCS)
  31.              p1
  32.            )
  33.     )
  34.     (if        (equal rtn1 "S")
  35.       (if mark
  36.         (progn
  37.           (setq mark nil)
  38.           (setq promptstr "\n&#209;&#161;&#212;&#241;±í&#184;&#241;2&#229;è&#235;μ&#227;,μ±&#199;°&#189;&#246;ê&#228;3&#246;±í&#184;&#241;<S&#199;D&#187;&#187;>: ")
  39.         )
  40.         (progn
  41.           (setq mark t)
  42.           (setq
  43.             promptstr "\n&#209;&#161;&#212;&#241;±í&#184;&#241;2&#229;è&#235;μ&#227;,μ±&#199;°í&#172;ê±±ê×¢·&#191;&#188;&#228;&#196;ú2&#191;<S&#199;D&#187;&#187;>: "
  44.           )
  45.         )
  46.       )
  47.       (setq loop nil)
  48.     )
  49.   )

  50.   (REDRAW)  
  51.   (xdrx_initget)  
  52. )



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

签到天数: 1048 天

连续签到: 9 天

[LV.10]以坛为家III

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-11 23:13:15 | 显示全部楼层

(xdrx_initget "S") 这个函数完成的是
(initget "S") + 一键回车的初始设置,而且这个函数要通过 (xdrx_end) 来消除作用,并且下一个xdrx_init的调用抹除前一个的。

如果你的程序有好几个地方要用 不同的关键字组合去交互,那么你就要保证在你当前的getXXXX函数前调用这个函数

比如

(xdrx_initget "S")
(while (setq a (getstring "...[XX(S]"))
    (progn
       ...
       (xdrx_initget "A")
       (if (setq b (getstring "....XX(A)"))
          (progn
             ....
          )
       )
    )
)

这种情况,循环第二次时候,S就失去作用了。

要继续使得S起作用,那 xdrx_initget就要放循环里面。


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

使用道具 举报

签到天数: 1048 天

连续签到: 9 天

[LV.10]以坛为家III

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-11 23:15:39 | 显示全部楼层
本帖最后由 newer 于 2017-8-11 23:18 编辑

拖动闪烁,这个以前讨论过,可以搜索下。

这个避免不了,是AcGeJig类的特性

如果想不闪烁,可以用点监视器xdrx_pointmointor实现拖到,具体你可以去看看开源函数库里面的

xd::drag:Gmove (这个强大,支持你自定义回调函数)
xd::doc:simplemove函数

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

使用道具 举报

签到天数: 131 天

连续签到: 2 天

[LV.7]常住居民III

已领礼包: 56个

财富等级: 招财进宝

 楼主| 发表于 2017-8-11 23:24:57 来自手机 | 显示全部楼层
谢谢了 学习很多知识
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 131 天

连续签到: 2 天

[LV.7]常住居民III

已领礼包: 56个

财富等级: 招财进宝

 楼主| 发表于 2017-8-12 11:05:49 | 显示全部楼层
  1. (setq rtn1
  2.            (xdrx_drag_jig
  3.              ;; Name of callback - finction
  4.              "dragtable"
  5.              ;; Prompt string
  6.              promptstr
  7. ;;;             "\n&#209;&#161;&#212;&#241;±í&#184;&#241;2&#229;è&#235;μ&#227;[ê&#199;·&#241;í&#172;ê±±ê×¢·&#191;&#188;&#228;&#196;ú]<Sê&#199;>: "
  8.              ;; Keyword string
  9.              "S"
  10.              ;; Input flag
  11.              (+ 4 128 256 2048)
  12.              ;; Allow entering empty and 3D-points
  13.              ;; Cursor type
  14.              0
  15.              ;;  RubberBand
  16.              ;; Base point (in UCS)
  17.              p1
  18.            )
  19.     )

input flag 已经设值4,为什么按esc键仍然退出?此时rtn1返回值为-4,但是在回到函数中(if (equal rtn1 -4)(vla-erase vlatbl))无法删除,本意是如果用户退出,则删除原来的图元,如何实现?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 131 天

连续签到: 2 天

[LV.7]常住居民III

已领礼包: 56个

财富等级: 招财进宝

 楼主| 发表于 2017-8-12 12:04:05 | 显示全部楼层
我搞错了 调试的不是一个程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-7-17 15:43 , Processed in 0.149250 second(s), 41 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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