明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4164|回复: 13

[已解答] 求复制的时候 动态旋转角度

[复制链接]
发表于 2013-6-3 17:28 | 显示全部楼层 |阅读模式
20明经币
求复制COPY的时候 动态旋转角度

如COPY 选好对象 基点后  然后按键盘 空格时 对象 旋转了90度~

最佳答案

查看完整内容

这个能否满足你的要求
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-6-3 17:28 | 显示全部楼层
本帖最后由 jicqj 于 2013-6-5 21:24 编辑

这个能否满足你的要求

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-6-3 18:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2013-6-3 18:34 | 显示全部楼层
本帖最后由 weiqi 于 2013-6-3 18:59 编辑

就是把复制的功能 加上这个效果~~http://bbs.mjtd.com/thread-99379-1-1.html
回复

使用道具 举报

发表于 2013-6-3 19:09 | 显示全部楼层
本帖最后由 wowan1314 于 2013-6-3 19:11 编辑

这个想法好! 天正软件中就有这样的程序! 叫“自由拷贝”,还有个命令叫“自由粘贴”的。

自由拷贝 倒是可以实现。 不过 自由粘贴  估计是LISP实现不了

说下我对自由拷贝的思路:
1、选择物体,选择基点。然后原位将选择集复制一遍。
2、用GRREAD函数循环,当鼠标移动时就把复制出的选择集由基点MOVE到鼠标点位置。
3、如果是 按A就把复制出的选择集以鼠标点位置为基准点旋转90度,其他W,S.D一样的处理方式。
4、当左键点击时结束GRREAD循环.
5、如果点的是右键那么久删除复制出的选择集。

点评

哥。写个呗~我水平有限,努力中。。  发表于 2013-6-3 19:13
回复

使用道具 举报

 楼主| 发表于 2013-6-3 19:46 | 显示全部楼层
本帖最后由 weiqi 于 2013-6-3 20:12 编辑



  1. (defun c:fz ()
  2.   (prompt "\n请选择复制旋转的对象:")
  3.   (if (and (setq ss (ssget))
  4.     (setq pt (getpoint "\n选择基点:"))
  5.       )
  6. (c:qq)


  7.   )
  8. )




  9. (defun c:qq ()

  10.    (setq la (entlast))
  11.       (princ "\n请指点目标点:")
  12.       (command "copy" ss "" pt pause)
  13.       (setq newss (ssadd))
  14.       (while (setq la (entnext la)) (ssadd la newss))
  15.       (princ "\n指定旋转角度或 [参照(R)]:")
  16.       ;;(command "rotate" newss "" "non" "@" pause)
  17.     (SETQ SSet1 newss)
  18.        (XZ)
  19. )











  20. ;;; ----------------------------------------------------------------------------
  21. ;;; ----------------------  = = = =  主 函 数  = = = =  ------------------------
  22. ;;; ----------------------------------------------------------------------------
  23. ;;;                            ( 通过键盘旋转目标 )                             
  24. ;;; ----------------------------------------------------------------------------
  25. (DEFUN xz (/ cmd loop SSet KeyList n step BasePoint0 BasePoint1 BasePoint2)
  26. (SETQ cmd (GETVAR "CMDECHO"))
  27. (SETVAR "CMDECHO" 0)
  28. (SETQ loop 1)
  29. (WHILE loop
  30.   (PROMPT "\n 选择对象 : ")
  31.   (SETQ SSet (ssget "l"))
  32.   (COND
  33.    ((NULL SSet)(ALERT "没有选中对象!"))
  34.    (T (SETQ loop nil))
  35.   )
  36. )
  37. (setq p1 (getpoint "指定基点: "))
  38. (PRINC "\n Press key:")
  39. (PRINC "\n\t 《1键- 1度》《2键-1度》《Q键 15度》《W键 -15度》《E键 45度》   ")
  40. (PRINC "\n\t 《A键 90度》《E键 -90度》 《D键 180度》")
  41. (TERPRI)
  42. (SETQ KeyList '(32  49 50 65 68 81 83 87 119 101 113 32 115 97 100))
  43. (WHILE (/= (SETQ n (CADR (GRREAD))) 13)
  44.   (if (MEMBER n KeyList)
  45.    (COND
  46. ((= n 49)(COMMAND "ROTATE" SSet "" p1 1)(PRINC "\r< +1度 >"))
  47.   ((= n 50)(COMMAND "ROTATE" SSet "" p1 -1)(PRINC "\r< -1度 >"))

  48.     ((= n 113)(COMMAND "ROTATE" SSet "" p1 15)(PRINC "\r< q 15度 >"))
  49.     ((= n 81)(COMMAND "ROTATE" SSet "" p1 15)(PRINC "\r< Q 15度 >"))

  50.     ((= n 119)(COMMAND "ROTATE" SSet "" p1 -15)(PRINC "\r< w -15度 >"))
  51.     ((= n 87)(COMMAND "ROTATE" SSet "" p1 -15)(PRINC "\r< W -15度 >"))

  52.     ((= n 101)(COMMAND "ROTATE" SSet "" p1 45)(PRINC "\r< e 45度 >"))
  53.     ((= n 69)(COMMAND "ROTATE" SSet "" p1 45)(PRINC "\r< E  45度 >"))

  54.     ((= n 115)(COMMAND "ROTATE" SSet "" p1 -90)(PRINC "\r< s -90度 >"))
  55.     ((= n 83)(COMMAND "ROTATE" SSet "" p1 -90)(PRINC "\r< S -90度 >"))

  56.     ((= n 97) (COMMAND "ROTATE" SSet "" p1 90)(PRINC "\r< a  90度>"))
  57.     ((= n 65) (COMMAND "ROTATE" SSet "" p1 90)(PRINC "\r< A  90度>"))

  58.     ((= n 100)(COMMAND "ROTATE" SSet "" p1 180)(PRINC "\r< d 180度>"))
  59.     ((= n 68)(COMMAND "ROTATE" SSet "" p1 180)(PRINC "\r< D 180度>"))

  60.     ((= n 32)(COMMAND "ROTATE" SSet "" p1 -45)(PRINC "\r<空格  -45度>"))

  61.    )
  62.   )
  63. );WHILE
  64. (SETVAR "CMDECHO" cmd)
  65. (PRINC)
  66. )
  67. (PRINC "按键旋转1 2 q w e a s d 命令XZ ")



有几个问题,(ssget "l") 怎么是多个对象

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-6-3 22:10 | 显示全部楼层
这个太简单了,不需要复杂的程序:
  1. ;;复制旋转对象
  2. (defun c:cr ()
  3.   (setq ent (ssget))
  4.   (command "copy" ent "" pause "@" "rotate" "p" "" "@")
  5. )

点评

支持一下 但是,貌似没有复制,只有旋转  发表于 2013-6-4 19:43
支持一下,但是主要是习惯和作图问题 呵呵~折腾一下扩展其他功能~  发表于 2013-6-3 22:18
回复

使用道具 举报

发表于 2013-6-4 09:09 | 显示全部楼层
请问能不能加上根据旁边的线来改变块的角度的功能 谢谢 哈哈

点评

G版有个ALO对齐的东西~~不过我貌似没找到源码  发表于 2013-6-4 23:20
回复

使用道具 举报

发表于 2013-6-4 17:57 | 显示全部楼层
不用天正的人表示 其实ctrl+v之后 输入r+角度就是旋转 s+数字就是缩放或者镜像 方便得很 干吗要用到天正那么不稳定的东西
回复

使用道具 举报

发表于 2013-6-4 21:59 | 显示全部楼层
(defun c:Q1()
(setq ent (ssget))
(command "copy" ent "")
(while (= 1 (getvar "cmdactive")) (command pause))
(command pause "@" "rotate" (entlast) "" "@"))
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 19:31 , Processed in 0.318260 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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