明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4432|回复: 16

[已解答] 程序加个功能 ZZ版 vectra高手 过来瞧瞧 看看

[复制链接]
发表于 2014-12-20 19:57:27 | 显示全部楼层 |阅读模式
20明经币
   论坛大神们帮忙写的一个程序  非常好用    最近工作需要   加个功能
加个Q向左旋转  E向右旋转   旋转角度默认为90度   如果能留个设置旋转的角度就更好
以前的Q设置  改为R
  1. (defun c:tt (/ _getreal gr ss str)
  2.   (defun _getreal (msg default / ret)
  3.     (setq ret (getreal (strcat msg " <" (rtos default) ">:")))
  4.     (if        (null ret)
  5.       default
  6.       ret
  7.     )
  8.   )
  9.   (setvar 'cmdecho 0)
  10.   (if (null *grmovedis*)
  11.     (setq *grmovedis* 4.0)
  12.   )
  13.   (setq str "\n按W S A D 移动, Q 设置步长, 空格回车或左\右键退出:")
  14.   (princ (strcat "\n步长 = " (rtos *grmovedis* 2) ""))
  15.   (if (setq ss (ssget))
  16.     (progn (princ str)
  17.            (while (and (/= (car (setq gr (grread t 15 0))) 3)
  18.                        (not (equal gr '(2 32)))
  19.                        (not (equal gr '(2 13)))
  20.                        (not (equal gr '(11 0)))
  21.                        (not (equal gr '(25 0)))
  22.                   )
  23.              (cond ((or (equal gr '(2 119)) (equal gr '(2 87))) ;wW
  24.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) (* pi 0.5) *grmovedis*))
  25.                    )
  26.                    ((or (equal gr '(2 83)) (equal gr '(2 115))) ;Ss
  27.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) (* pi 1.5) *grmovedis*))
  28.                    )
  29.                    ((or (equal gr '(2 65)) (equal gr '(2 97))) ;Aa
  30.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) pi *grmovedis*))
  31.                    )
  32.                    ((or (equal gr '(2 68)) (equal gr '(2 100))) ;Dd
  33.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) 0 *grmovedis*))
  34.                    )
  35.                    ((or (equal gr '(2 81)) (equal gr '(2 113))) ;Qq
  36.                     (setq *grmovedis* (_getreal "\n输入每次移动的步长" *grmovedis*))
  37.                     (princ str)
  38.                    )
  39.              )
  40.            )
  41.     )
  42.   )
  43.   (setvar 'cmdecho 1)
  44.   (princ)
  45. )

最佳答案

查看完整内容

求形心函数改自Z版,特此声明 同时修改了移位后重新计算形心,以保持以选择集中心旋转。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-12-20 19:57:28 | 显示全部楼层
本帖最后由 vectra 于 2014-12-21 08:23 编辑

求形心函数改自Z版,特此声明
同时修改了移位后重新计算形心,以保持以选择集中心旋转。

  1. (defun c:tt (/ _getreal _getpoint gr ss str)
  2.   (defun _getreal (msg default / ret)
  3.     (setq ret (getreal (strcat msg " <" (rtos default) ">:")))
  4.     (if        (null ret)
  5.       default
  6.       ret
  7.     )
  8.   )

  9.   (defun _getpoint (ss / a b i m1 m2 p1 p2)
  10.     (repeat (setq i (sslength ss))
  11.       (vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'p1 'p2)
  12.       (setq p1 (vlax-safearray->list p1)
  13.             p2 (vlax-safearray->list p2)
  14.       )
  15.       (if (null m1)
  16.         (setq m1 p1)
  17.         (setq m1 (mapcar 'min m1 p1))
  18.       )
  19.       (if (null m2)
  20.         (setq m2 p2)
  21.         (setq m2 (mapcar 'max m2 p2))
  22.       )
  23.     )
  24.     (mapcar '(lambda (a b) (/ (+ a b) 2)) m1 m2)
  25.   )

  26.   (setvar 'cmdecho 0)
  27.   (if (null *grmovedis*)
  28.     (setq *grmovedis* 4.0)
  29.   )
  30.   (if (null *grangles*)
  31.     (setq *grangles* 90.0)
  32.   )
  33.   (setq str "\n按W S A D 移动, Q向左旋转, E向右旋转 R设置步长 T设置角度, 空格回车或左\右键退出:")
  34.   (princ (strcat "\n步长 = " (rtos *grmovedis* 2) ""))
  35.   (if (setq ss (ssget))
  36.     (progn (princ str)
  37.            (while (and (/= (car (setq gr (grread t 15 0))) 3)
  38.                        (not (equal gr '(2 32)))
  39.                        (not (equal gr '(2 13)))
  40.                        (not (equal gr '(11 0)))
  41.                        (not (equal gr '(25 0)))
  42.                   )
  43.              (cond ((or (equal gr '(2 119)) (equal gr '(2 87))) ;wW
  44.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) (* pi 0.5) *grmovedis*))
  45.                    )
  46.                    ((or (equal gr '(2 83)) (equal gr '(2 115))) ;Ss
  47.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) (* pi 1.5) *grmovedis*))
  48.                    )
  49.                    ((or (equal gr '(2 65)) (equal gr '(2 97))) ;Aa
  50.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) pi *grmovedis*))
  51.                    )
  52.                    ((or (equal gr '(2 68)) (equal gr '(2 100))) ;Dd
  53.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) 0 *grmovedis*))
  54.                    )
  55.                    ((or (equal gr '(2 69)) (equal gr '(2 101))) ;Ee
  56.                     (vl-cmdf "_.rotate" ss "" (_getpoint ss) (- *grangles*))
  57.                    )
  58.                    ((or (equal gr '(2 81)) (equal gr '(2 113))) ;Qq
  59.                     (vl-cmdf "_.rotate" ss "" (_getpoint ss) *grangles*)
  60.                    )
  61.                    ((or (equal gr '(2 82)) (equal gr '(2 114))) ;Rr
  62.                     (setq *grmovedis* (_getreal "\n输入每次移动的步长" *grmovedis*))
  63.                     (princ str)
  64.                    )
  65.                    ((or (equal gr '(2 84)) (equal gr '(2 116))) ;Tt
  66.                     (setq *grangles* (abs (_getreal "\n输入每次旋转的角度" *grangles*)))
  67.                     (princ str)
  68.                    )
  69.              )
  70.            )
  71.     )
  72.   )
  73.   (setvar 'cmdecho 1)
  74.   (princ)
  75. )

点评

完美啊 谢谢 非常感谢  发表于 2014-12-21 11:32
回复

使用道具 举报

发表于 2014-12-20 19:59:26 | 显示全部楼层
此码的原作者是谁?
回复

使用道具 举报

 楼主| 发表于 2014-12-20 20:00:34 | 显示全部楼层
lucas_3333 发表于 2014-12-20 19:59
此码的原作者是谁?

zzz版   怎么了?
回复

使用道具 举报

 楼主| 发表于 2014-12-20 20:01:19 | 显示全部楼层
lucas_3333 发表于 2014-12-20 19:59
此码的原作者是谁?

vectra  他帮忙修改过一次   啥问题 大哥
回复

使用道具 举报

发表于 2014-12-20 20:19:03 | 显示全部楼层
love1030312 发表于 2014-12-20 20:01
vectra  他帮忙修改过一次   啥问题 大哥

如果是这样,何不在原贴下面跟贴呢?然后给Z版或vectra大侠一个消息,如果大家在论坛看到一个程序,这个想这样改,那个想那样改,都发新主题,那样不是不利于查找?
回复

使用道具 举报

发表于 2014-12-20 21:07:01 | 显示全部楼层
             楼上说的有理有据.
回复

使用道具 举报

发表于 2014-12-20 21:27:44 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2014-12-21 07:43 编辑

游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

点评

好用,哈哈,收下了,谢谢  发表于 2014-12-24 00:34

评分

参与人数 1明经币 +1 收起 理由
love1030312 + 1 很给力! 很不错 有点小小遗憾 数字无记.

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-12-20 21:41:09 | 显示全部楼层
ZZXXQQ 发表于 2014-12-20 21:27
[/post]

感谢zzz版百忙中抽空写程序    zzz版 能不能不要R- F+啊  直接输入数字  这个数字要能记忆   还有zz版现在这个程序中左旋无效果

点评

楼上改了。再试试。  发表于 2014-12-21 07:43
(vl-cmdf "_.ROTATE" ss "" oc rd)===》(vl-cmdf "_.ROTATE" ss "" pc rd)  发表于 2014-12-20 22:28
回复

使用道具 举报

发表于 2014-12-20 22:32:27 | 显示全部楼层
好吧 帮忙帮到底了

  1. (defun c:tt (/ _getreal _getpoint gr ss str)
  2.   (defun _getreal (msg default / ret)
  3.     (setq ret (getreal (strcat msg " <" (rtos default) ">:")))
  4.     (if        (null ret)
  5.       default
  6.       ret
  7.     )
  8.   )
  9.   (defun _getpoint (/ p)
  10.     (while (null (setq p (getpoint "指定旋转基点:"))))
  11.     p
  12.   )
  13.   (setvar 'cmdecho 0)
  14.   (if (null *grmovedis*)
  15.     (setq *grmovedis* 4.0)
  16.   )
  17.   (if (null *grangles*)
  18.     (setq *grangles* 90.0)
  19.   )
  20.   (setq str "\n按W S A D 移动, Q向左旋转, E向右旋转 R设置步长 T设置角度, 空格回车或左\右键退出:")
  21.   (princ (strcat "\n步长 = " (rtos *grmovedis* 2) ""))
  22.   (if (setq ss (ssget))
  23.     (progn (princ str)
  24.            (while (and (/= (car (setq gr (grread t 15 0))) 3)
  25.                        (not (equal gr '(2 32)))
  26.                        (not (equal gr '(2 13)))
  27.                        (not (equal gr '(11 0)))
  28.                        (not (equal gr '(25 0)))
  29.                   )
  30.              (cond ((or (equal gr '(2 119)) (equal gr '(2 87))) ;wW
  31.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) (* pi 0.5) *grmovedis*))
  32.                    )
  33.                    ((or (equal gr '(2 83)) (equal gr '(2 115))) ;Ss
  34.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) (* pi 1.5) *grmovedis*))
  35.                    )
  36.                    ((or (equal gr '(2 65)) (equal gr '(2 97))) ;Aa
  37.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) pi *grmovedis*))
  38.                    )
  39.                    ((or (equal gr '(2 68)) (equal gr '(2 100))) ;Dd
  40.                     (vl-cmdf "_.move" ss "" '(0 0) (polar '(0 0) 0 *grmovedis*))
  41.                    )
  42.                    ((or (equal gr '(2 69)) (equal gr '(2 101))) ;Ee
  43.                     (vl-cmdf "_.rotate" ss "" (_getpoint) (- *grangles*))
  44.                    )
  45.                    ((or (equal gr '(2 81)) (equal gr '(2 113))) ;Qq
  46.                     (vl-cmdf "_.rotate" ss "" (_getpoint) *grangles*)
  47.                    )
  48.                    ((or (equal gr '(2 82)) (equal gr '(2 114))) ;Rr
  49.                     (setq *grmovedis* (_getreal "\n输入每次移动的步长" *grmovedis*))
  50.                     (princ str)
  51.                    )
  52.                    ((or (equal gr '(2 84)) (equal gr '(2 116))) ;Tt
  53.                     (setq *grangles* (abs (_getreal "\n输入每次旋转的角度" *grangles*)))
  54.                     (princ str)
  55.                    )
  56.              )
  57.            )
  58.     )
  59.   )
  60.   (setvar 'cmdecho 1)
  61.   (princ)
  62. )
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 14:30 , Processed in 0.281149 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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