找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1708|回复: 5

[测试]:XDAPI矩阵应用示例之自由缩放旋转。

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-2-21 23:48:10 | 显示全部楼层 |阅读模式

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

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

×

  1. ;;矩阵应用示例一:自由旋转缩放 By Eachy 2003.02.20

  2. (defun ea:drma (/ e v1 v2 matrix pt0 urp loop urp1 source pt matrix)
  3.   (setq        e    (xdrx_entsel "\n选择线: " '((0 . "LINE")))
  4.         urp  (xdrx_getentdxf 10)
  5.         loop t
  6.   )
  7.   (setq
  8.     matrix (xdrx_matrix_SetTranslation (xdrx_matrix_identity 3) urp)
  9.   )
  10.   (setq v1 (distance urp (setq pt0 (xdrx_getentdxf 11))))
  11.   (prompt "\nscond point :")
  12.   (while loop
  13.     (setq urp1 (grread t 1 2))
  14.     (setq source (car urp1)
  15.           pt         (cadr urp1)
  16.     )
  17.     (cond
  18.       ((and (= source 5)                ;跟踪点
  19.             (or        (/= (car urp) (car pt))
  20.                 (/= (cadr urp) (cadr pt))
  21.             )
  22.        )
  23.        (progn
  24.          (setq v2 (distance pt urp))
  25.          (xdrx_entity_transform
  26.            e
  27.            (xdrx_matrix_setrotation
  28.              (xdrx_matrix_setScale
  29.                matrix
  30.                (/ v2 v1)
  31.                urp
  32.              )
  33.              (xdrx_vector_angle (mapcar '- pt0 urp) (mapcar '- pt urp))
  34.              '(0.0 0.0 1.0)
  35.              urp
  36.            )
  37.          )
  38.          (setq v1  v2
  39.                pt0 pt
  40.          )
  41.          ;;(setq urp pt)
  42.        )
  43.       )
  44.       ((or (= source 3)                        ;拾取点
  45.            (and (= source 2) (or (= pt 13) (= pt 32)))
  46.        )
  47.        (setq loop nil)
  48.       )
  49.       (t)
  50.     )
  51.   )
  52. )

本帖被以下淘专辑推荐:

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-2-21 23:57:33 | 显示全部楼层

Re: [测试]:[测试]:XDAPI矩阵应用示例之自由缩放旋转。

最初由 eachy 发布
[B][CODE]
;;矩阵应用示例一:自由旋转缩放 By Eachy 2003.02.20

(defun ea:drma (/ e v1 v2 matrix pt0 urp loop urp1 source pt matrix)
  (setq        e    (xdrx_entsel "\n选择线: " '((0 . "LINE")))
        urp  (xdrx... [/B]


使用GRREAD拖动实体要进行实体变换,重生成,速度要慢。拖动方面的应用还是用实体自身的worldDraw,实体显示自身到屏幕的方法效率更高。还是用 xdrx_pickset_dragGen 更好。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2003-2-22 00:29:56 | 显示全部楼层
只是试试VLSP下拖动的方法,当然是对简单实体。如果是一根线或者一个简单块的拖动,毫秒级差别可以忽略不计,毕竟搞设计不差几秒的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-24 13:30:31 | 显示全部楼层
;;不用XDAPI的话旋转转换矩阵要如何建立???


  1. ;;实现动态缩放。
  2. (defun LAI:FREEMAG (/ HOLDECHO OLD_ERROR E EE URP LOOP URP1 URP2 SOURCE
  3.                     PT SCALE)

  4.   (defun ERR (MSG)
  5.     (if        (or (= MSG "Function cancelled")
  6.             (= MSG "quit / exit abort")
  7.         )
  8.       (princ)
  9.       (princ (strcat "\nError: " MSG))
  10.     )
  11.     (command "_.ERASE" E "")
  12.     (redraw)
  13.     (redraw EE 4)
  14.     (if        OLD_ERROR
  15.       (setq *ERROR* OLD_ERROR)
  16.     )
  17.     (princ)
  18.   )
  19.   (setq HOLDECHO (getvar "cmdecho"))
  20.   (setvar "cmdecho" 0)
  21.   (setq OLD_ERROR *ERROR*)
  22.   (setq *ERROR* ERR)
  23.   (setq        MATRIX '((1.0 0.0 0.0 0.0)
  24.                  (0.0 1.0 0.0 0.0)
  25.                  (0.0 0.0 1.0 0.0)
  26.                  (0.0 0.0 0.0 1.0)
  27.                 )
  28.   )
  29.   (setq EE (car (entsel)))
  30.   (command "_.COPY" EE "" "0,0" "@")
  31.   (setq E (entlast))
  32.   (setq        URP  (getpoint "\n指定基准点: ")
  33.         LOOP t
  34.   )
  35.   (setq        URP2 URP
  36.         SCALE 1
  37.   )
  38.   (setq MATRIX (EA:MATRIX_SETTRANSLATION MATRIX URP2))
  39.   (redraw EE 3)
  40.   (prompt "\n指定第二点: ")
  41.   (while LOOP
  42.     (setq URP1 (grread t 1 2))
  43.     (setq SOURCE (car URP1)
  44.           PT         (cadr URP1)
  45.     )
  46.     (cond
  47.       ((and (= SOURCE 5)                ;跟踪点
  48.             (or        (/= (car URP) (car PT))
  49.                 (/= (cadr URP) (cadr PT))
  50.             )
  51.        )
  52.        (progn
  53.          (redraw)
  54.          (vla-transformby
  55.            (vlax-ename->vla-object (entlast))
  56.            (vlax-tmatrix
  57.              (EA:MATRIX_SETTRANSLATION
  58.                (MREV MATRIX SCALE)
  59.                (mapcar '-
  60.                        URP2
  61.                        (mapcar '* (list SCALE SCALE SCALE) URP2)
  62.                )
  63.              )
  64.            )
  65.          )
  66.          ;;这里写得不好
  67.          ;;------------------------------------------------------------
  68.          (setq SCALE
  69.                 (+ 1 (/ (- (distance URP2 PT) (distance URP2 URP)) 10))
  70.          )
  71.          ;;------------------------------------------------------------
  72.          (grdraw URP2 PT -1)
  73.          (setq URP PT)
  74.        )
  75.       )
  76.       ((or (= SOURCE 3)                        ;拾取点
  77.            (and (= SOURCE 2) (or (= PT 13) (= PT 32)))
  78.        )
  79.        (setq LOOP NIL)
  80.        (command "_.ERASE" EE "")
  81.        (redraw)
  82.       )
  83.       ((= SOURCE 12)                        ;ENTER
  84.        (setq LOOP NIL)
  85.        (command "_.ERASE" E "")
  86.        (redraw)
  87.        (redraw EE 4)
  88.       )
  89.       (t)
  90.     )
  91.   )
  92.   (setq *ERROR* OLD_ERROR)
  93.   (setvar "cmdecho" HOLDECHO)
  94.   (princ)
  95. )

  96. ;;----------------------------------------------------------------------
  97. ;;矩阵平移一个向量
  98. (defun EA:MATRIX_SETTRANSLATION        (MATRIX VE / M1 M2 M3)
  99.   (setq        M1 (car MATRIX)
  100.         M2 (cadr MATRIX)
  101.         M3 (nth 2 MATRIX)
  102.   )
  103.   (list        (list (car M1) (cadr M1) (nth 2 M1) (car VE))
  104.         (list (car M2) (cadr M2) (nth 2 M2) (cadr VE))
  105.         (list (car M3) (cadr M3) (nth 2 M3) (last VE))
  106.         '(0.0 0.0 0.0 1.0)
  107.   )
  108. )

  109. ;;----------------------------------------------------------------------
  110. (defun MREV (A B / N U V)
  111.   (setq N 0)
  112.   (repeat (- (length A) 1)
  113.     (setq U (cons (mapcar '(lambda (V) (* B V)) (nth N A)) U)
  114.           N (1+ N)
  115.     )
  116.   )
  117.   (append (reverse U) (list (nth 3 A)))
  118. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

发表于 2004-10-12 22:54:24 | 显示全部楼层

Re: Re: [测试]:[测试]:XDAPI矩阵应用示例之自由缩放旋转。

最初由 XDSoft 发布
[B][QUOTE]最初由 eachy 发布
[B][使用GRREAD拖动实体要进行实体变换,重生成,速度要慢。拖动方面的应用还是用实体自身的worldDraw,实体显示自身到屏幕的方法效率更高。还是用 xdrx_pickset_dragGen 更好。 [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 19:45 , Processed in 0.211562 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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