找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1689|回复: 10

[求助] [求助]:关于在VLisp中实现拖动效果的方法!

[复制链接]
发表于 2002-9-25 20:39:58 | 显示全部楼层 |阅读模式

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

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

×
请教函数“Grread”的有效用法!最好是有例程!我个人感觉没有什么用处,在使用这个函数时,无法使用已经打开的捕捉和不能交互的使用拖动……
                 谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-25 20:55:14 | 显示全部楼层

Re: [求助]:关于在VLisp中实现拖动效果的方法!

最初由 lcl2094_cn 发布
[B]请教函数“Grread”的有效用法!最好是有例程!我个人感觉没有什么用处,在使用这个函数时,无法使用已经打开的捕捉和不能交互的使用拖动……
                 谢谢! [/B]


在LISP里面只能使用GRREAD,里面调用GRDRAW画简单的直线向量,效果确实不太好。

ADSRX可以使用ads_draggen函数,可以拖动选择集,功能又强大了点,但是缺点是不能使用2000+以后的“极轴追踪”

最好的方法是ARX的AcEdJig类,可以做ACAD里面的任何拖动,大家看到过的所有拖动方法都可以实现,他可以直接使用AcGiWordDraw绘制低级的矢量原子,包括线,射线,POLY,圆,弧等等,也可以直接使用实体自身的worldDraw()方法显示实体自身。

如果你使用LISP,推荐你使用XDRX_API,里面的xdrx_Pickset_DragGen可以实现非常强大的功能(把AcEdJig类包装成提供LISP调用的函数),具体实例可以看“晓东工具箱”里面“自由缩放”,“自由拷贝”、“自由粘贴”,“自由缩放”的LISP程序。

把这个函数和API里面关于“矩阵”的方法结合使用,可以让LISP程序员体会到ARX开发的强大功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-9-26 20:14:18 | 显示全部楼层

谢谢你告诉我这些。可我只会Lisp,慢慢努力了!

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-26 20:25:20 | 显示全部楼层

Re: 谢谢你告诉我这些。可我只会Lisp,慢慢努力了!

最初由 lcl2094_cn 发布
[B]谢谢你告诉我这些。可我只会Lisp,慢慢努力了! [/B]


XDRX_API就是一组供LISP使用的外部函数(和你使用标准的LISP函数一样)。

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

使用道具 举报

发表于 2002-9-27 11:26:53 | 显示全部楼层
就怕用你的XDRX_API编好程序后,过期就不能用了。虽然XDRX_API功能多,还是不敢用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-27 17:13:41 | 显示全部楼层
最初由 god 发布
[B]就怕用你的XDRX_API编好程序后,过期就不能用了。虽然XDRX_API功能多,还是不敢用。 [/B]


呵呵,XDRX_API早就不过期了。两年前就有人这么说,可能5年后还会有人这么说。

晓东工具箱准备全面启用OBJECTDCL作对话框。能替自己省事的地方要学会省事。多多交流,什么都可以解决的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-9-27 18:52:14 | 显示全部楼层
最初由 god 发布
[B]就怕用你的XDRX_API编好程序后,过期就不能用了。虽然XDRX_API功能多,还是不敢用。 [/B]

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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-27 20:59:14 | 显示全部楼层

“自由拷贝、自由移动、自由粘贴”的LISP代码...

下面是“晓东工具箱”里面的动态拖动-自由拷贝、自由移动、自由粘贴使用XDRX_API的实现代码,改程序集成在“通用LISP函数”XDLSP.LSP文件中。

除了拖动,大家还可以探讨下“矩阵运算”在ACAD里面的应用。


  1. [FONT=courier new]
  2. (defun $xdlsp_dragm (ss pj tf / box prompt1 pj pj1 tf1 mRMatrix mRMatrix1
  3.                         mRMatrix2 mMatTrans mMatTrans1 mMatRot ang pt1 pt2
  4.                         pt3 pt4 mVec1 mVec2
  5.                     )
  6.   (xdrx_SysVar_Push "osmode" "CURSORSIZE")
  7.   (xdrx_begin)
  8.   (xdrx_ucson)
  9.   (setvar "osmode" 545)
  10.   (setvar "CURSORSIZE" 5)
  11.   (if (not pj)
  12.     (progn
  13.       (setq box (xdrx_entity_box ss)
  14.             pj (car box)
  15.       )
  16.     )
  17.   )
  18.   (setq prompt1 "\n点取位置或 {改基点[T]/改转角[R]/转90度[A]/镜像[M]/左右翻[S]/上下翻[D]/缩放[L]/对齐[F]/}<退出>:"
  19.         mRMatrix t
  20.         tf1 t
  21.         mTMatrix0 (xdrx_matrix_identity 3)
  22.         mRMatrix t
  23.   )
  24.   (xdrx_drag_setmatrix mTMatrix0 t)
  25.   (while mRMatrix
  26.     (xdrx_drag_initget 1 "T R A M S D L F")
  27.     (xdrx_drag_setmode "Move")
  28.     (setq mRMatrix (xdrx_PickSet_dragGen prompt1 ss pj 1 (not tf)))
  29.     (cond
  30.       ((= mRMatrix "A")
  31.         (setq mTMatrix (xdrx_matrix_setRotation mTMatrix0 (/ pi 2) '
  32.                                                 (0 0 1) (trans pj 1 0)
  33.                        )
  34.         )
  35.         (xdrx_drag_setmatrix mTMatrix nil)
  36.       )
  37.       ((= mRMatrix "S")
  38.         (setq mTMatrix (xdrx_matrix_setMirror mTMatrix0 (list
  39.                                                               (trans pj 1 0)
  40.                                                               (trans
  41.                                                                      (polar pj
  42.                                                                             (/ pi 2) 100
  43.                                                                      ) 1 0
  44.                                                               )
  45.                                                         )
  46.                        )
  47.         )
  48.         (xdrx_drag_setmatrix mTMatrix nil)
  49.       )
  50.       ((= mRMatrix "D")
  51.         (setq mTMatrix (xdrx_matrix_setMirror mTMatrix0 (list
  52.                                                               (trans pj 1 0)
  53.                                                               (trans
  54.                                                                      (polar pj 0.0 100)
  55.                                                                      1 0
  56.                                                               )
  57.                                                         )
  58.                        )
  59.         )
  60.         (xdrx_drag_setmatrix mTMatrix nil)
  61.       )
  62.       ((= mRMatrix "F")
  63.         (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  64.         (xdrx_setmark)
  65.         ($xdlsp_Pickset_TransFormedCopy ss mTMatrix2)
  66.         (if (and
  67.               (setq pt1 (getpoint "\n请拾取对齐源参考点:"))
  68.               (setq pt2 (getpoint pt1 "\n请拾取另一定确定对齐参考轴:"))
  69.               (setq pt3 (getpoint "\n请拾取目标参考点:"))
  70.               (setq pt4 (getpoint pt3 "\n请拾取另一点确定目标参考轴:"))
  71.             )
  72.           (progn
  73.             (setq mVec1 (mapcar
  74.                           '-
  75.                           pt1
  76.                           pt2
  77.                         )
  78.                   mVec2 (mapcar
  79.                           '-
  80.                           pt3
  81.                           pt4
  82.                         )
  83.                   ang (xdrx_vector_angle mVec1 mVec2)
  84.                   mMatTrans (xdrx_matrix_setTranslation mTMatrix0
  85.                                                         (mapcar
  86.                                                           '-
  87.                                                           '(0 0 0)
  88.                                                           (trans pj 1 0)
  89.                                                         )
  90.                             )
  91.                   mMatTrans1 (xdrx_matrix_setTranslation mTMatrix0
  92.                                                          (mapcar
  93.                                                            '-
  94.                                                            (trans pj 1 0)
  95.                                                            '(0 0 0)
  96.                                                          )
  97.                              )
  98.                   mMatRot (xdrx_vector_rotateTo mVec1 mVec2)
  99.                   mMatRot (xdrx_matrix_setTranslation mMatRot
  100.                                                       (mapcar
  101.                                                         '-
  102.                                                         pt3
  103.                                                         pt1
  104.                                                       )
  105.                           )
  106.                   mMatRot (xdrx_matrix_product mMatTrans1
  107.                                                (xdrx_matrix_product mMatRot mMatTrans)
  108.                           )
  109.             )
  110.             (xdrx_drag_setmatrix mMatRot nil)
  111.           )
  112.         )
  113.         (command "._erase" (xdrx_getss) "")
  114.       )
  115.       ((= mRMatrix "R")
  116.         (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  117.         (xdrx_setmark)
  118.         ($xdlsp_Pickset_TransFormedCopy ss mTMatrix2)
  119.         ($xdlsp_PickSet_redraw (setq ss1 (xdrx_getss))
  120.                                3
  121.         )
  122.         (xdrx_drag_setmatrix mTMatrix0 t)
  123.         (xdrx_drag_SetMode "Rotate")
  124.         (xdrx_drag_initget 1)
  125.         (if (not (setq mTMatrix (xdrx_pickset_draggen "\n旋转角度[回车输入]:"
  126.                                                       ss1 (setq pj1
  127.                                                                 (trans (xdrx_drag_getLastPoint) 0 1)
  128.                                                           )
  129.                                                       2
  130.                                 )
  131.                  )
  132.             )
  133.           (progn
  134.             (if (not (setq ang (getangle "\n请输入旋转角度<0>:")))
  135.               (setq ang 0.0)
  136.             )
  137.             (setq mTMatrix (xdrx_matrix_setRotation mTMatrix0 ang '
  138.                                                     (0 0 1) (trans pj1 1 0)
  139.                            )
  140.             )
  141.           )
  142.           (progn
  143.             (setq mMatTrans (xdrx_matrix_setTranslation mTMatrix0
  144.                                                         (mapcar
  145.                                                           '-
  146.                                                           pj
  147.                                                           pj1
  148.                                                         )
  149.                             )
  150.                   mTMatrix (xdrx_matrix_product mMatTrans mTMatrix)
  151.                   mTMatrix (xdrx_matrix_product mTMatrix mTMatrix2)
  152.             )
  153.           )
  154.         )
  155.         (xdrx_drag_setmatrix mTMatrix t)
  156.         (command "._erase" ss1 "")
  157.       )
  158.       ((= mRMatrix "M")
  159.         (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  160.         (xdrx_setmark)
  161.         ($xdlsp_Pickset_TransFormedCopy ss mTMatrix2)
  162.         ($xdlsp_PickSet_redraw (setq ss1 (xdrx_getss))
  163.                                3
  164.         )
  165.         (xdrx_drag_setmatrix mTMatrix0 t)
  166.         (xdrx_drag_SetMode "Mirror")
  167.         (xdrx_drag_initget 1)
  168.         (if (and
  169.               (setq pj1 (getpoint "\n请拾取镜像参考基点<退出>:"))
  170.               (setq mTMatrix (xdrx_pickset_draggen "\n\n请拾取另一点定确定镜像轴<退出>:"
  171.                                                    ss1 pj1 2
  172.                              )
  173.               )
  174.             )
  175.           (progn
  176.             (setq mMatTrans (xdrx_matrix_setTranslation mTMatrix0
  177.                                                         (mapcar
  178.                                                           '-
  179.                                                           pj
  180.                                                           pj1
  181.                                                         )
  182.                             )
  183.                   mTMatrix (xdrx_matrix_product mMatTrans mTMatrix)
  184.                   mTMatrix (xdrx_matrix_product mTMatrix mTMatrix2)
  185.             )
  186.           )
  187.           (progn
  188.             (setq mTMatrix mTMatrix2)
  189.           )
  190.         )
  191.         (xdrx_drag_setmatrix mTMatrix nil)
  192.         (command "._erase" ss1 "")
  193.       )
  194.       ((= mRMatrix "L")
  195.         (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  196.         (xdrx_setmark)
  197.         ($xdlsp_Pickset_TransFormedCopy ss mTMatrix2)
  198.         ($xdlsp_PickSet_redraw (setq ss1 (xdrx_getss))
  199.                                3
  200.         )
  201.         (xdrx_drag_setmatrix mTMatrix0 t)
  202.         (setq box (xdrx_entity_box ss1)
  203.               scl (- (caadr box) (caar box))
  204.         )
  205.         (xdrx_drag_SetMode "Scale" scl)
  206.         (xdrx_drag_initget 1)
  207.         (if (not (setq mTMatrix (xdrx_pickset_draggen "\n缩放比例[回车输入]:"
  208.                                                       ss1 (setq pj1
  209.                                                                 (trans (xdrx_drag_getLastPoint) 0 1)
  210.                                                           )
  211.                                                       2
  212.                                 )
  213.                  )
  214.             )
  215.           (progn
  216.             (initget 6)
  217.             (if (not (setq scl (getreal "\n请输入缩放比例<1>:")))
  218.               (setq scl 1.0)
  219.             )
  220.             (if (/= scl 1.0)
  221.               (progn
  222.                 (setq mTMatrix (xdrx_matrix_setScale mTMatrix0 scl
  223.                                                      (trans pj1 1 0)
  224.                                )
  225.                 )
  226.               )
  227.             )
  228.           )
  229.         )
  230.         (setq mMatTrans (xdrx_matrix_setTranslation mTMatrix0
  231.                                                     (mapcar
  232.                                                       '-
  233.                                                       pj
  234.                                                       pj1
  235.                                                     )
  236.                         )
  237.               mTMatrix (xdrx_matrix_product mMatTrans mTMatrix)
  238.               mTMatrix (xdrx_matrix_product mTMatrix mTMatrix2)
  239.         )
  240.         (xdrx_drag_setmatrix mTMatrix nil)
  241.         (command "._erase" ss1 "")
  242.       )
  243.       ((= mRMatrix "T")
  244.         (setq mTMatrix2 (xdrx_drag_getLastMatrix))
  245.         (xdrx_setmark)
  246.         ($xdlsp_Pickset_TransFormedCopy ss mTMatrix2)
  247.         (if (not tf)
  248.           ($xdlsp_pickset_visible ss tf)
  249.         )
  250.         (initget 2)
  251.         (if (setq pj1 (getpoint "\n请输入新的基点:"))
  252.           (progn
  253.             (setq pj pj1)
  254.             (xdrx_drag_setmatrix mTMatrix2 T)
  255.           )
  256.         )
  257.         (command "._erase" (xdrx_getss) "")
  258.       )
  259.       ((= (type mRMatrix) 'LIST)
  260.         (if tf
  261.           ($xdlsp_Pickset_TransFormedCopy ss mRMatrix)
  262.           (progn
  263.             ($xdlsp_Pickset_TransForm ss mRMatrix)
  264.             (setq mRMatrix nil)
  265.           )
  266.         )
  267.       )
  268.     )
  269.   )
  270.   (xdrx_ucsoff)
  271.   (xdrx_end)
  272.   (xdrx_SysVar_Pop)
  273.   (princ)
  274. )
  275. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-9 01:37:29 | 显示全部楼层
最初由 XDSoft 发布
[B]
晓东工具箱准备全面启用OBJECTDCL作对话框。
能替自己省事的地方要学会省事。多多交流,
什么都可以解决的。
[/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 02:23 , Processed in 0.406154 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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