找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1290|回复: 8

[原创]:LSP函数实现自由移动。

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-2-20 23:32:53 | 显示全部楼层 |阅读模式

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

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

×
本例仅在WCS下使用。

  1. <normalfont>
  2. ;;矩阵应用示例一:自由移动 By Eachy 2003.02.20
  3. ;;对选择集用Vla-for每个单体即可,当然大量的实体从效率上考虑
  4. ;;就意义不大了
  5. (defun ea:freemove (/ e urp loop urp1 source pt matrix)
  6.   (setq        matrix '((1.0 0.0 0.0 0.0)
  7.                  (0.0 1.0 0.0 0.0)
  8.                  (0.0 0.0 1.0 0.0)
  9.                  (0.0 0.0 0.0 1.0)
  10.                 )
  11.   )
  12.   (setq e (car (entsel)))
  13.   (setq        urp  (getpoint "\n基点: ")
  14.         loop t
  15.   )
  16.   (prompt "\nscond point :")
  17.   (while loop
  18.     (setq urp1 (grread t 1 2))
  19.     (setq source (car urp1)
  20.           pt         (cadr urp1)
  21.     )
  22.     (cond
  23.       ((and (= source 5)                ;跟踪点
  24.             (or        (/= (car urp) (car pt))
  25.                 (/= (cadr urp) (cadr pt))
  26.             )
  27.        )
  28.        (progn
  29.          (vla-transformby
  30.            (vlax-ename->vla-object e)
  31.            (vlax-tmatrix
  32.              (ea:matrix_SetTranslation        ;构造平移矩阵--自由移动
  33.                matrix                   ;如果是旋转矩阵就是自由旋转
  34.                (mapcar '- pt urp)       ;矩阵乘以系数则是自由缩放
  35.              )
  36.            )
  37.          )
  38.          (setq urp pt)
  39.        )
  40.       )
  41.       ((or (= source 3)                        ;拾取点
  42.            (and (= source 2) (or (= pt 13) (= pt 32)))
  43.        )
  44.        (setq loop nil)
  45.       )
  46.       (t)
  47.     )
  48.   )
  49. )
  50. </normalfont>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-2-21 02:33:20 | 显示全部楼层
支持原创!
运行结果如下:

freemove

选择对象:
基点:
scond point :; 错误: no function definition: VLAX-ENAME->VLA-OBJECT
[/COLOR]
请问这是怎么回事?还有,这个程序的实用意义如何?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-21 09:20:34 | 显示全部楼层
请先调用一下(vl-load-com)
*********************************
不过请版竹完善一下就更好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-21 11:38:41 | 显示全部楼层
也不行:
命令: (ea:freemove)
选择对象:
基点:
scond point :; 错误: no function definition: EA:MATRIX_SETTRANSLATION
EA:MATRIX_SETTRANSLATION函数程序中未定义,是不是在你的其它程序中定义的呀。
啊,找到了:

  1. (defun ea:matrix_SetTranslation        (matrix ve / m1 m2 m3)
  2.   (setq        m1 (car matrix)
  3.         m2 (cadr matrix)
  4.         m3 (nth 2 matrix)
  5.   )
  6.   (list        (list (car m1) (cadr m1) (nth 2 m1) (car ve))
  7.         (list (car m2) (cadr m2) (nth 2 m2) (cadr ve))
  8.         (list (car m3) (cadr m3) (nth 2 m3) (last ve))
  9.         '(0.0 0.0 0.0 1.0)
  10.   )
  11. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

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

使用道具 举报

发表于 2003-2-21 12:36:04 | 显示全部楼层
逆矩陣應用

  1. <normalfont>
  2. ;;; By LUCAS(龙龙仔) 2003年2月18日
  3. ;;; Adds the specified item to a given block definition
  4. ;;; The drawing maybe regenerated for the change to become visible
  5. (defun C:ADDOBJECTSTOBLOCK (/ BLK BLKDEF SSARRAY ENT DOC)

  6. ;;; Utility routine to convert a selection set to an ActiveX array
  7.   (defun SELECTIONSET->ARRAY (SS / C R)
  8.     (vl-load-com)
  9.     (setq C -1)
  10.     (repeat (sslength SS)
  11.       (setq R (cons (ssname SS (setq C (1+ C))) R))
  12.     )
  13.     (setq R (reverse R))
  14.     (vlax-safearray-fill
  15.       (vlax-make-safearray
  16.         vlax-vbobject
  17.         (cons 0 (1- (length R)))
  18.       )
  19.       (mapcar 'vlax-ename->vla-object R)
  20.     )
  21.   )

  22. ;;;---------------------------------------------------------------
  23.   (defun TT (/ SS N TM)
  24.     (while (<  (length (setq TM (nentselp "\n选择要加入对象的图块: ")))
  25.               4
  26.            )
  27.     )
  28.     (setq BLK (last (last TM)))  ;加入最外层图块
  29.     ;;(setq BLK (car (last TM))) ;only for 1:1 not mirror 加入至点选内层图块
  30.     (setq TMP (vlax-ename->vla-object BLK))
  31.     (setq TM (vlax-tmatrix
  32.                (MREV (EA:MATRIX_INVERSE
  33.                        (caddr TM)
  34.                      )
  35.                      (*        (/ 1 (vla-get-xscalefactor TMP))
  36.                         (/ 1 (vla-get-yscalefactor TMP))
  37.                         (/ 1 (vla-get-zscalefactor TMP))
  38.                      )
  39.                )
  40.              )
  41.     )
  42.     (redraw BLK 3)
  43.     (while (not SS)
  44.       (prompt "\n选择要加入的对象: ")
  45.       (setq SS (ssget (list '(-4 . "< NOT")
  46.                             (cons 2 (cdr (assoc 2 (entget BLK))))
  47.                             '(-4 . "NOT >")
  48.                       )
  49.                )
  50.       )
  51.     )
  52.     (setq N 0)
  53.     (repeat (sslength SS)
  54.       (vla-transformby
  55.         (vlax-ename->vla-object (ssname SS N))
  56.         TM
  57.       )
  58.       (setq N (1+ N))
  59.     )
  60.     SS
  61.   )

  62. ;;;----------------------------------------------------------------------
  63.   (defun MREV (A B / N U V)
  64.     (setq N 0)
  65.     (repeat (- (length A) 1)
  66.       (setq U (cons (mapcar '(lambda (V) (* B V)) (nth N A)) U)
  67.             N (1+ N)
  68.       )
  69.     )
  70.     (append (reverse U) (list (nth 3 A)))
  71.   )

  72. ;;;-----BY EACHY--
  73.   (defun EA:MATRIX_INVERSE (MATRIX /          M0         M1        M2     M3
  74.                             M00           M01          M02         M03        M10    M11
  75.                             M12           M13          M20         M21        M22    M23
  76.                             _A           EA:DETERMINANT        A11    A12
  77.                             A21           A22          A33         A34        A41    A42
  78.                             A43           A13          A23         A31        A32
  79.                            )
  80.     ;;行列式展开,计算代数余子式
  81.     (defun EA:DETERMINANT (A00 A01 A02 A10 A11 A12 A20 A21 A22 /)
  82.       (- (+ (* A00 A11 A22)
  83.             (* A01 A12 A20)
  84.             (* A02 A21 A10)
  85.          )
  86.          (* A02 A11 A20)
  87.          (* A01 A10 A22)
  88.          (* A00 A21 A12)
  89.       )
  90.     )
  91.     (setq M0 (car MATRIX)
  92.           M1 (cadr MATRIX)
  93.           M2 (nth 2 MATRIX)
  94.           M3 (last MATRIX)
  95.     )
  96.     (setq M00 (car M0)
  97.           M01 (cadr M0)
  98.           M02 (nth 2 M0)
  99.           M03 (last M0)
  100.     )
  101.     (setq M10 (car M1)
  102.           M11 (cadr M1)
  103.           M12 (nth 2 M1)
  104.           M13 (last M1)
  105.     )
  106.     (setq M20 (car M2)
  107.           M21 (cadr M2)
  108.           M22 (nth 2 M2)
  109.           M23 (last M2)
  110.     )
  111.     (setq A11 (EA:DETERMINANT M11 M12 M13 M21 M22 M23 0.0 0.0 1.0)
  112.           A12 (- (EA:DETERMINANT M10 M12 M13 M20 M22 M23 0.0 0.0 1.0))
  113.           A13 (EA:DETERMINANT M10 M11 M13 M20 M21 M23 0.0 0.0 1.0)
  114.           A21 (- (EA:DETERMINANT M01 M02 M03 M21 M22 M23 0.0 0.0 1.0))
  115.           A22 (EA:DETERMINANT M00 M02 M03 M20 M22 M23 0.0 0.0 1.0)
  116.           A23 (- (EA:DETERMINANT M00 M01 M03 M20 M21 M23 0.0 0.0 1.0))
  117.           A31 (EA:DETERMINANT M01 M02 M03 M11 M12 M13 0.0 0.0 1.0)
  118.           A32 (- (EA:DETERMINANT M00 M02 M03 M10 M12 M13 0.0 0.0 1.0))
  119.           A33 (EA:DETERMINANT M00 M01 M03 M10 M11 M13 0.0 0.0 1.0)
  120.           A41 (- (EA:DETERMINANT M01 M02 M03 M11 M12 M13 M21 M22 M23))
  121.           A42 (EA:DETERMINANT M00 M02 M03 M10 M12 M13 M20 M22 M23)
  122.           A43 (- (EA:DETERMINANT M00 M01 M03 M10 M11 M13 M20 M21 M23))

  123.     )
  124.     (list (list A11 A21 A31 A41)
  125.           (list A12 A22 A32 A42)
  126.           (list A13 A23 A33 A43)
  127.           '(0.0 0.0 0.0 1.0)
  128.     )
  129.   )


  130. ;;;-----------------------------------------------------------------------
  131.   (vl-load-com)
  132.   (setq        SSARRAY        (SELECTIONSET->ARRAY (TT))
  133.         BLKDEF        (vla-item
  134.                   (vla-get-blocks
  135.                     (setq
  136.                       DOC (vla-get-activedocument (vlax-get-acad-object))
  137.                     )
  138.                   )
  139.                   (vla-get-name TMP)
  140.                 )

  141.   )
  142.   (vla-copyobjects DOC SSARRAY BLKDEF)
  143.   (foreach ENT (vlax-safearray->list SSARRAY)
  144.     (vla-delete ENT)
  145.   )
  146.   (vla-regen DOC acallviewports)
  147.   (vlax-release-object DOC)
  148.   (princ)
  149. )
  150. </normalfont>

点评

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-7-7 11:06:08 | 显示全部楼层

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-7-7 11:45:36 | 显示全部楼层
03年站长就有这样的功底,今天是不是来个自定义move?

点评

XDAPI 中提供了很多动态函数 xdrx_drag* 还有 xdrx_ssjig 、 xdrx_PointMonitor 等等,比用alisp 写好用方便  详情 回复 发表于 2013-7-7 22:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-7-7 22:27:03 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-7-7 11:45
03年站长就有这样的功底,今天是不是来个自定义move?

XDAPI 中提供了很多动态函数 xdrx_drag* 还有 xdrx_ssjig 、 xdrx_PointMonitor 等等,比用alisp 写好用方便

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 17:35 , Processed in 0.351278 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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