找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 23253|回复: 43

[每日一码] 万能拖动函数XDRX_DRAG_JIG应用(一)-- 动态显示坐标

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-7-21 15:57:51 | 显示全部楼层 |阅读模式

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

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

×
xd-drag-coord.gif


下面的函数代码可以实现,XDRX_DRAG_JIG应用主函数基本差不多,主要是JIG拖动实现的回调函数的写法不同

回调函数:
[pcode=lisp,true]
  (defun FitArrayCallBack (dynPt / pts entl)
    (setq p1 dynPt                               ;;dynPt就是动态的鼠标点坐标
          p2 (polar p1 (/ pi 4) 10)           ;;回调函数里面所有的点都是根据dynPt算出,然后更新实体
          p3 (polar p2 (- (/ pi 2)) 200)
    )
    (if (= i 0)
      (xdrx_setenttodb e)
    )
    (xdrx_modent 10 p2 1 (strcat "X=" (rtos (car p1) 2 4)))   ;;修改X文字组码10点坐标,和文字
    (if (= i 0)
      (xdrx_setenttodb e1)
    )
    (xdrx_modent 10 p3 1 (strcat "Y=" (rtos (cadr p1) 2 4)))  ;;;;修改Y文字组码10点坐标,和文字
    (setq i 1)
  )
)

[/pcode]

完整函数:

这个函数只是演示了文字的动态改变,大家可以修改代码适合自己的需要。可以很容易就写出尺寸拖动什么的,有了万能的xdrx_drag_jig,只要你能想到的,用LISP语言能写出来的,都可以把他拖到起来。

  1. (defun c:tt ( / dynpt e e1 entl i p1 p2 p3 pj pts ret)
  2.   (defun FitArrayCallBack (dynPt / pts entl)
  3.     (setq p1 dynPt
  4.           p2 (polar p1 (/ pi 4) 10)
  5.           p3 (polar p2 (- (/ pi 2)) 200)
  6.     )
  7.     (if (= i 0)
  8.       (xdrx_setenttodb e)
  9.     )
  10.     (xdrx_modent 10 p2 1 (strcat "X=" (rtos (car p1) 2 4)))
  11.     (if (= i 0)
  12.       (xdrx_setenttodb e1)
  13.     )
  14.     (xdrx_modent 10 p3 1 (strcat "Y=" (rtos (cadr p1) 2 4)))
  15.     (setq i 1)
  16.   )
  17.   (XD::Begin)
  18.   (if (setq e (car (xdrx_entsel "\n拾取一个文本<退出>:" '((0 . "text")))))
  19.     (progn
  20.       (setvar "lastPoint" (setq pj (xdrx_getentdxf 10)))
  21.       (initget 1)
  22.       (setq i 0)
  23.       (xdrx_entity_transformedcopy e (xdrx_matrix_identity 3))
  24.       (setq e1 (entlast))
  25.       (setq ret (xdrx_drag_jig "FitArrayCallBack" "\n拾取点:" "" (+ 1 2 4 8 16 128 512 65536) 0 pj))
  26.     )
  27.   )
  28.   (XD::End)
  29.   (gc)
  30.   ret
  31. )


具体的应用,见几个函数发布,各种JIG实现,大家可以在LISP程序中调用。

(XD:Drag:ArrayFit)阵列充满拖动实现函数
(XD::Drag:Array)阵列拖动函数实现
(XD::Drag:FiveStar)五角星拖动实现函数
( XD::Drag:NEdge)正多边形拖动实现函数(三种方式)
(XD::Drag:Circle)圆拖动实现函数
(XD::Drag:Arc2)起点、圆心、终点圆弧拖动实现函数
(XD::Drag:Arc1)三点圆弧拖动实现函数
(XD::Drag:Rectang)矩形拖动实现函数

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-21 17:42:58 来自手机 | 显示全部楼层
和xdrx_pointmonitor有什么区别?

点评

xdrx_drag_jig 是通过AcEdJig 类实例实现的, 具备完备的拖动机制实现,完备的关键字回调控制。 xdrx_pointmonitor 是通过AcEdInputPointMonitor 类实现的,主要是监视点的事件和回调处理。 具体可以看下相关  详情 回复 发表于 2013-7-21 17:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-7-21 17:58:20 | 显示全部楼层
st788796 发表于 2013-7-21 17:42
和xdrx_pointmonitor有什么区别?

xdrx_drag_jig 是通过AcEdJig 类实例实现的, 具备完备的拖动机制实现,完备的关键字回调控制。

xdrx_pointmonitor 是通过AcEdInputPointMonitor 类实现的,主要是监视点的事件和回调处理。

具体可以看下相关的文档。

QQ截图20130721175509.png QQ截图20130721175433.png

点评

我想问问 pm和jig的回调函数 怎样才能做到在视图里绘制一个cache而不是实体呢 说实话 用一个点拖动物体不难 难就难在当物体整个被拖动时 原有数据保存 以及避免自身物体捕捉 如果是一个类似于视图cache的物体就不存  详情 回复 发表于 2013-7-24 17:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-21 22:18:02 | 显示全部楼层
晓东,你有没发现把ARX的JIG写成LISP函数调用完后,光标会成点选取形状无法恢复,而ARX自身调用却没这个问题。

点评

CAD2004这两天装了API试了下, 确实是光标变成十字没有恢复。  发表于 2013-7-31 16:27
最近发布的几个JIG函数不都正常吗? 光标恢复了啊。  详情 回复 发表于 2013-7-21 22:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-7-21 22:45:13 | 显示全部楼层
Gdlprfcu 发表于 2013-7-21 22:18
晓东,你有没发现把ARX的JIG写成LISP函数调用完后,光标会成点选取形状无法恢复,而ARX自身调用却没这个问题 ...

最近发布的几个JIG函数不都正常吗? 光标恢复了啊。

点评

应该是jig的问题,我在04-08版本试过都这样,调用完后,光标的拾取框不见了,只剩下十字,可能是你没留意吧。  详情 回复 发表于 2013-7-22 08:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

发表于 2013-7-21 22:52:13 | 显示全部楼层
使用方法跟高飞鸟兄那个差不多吧

点评

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-7-21 23:07:05 | 显示全部楼层
liuyj 发表于 2013-7-21 22:52
使用方法跟高飞鸟兄那个差不多吧

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

使用道具 举报

发表于 2013-7-22 08:49:11 | 显示全部楼层
XDSoft 发表于 2013-7-21 22:45
最近发布的几个JIG函数不都正常吗? 光标恢复了啊。

应该是jig的问题,我在04-08版本试过都这样,调用完后,光标的拾取框不见了,只剩下十字,可能是你没留意吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-24 17:44:28 | 显示全部楼层
XDSoft 发表于 2013-7-21 17:58
xdrx_drag_jig 是通过AcEdJig 类实例实现的, 具备完备的拖动机制实现,完备的关键字回调控制。

xdrx_ ...

我想问问 pm和jig的回调函数 怎样才能做到在视图里绘制一个cache而不是实体呢 说实话 用一个点拖动物体不难 难就难在当物体整个被拖动时 原有数据保存 以及避免自身物体捕捉 如果是一个类似于视图cache的物体就不存在这个麻烦 Et工具里的那个做得就很好 但是我想不出是怎么做到的 莫非是acedDraggen?

点评

不知道会不会讲得不清楚 就是类似于grvec grdraw绘制出来的视图缓存  详情 回复 发表于 2013-7-24 17:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-24 17:46:41 | 显示全部楼层
cre8or 发表于 2013-7-24 17:44
我想问问 pm和jig的回调函数 怎样才能做到在视图里绘制一个cache而不是实体呢 说实话 用一个点拖动物体不 ...

不知道会不会讲得不清楚 就是类似于grvec grdraw绘制出来的视图缓存

点评

grdraw 和 JIG是两类东西,JIG是对实体操作,而只有从AcDbEntity 派生的实体类,才有AcDbEntity::getGripPoints,才有捕捉点。 另外你说的PM是什么?  详情 回复 发表于 2013-7-24 17:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2013-7-24 17:56:01 | 显示全部楼层
cre8or 发表于 2013-7-24 17:46
不知道会不会讲得不清楚 就是类似于grvec grdraw绘制出来的视图缓存

grdraw 和 JIG是两类东西,JIG是对实体操作,而只有从AcDbEntity 派生的实体类,才有AcDbEntity::getGripPoints,才有捕捉点。


另外你说的PM是什么?

点评

我明白你的意思 但是既然让jig 和pointmonitor支持回调 应该只是传递了点坐标 那么用这个点坐标绘制一个缓存 更新后迅速清除 这应该可以啊 我看见内置函数aceddraggen就有这效果 但是机制不明 无法更改 只想有没有哪  详情 回复 发表于 2013-7-24 18:05
pointMonitor  详情 回复 发表于 2013-7-24 18:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-24 18:01:23 | 显示全部楼层
marting 发表于 2013-7-24 17:56
grdraw 和 JIG是两类东西,JIG是对实体操作,而只有从AcDbEntity 派生的实体类,才有AcDbEntity::getGrip ...

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

使用道具 举报

发表于 2013-7-24 18:05:42 | 显示全部楼层
本帖最后由 cre8or 于 2013-7-24 18:12 编辑
marting 发表于 2013-7-24 17:56
grdraw 和 JIG是两类东西,JIG是对实体操作,而只有从AcDbEntity 派生的实体类,才有AcDbEntity::getGrip ...

我明白你的意思 但是既然让jig 和pointmonitor支持回调 应该只是传递了点坐标 那么用这个点坐标绘制一个缓存 更新后迅速清理 这应该可行啊 我要这么做的原因是拖动一个群物体可以用acedxformss 但是如果要更新当前位置还要随时将它们变换回去 这一来一回比较低效 况且矩阵是实数组成的 旋转有误差 如果还不能排除拖动物体的捕捉 那误差就更明显了 我是在高飞鸟那里 看见内置函数aceddraggen就有这效果 但是机制不明 无法更改 只想有没有哪个回调 或者arxlisp可以做得到

点评

acedDraggen是老的ADS出来的,JIG和他是两回事,JIG是面向对象的ARX出来后有的。里面用的是AcGeMatrix3d的实体矩阵变换,不过对于数学,1E-6以上的精度足足够了。  详情 回复 发表于 2013-7-24 18:22
ARX提供了完备的JIG类,为啥还要用缓存这些?嫌慢? ACAD自身的那些拖放也都是用JIG实现的。放弃JIG,那么肯定要有些东西不能如你所愿了。 点监视和JIG是两回事。  详情 回复 发表于 2013-7-24 18:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2013-7-24 18:18:07 | 显示全部楼层
cre8or 发表于 2013-7-24 18:05
我明白你的意思 但是既然让jig 和pointmonitor支持回调 应该只是传递了点坐标 那么用这个点坐标绘制一个 ...

ARX提供了完备的JIG类,为啥还要用缓存这些?嫌慢? ACAD自身的那些拖放也都是用JIG实现的。放弃JIG,那么肯定要有些东西不能如你所愿了。

点监视和JIG是两回事。

点评

恩 既然你说jig优于draggen 我再研究研究 刚开始就看了jig 觉得涉及两个视图绘制函数 太复杂 draggen简单又干净 矩阵可以合并操作 感觉上好控制 回调也好写  详情 回复 发表于 2013-7-24 21:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 01:24 , Processed in 0.370304 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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