明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2922|回复: 4

[源码]跟随鼠标旋转

[复制链接]
发表于 2014-5-11 19:53:15 | 显示全部楼层 |阅读模式
本帖最后由 004 于 2014-5-11 19:54 编辑


  1. ;;跟随鼠标旋转
  2. ;;wkq004   20140331
  3. (defun c:xx ()
  4.   ;;临时取消捕捉
  5. ;;;(defun ybl-osmode (/ os)
  6. ;;;  (if (>= (setq os (getvar "osmode")) 16384)
  7. ;;;    (setvar "osmode" (- os 16384))
  8. ;;;    (setvar "osmode" (+ os 16384))
  9. ;;;  )
  10. ;;;  (princ)
  11. ;;;)
  12. (setq os (getvar "osmode"))
  13.   (setvar "osmode" 0)
  14.   (princ "\n选择要旋转的对象:")
  15.   (setq ss (ssget))
  16.   (repeat (setq i (sslength ss))
  17.     (redraw (ssname ss (1- i)) 3)
  18.   )
  19.   (setq pt (getpoint  "\n指定基点:"))
  20. ;;;  (ybl-osmode)
  21. ;;;  (command "_.delay" 100)

  22.   (entmake (list '(0 . "LINE")
  23.                          '(100 . "AcDbEntity")
  24.                          '(100 . "AcDbLine")
  25.                          (cons 10 pt)
  26.                          (cons 11 (polar pt 0 0.001))
  27.                          '(62 . 7)
  28.                          '(210 0. 0. 1.)
  29.                    )
  30.           )
  31.   (setq        e (entlast)
  32.   )
  33.   (setq el (entget e))
  34.   (setq cs 40)
  35.   (while (> cs 0)
  36.     (if        (and (setq TMP (grread t 7 1)) (= (car TMP) 5))
  37.       (progn        
  38.         (setq cs (1- cs))
  39.         (setq el (subst (cons 11 (cadr tmp)) (assoc 11 el) el))
  40.         (entmod el)
  41.       )
  42.     )
  43.   )
  44.   (entdel e)
  45. ;;;  (grread t 7 1)
  46.   (command ".rotate"
  47.            ss
  48.            ""
  49.            pt
  50.            "r"
  51.            pt
  52.            (cond ((and (setq TMP (grread t 7 1)) (= (car TMP) 5)) ;_移动
  53.                   (setq PT2 (cadr TMP))
  54.                  )
  55.            )
  56.            pause
  57.   )

  58.   (setvar "osmode" os)
  59. ;;;  (ybl-osmode)
  60. )

本帖子中包含更多资源

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

x
发表于 2014-6-16 11:10:03 | 显示全部楼层
这个功能非常实用,实际应用中发现指定基点的时候无法捕捉,需要每次单独设置捕捉,
另外如果可以增加一个功能就更好了,就是指定基点之后,如果直接输入数字即为旋转角度,鼠标点击的话,则是更随鼠标,那样就更完美了,希望楼主修改一下,谢谢
发表于 2014-6-28 00:08:26 来自手机 | 显示全部楼层
支持 源码,明经有你更精彩。
2楼的功能正是我想要的。希望楼主为大家花点时间,我等
发表于 2015-11-25 21:47:41 | 显示全部楼层
就是不太灵敏,无法捕捉哦
发表于 2016-6-5 23:13:50 | 显示全部楼层
为本代码进一步增强修改:

1:取消定位点,减小动作,加快画图速度。
2:最后跟随鼠标定位。
  1. ;;跟随鼠标旋转+移动定位
  2. (defun c:xx (/ os ss i pt e e1 cs tmp pt2)
  3. (setq os (getvar "osmode"))
  4.   (setvar "osmode" 0)
  5.   (princ "\n选择要旋转的对象:")
  6.   (setq ss (ssget))
  7.   (repeat (setq i (sslength ss))
  8.     (redraw (ssname ss (1- i)) 3)
  9.   )
  10.   (setq pt (nth 1 (grread 5)))
  11.   (entmake (list '(0 . "LINE")
  12.        '(100 . "AcDbEntity")
  13.        '(100 . "AcDbLine")
  14.        (cons 10 pt)
  15.        (cons 11 (polar pt 0 0.001))
  16.        '(62 . 7)
  17.        '(210 0. 0. 1.)
  18.        )
  19.     )
  20.   (setq  e (entlast)
  21.   )
  22.   (setq el (entget e))
  23.   (setq cs 40)
  24.   (while (> cs 0)
  25.     (if  (and (setq TMP (grread t 7 1)) (= (car TMP) 5))
  26.       (progn  
  27.   (setq cs (1- cs))
  28.   (setq el (subst (cons 11 (cadr tmp)) (assoc 11 el) el))
  29.   (entmod el)
  30.       )
  31.     )
  32.   )
  33.   (entdel e)
  34.   (command ".rotate"
  35.      ss
  36.      ""
  37.      pt
  38.      "r"
  39.      pt
  40.      (cond ((and (setq TMP (grread t 7 1)) (= (car TMP) 5)) ;_移动
  41.       (setq PT2 (cadr TMP))
  42.      )
  43.      )
  44.      pause
  45.   )
  46.   (command "MOVE" ss "" pt2)
  47.   (setvar "osmode" os)
  48. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 08:08 , Processed in 0.178939 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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