明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 629|回复: 4

[讨论] 动态移动转换坐标

[复制链接]
发表于 2023-5-4 19:28 | 显示全部楼层 |阅读模式
当前坐标系,动态移动的点怎么准确获取当前坐标,代码是论坛大佬的,有大佬帮看下?矩阵不太会。。。。移动的时候鼠标与对应点分离了。。。谢谢!
  1. (defun zyyd (ent  pp1 /        
  2.               ANGPCURSOR->PCURSOR_LAST  ;自由移动ent
  3.        ANGSSMOVE      CODE     DISSSMOVE
  4.        MODE             PCURSOR
  5.        PCURSOR_LAST   PSSMOVE     PSSMOVE_LAST
  6.        SS7        SSVLA  
  7.       )
  8.   (vl-load-com)
  9.   ;(setq ent (entsel))
  10.   (setq ss7 (ssadd) ss7 (ssadd ent ss7))
  11.   ;(setq  P1 (cadr ent))
  12.    ;(setq p1 (XD::Pnts:SetZ (getvar "VIEWCTR") 0)) ;3D -> 2D
  13.   ;(setq pt1 (trans pt1 1 0))
  14. ;;;----------------------------------------------------------------------
  15.   (vl-cmdf "move" ss7 "" '(0 0) '(0 0))  ;使用选择集ss处于激活状态,供下面的grread使用
  16. ;;;----------------------------------------------------------------------
  17.   (setq PssMove_Last  pp1)
  18.   (setq PCursor_last  (cadr (grread T 15 2))) ;PCursor_last为鼠标此时的位置,在grread中为鼠标移动时上一次的位置
  19.   (while (and (setq mode (grread 't))
  20.         (/= 3 (car mode))    ;若点击左键则grread中断。mode=3:鼠标左键
  21.    )
  22.     (setq code (car mode))
  23.     (setq PCursor (cadr mode))

  24.     (if  (and PCursor (= 5 code))  ;mode=5:鼠标移动
  25.       (progn
  26.   (vlax-for e      ;vlax-for:遍历对象集
  27.         (setq    ;把选择集ss转为vla集合
  28.           ssVla
  29.            (vla-get-activeselectionset
  30.           ;vla-get-activeselectionset:取得图形激活的选择集。
  31.        (cond (*AcadDoc*)
  32.              ((setq
  33.           *AcadDoc* (vla-get-activedocument
  34.           ;vla-get-activedocument:取得激活的文件(图形文件),即当前的dwg文件。
  35.                 (vlax-get-acad-object)
  36.           ;vlax-get-acad-object:检索当前 AutoCAD 任务中的顶层 AutoCAD应用程序对象
  37.               )
  38.         )
  39.              )
  40.        )
  41.            )
  42.         )
  43.     (progn
  44.       (setq AngPcursor->Pcursor_Last (angle Pcursor_Last Pcursor))
  45.           ;鼠标上次位置点 至 本此位置点 的角度
  46.       (setq AngSSMove AngPcursor->Pcursor_Last)
  47.           ;ss要移动的方向(与P1、P2正交)(与DisSSMove配合得到方向的正反)
  48.       (setq DisSSMove    ;ss中图元e 在本次鼠标移动时 要移动到距离
  49.        (* (distance Pcursor_Last Pcursor)
  50.           (cos (- AngPcursor->Pcursor_Last AngSSMove ))
  51.           ;cos用来控制每次移动的距离大小,
  52.           ;使得鼠标总在P1、P2连线的方向上,而不是ss与鼠标的距离越来越远难以控制。
  53.        )
  54.       )
  55.       (setq PssMove (polar PssMove_Last AngSSMove DisSSMove))
  56.           ;ss中图元e 在本次鼠标移动时 要移动到的位置点
  57.       (vla-move e      ;移动图元e
  58.           (vlax-3d-point PssMove_Last)
  59.           ;vlax-3d-point:把list点表转为(变体)点表
  60.           (vlax-3d-point PssMove)
  61.       )
  62.     )
  63.   )
  64.   (setq PCursor_Last
  65.          PCursor
  66.         PssMove_Last PssMove
  67.   )
  68.       )
  69.     )
  70.   )
  71.   (princ)
  72. )


发表于 2023-5-4 19:36 | 显示全部楼层
乱七八糟的
 楼主| 发表于 2023-5-4 19:46 | 显示全部楼层
本帖最后由 yaojing38 于 2023-5-4 19:47 编辑

说的不是很明白,,就是用户坐标系,获取鼠标的准确世界坐标系点位置,动态获取,动态转换成世界坐标位置。。。。 不转换移动物体的时候,物体跟鼠标点的位置会偏离。。。
发表于 2023-5-4 20:23 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-5-4 20:29 编辑

  1. (defun zyyd (ent / code e gr loop pt pt0 ty)
  2.   (vl-load-com)
  3.   (setq ty(car ent))
  4.   (setq pt0(cadr ent))
  5.   (setq e(vlax-ename->vla-object ty))
  6.   (setq loop t)
  7.   (while loop
  8.     (setq gr (grread t 15 0))
  9.     (setq pt (cadr gr))
  10.     (cond
  11.       ((= 5 (car gr))
  12.         (vla-move e (vlax-3d-point pt0)(vlax-3d-point pt))
  13.         (setq pt0 pt)
  14.       )
  15.       ((or (= 3 (car gr)) (= 32 (cadr gr)))
  16.         (setq loop nil)
  17.       )
  18.     )
  19.   )
  20.   (princ)
  21. )
  22. (zyyd (entsel))

用户坐标系就很麻烦 不可以先转成世界坐标吗 试试这个不用command的  你是不是视图不是俯视啊
 楼主| 发表于 2023-5-4 20:45 | 显示全部楼层
飞雪神光 发表于 2023-5-4 20:23
用户坐标系就很麻烦 不可以先转成世界坐标吗 试试这个不用command的  你是不是视图不是俯视啊

是俯视视图,谢谢您!可以用了。。。我加上了转换,,,(setq pt (trans (cadr gr) 1 0)),可能我的有距离的问题吧。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 15:46 , Processed in 0.955143 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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