找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 319|回复: 8

[求助] xdrx_drag_jig 最后一个参数问题

[复制链接]

已领礼包: 58个

财富等级: 招财进宝

发表于 2017-7-19 20:17:22 | 显示全部楼层 |阅读模式

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

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

×
代码如下,为什么在拖动过程中总在(0 0 0)点处有一个表格存在?
点pj可以尚未nil么,以前用dyndraw这个点可以设为nil,则无拖动的基点

(defun c:tt1 ()
  (vl-acad-defun 'dragtable)
  (defun dragtable (p)
    (vlax-put-property
      tbl
      'insertionpoint
      (vlax-3d-point p)
    )
    t
  )
  (setq        tbl
         (vlax-ename->vla-object
           (xdrx_table_make
             (getpoint)
             5
             30
             3
             200
           )
         )
  )
  (setq p t)
  (setq pj (getvar "lastpoint"))
  (while p
    (setq p
           (xdrx_drag_jig
             "dragtable"
             "\n选择表格插入点: "
             ""
             (+ 1 2 4 8 16 128 512 65536)
             0
             pj
           )

    )
    (SETQ P NIL)
  )
)

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-19 23:22:20 | 显示全部楼层
本帖最后由 newer 于 2017-7-19 23:33 编辑

(xdrx_drag_jig
             "dragtable"
             "\n选择表格插入点: "
             ""
             (+ 1 2 4 8 16 128 512 65536)
             0
             pj
           )
上面的参数0,你可以改成 1 or 2 or 3..... 就是设置是否有拖动线什么的。

你上面的代码,有几个地方累赘,比如WHILE循环的,没必要。你的代码可以改成这样:

  1. (defun c:tt1 ()
  2.   (vl-acad-defun 'dragtable)
  3.   (defun dragtable (p)
  4.      (xdrx_setpropertyvalue tbl "position" p)
  5.     t
  6.   )
  7.   (setq tbl (xdrx_table_make '(0 0 0) 5 30 3 200))
  8.   (setq p (xdrx_drag_jig "dragtable" "\n选择表格插入点: " "" (+ 1 2 4 8 16
  9.                                                                 128 512
  10.                                                                 65536
  11.                                                              ) 0 '(0 0 0)
  12.           )

  13.   )
  14.   (princ)
  15. )



这个DRAG函数比较早,ARX的拖动机制就是拖动拷贝,就是你说的0,0点留下一个拷贝,你可以不用这个函数了,在这个函数之后提供的点监视器实现函数xdrx_pointmonitor可以进一步的控制细节。

按下面改,直接用点监视器

  1. (defun c:tt1 ()
  2.   (defun dragtable (p)
  3.      (xdrx_setpropertyvalue tbl "position" p)
  4.     t
  5.   )
  6.   (xdrx_begin)
  7.   (setq tbl (xdrx_table_make '(0 0 0) 5 30 3 200))
  8.   (xdrx_pointmonitor "dragtable")
  9.   (if (not (setq p (getpoint "\n表格插入点<退出>:")))
  10.     (xdrx_entity_delete tbl)
  11.   )
  12.   (xdrx_pointmonitor)
  13.   (xdrx_end)
  14.   (princ)
  15. )



或者直接用封装的通用LISP函数库,XD::Drag:SimpleMove函数,具体用法见手册。

  1. (defun c:tt1 ()
  2.   (xdrx_begin)
  3.   (setq tbl (xdrx_table_make '(0 0 0) 5 30 3 200))
  4.   (XD::Drag:SimpleMove tbl "\n表格插入点:" 8 t)
  5.   (xdrx_end)
  6.   (princ)
  7. )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-19 23:45:25 | 显示全部楼层
你的代码,还有个地方可以改进,你开始多用了一个(getpoint),其实,既然你想拖动,那就没必要先交互获得一个插入点了,直接给个点生成表格,然后就直接拖动了。

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

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-7-20 09:48:21 | 显示全部楼层
谢谢你的帮助,讲的很细致,程序写的有问题的地方都帮忙指出来了。
另一个问题是拖动效果比较,感觉拖动表较慢,代码如下,有好的办法解决么

;;;拖动效果比较-------------------------------------------

;;;第一种方法---------------------------------------------
;;;拖动时表格与鼠标点有点不同步,有一定的距离-------------


(defun c:tt1 ()
  (setq tbl (car(entsel)))
  (defun dragtable (p)
     (xdrx_setpropertyvalue tbl "position" p)
    t
  )
  (xdrx_begin)
  (xdrx_pointmonitor "dragtable")
  (if (not (setq p (getpoint "\n表格插入点<退出>:")))
    (xdrx_entity_delete tbl)
  )
  (xdrx_pointmonitor)
  (xdrx_end)
  (princ)
)

;;;-第二种方法--------------------------------------------
;;;-用网上另一个个函数dyndraw,不显示表格内文字,拖动无延时
(defun c:tt2 ()
  (setq tbl (car(entsel)))
  (defun dragtable (p)
     (xdrx_setpropertyvalue tbl "position" p)
    (entupd tbl)
    t
  )
  (xdrx_begin)
  ;(setq tbl (xdrx_table_make '(0 0 0) 5 30 3 200))
  (dyndraw
    "dragtable"
    ""
    (+ 0 128)
    0
    nil
  )
  (vla-update (vlax-ename->vla-object tbl))
  (xdrx_end)
  (princ)
)

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-20 12:01:53 | 显示全部楼层
本帖最后由 newer 于 2017-7-20 12:38 编辑

表格处理前加:(xdrx_setpropertyvalue tbl "SuppressRegenerateTable" t),禁止表格重新计算生成

完整代码,关闭捕捉

  1. (defun c:tt2 ()
  2.   (setq tbl (car(entsel)))
  3.   (defun dragtable (p)
  4.      (xdrx_setpropertyvalue tbl  "position" p)
  5.     t
  6.   )
  7.   (xdrx_begin)
  8.   (xdrx_sysvar_push '("osmode" 0))
  9.   (xdrx_setpropertyvalue tbl "SuppressRegenerateTable" t)
  10.   (xdrx_pointmonitor "dragtable")
  11.   (if (not (setq p (getpoint "\n表格插入点<退出>:")))
  12.     (xdrx_entity_delete tbl)
  13.   )
  14.   (xdrx_pointmonitor)
  15.   (xdrx_setpropertyvalue tbl "SuppressRegenerateTable" nil)
  16.   (xdrx_sysvar_pop)
  17.   (xdrx_end)
  18.   (princ)
  19. )

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-20 12:07:43 | 显示全部楼层

TT2你说的不延时,正是因为只显示表格线,不显示表格文字的原因,加上文字每次都要显示,肯定要耗费时间计算的。

上面 说 加入 SuppressRegenerateTable 属性设置,就是表格写的时候,不重新计算生成。
另外,把捕捉关闭,也能有效果。

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

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-20 17:45:02 | 显示全部楼层

对于表格实体来说,显示并不仅仅是显示文字那么简单,作为一个特别的块,recomputerBlock 计算的东西很多。所以,如果你的表格很巨大(这样的,即使ACAD下移动它延迟都很大),不建议你拖动显示表格,你完全可以找个替代方案,比如只拖动一个表格同大小的矩形确定位置就够了,所有的代码都是为了应用服务的,不仅仅是“好看”。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

 楼主| 发表于 2017-7-20 21:20:33 来自手机 | 显示全部楼层
是的 原来是用grvec 画的 可是每行高度是固定的 不能反应表格真是大小 后来就改成动态拖动表格了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:18 , Processed in 0.356653 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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