明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 632|回复: 1

[经验] 动态旋转(笔记)

[复制链接]
发表于 2025-2-22 23:25:19 | 显示全部楼层 |阅读模式

动态旋转
  1. (defun $tu-yuan-xuan-zhuan-dyn$  (ents    PT0     ro-start-pt
  2.          ro-div    lst     /      $ro$
  3.          gr    gr-p     pt-old   ro-old
  4.          ro-to    xunhuan
  5.         )
  6.           ;ents 需要旋转的图元列表
  7.           T0 旋转基点
  8.           ;ro-start-pt 是否需要指定旋转起点
  9.           ;ro-div 角度等分,360度等分为多少个角度
  10.           ;($tu-yuan-xuan-zhuan-dyn$(SSGET)(getpoint "请指定旋转基点")t 12 nil)
  11.   (defun $ro$ (e PT0 ro)
  12.     (and e
  13.    PT0
  14.    ro
  15.    (/= ro 0)
  16.    (progn
  17.      (vla-rotate
  18.        (vlax-ename->vla-object e)
  19.        (vlax-3D-point PT0)
  20.        ro
  21.      )
  22.    )
  23.     )
  24.   )
  25.   (if (and ents (= (type ents) 'pickset))
  26.     (setq ents (vl-remove-if
  27.      (function listp)
  28.      (mapcar (function cadr) (ssnamex ents))
  29.          )
  30.     )
  31.   )
  32.   (setq ents (vl-remove nil ents))
  33.   (SETQ PT-OLD NIL)
  34.   (or ro-div (setq ro-div 36))
  35.   (and
  36.     ents
  37.     (progn
  38.       (setq ro-old nil)
  39.       (IF ro-start-pt
  40.   (setq PT-OLD (getpoint "旋转起点"))
  41.   (setq PT-OLD (cadr (vl-catch-all-apply 'grread (list nil 5 0))))
  42.       )
  43.       (setq xunhuan t)
  44.       (while (and xunhuan PT0)
  45.   (setq gr (vl-catch-all-apply 'grread (list nil 5 0)))
  46.   (REDRAW)
  47.   (and (vl-catch-all-error-p gr)
  48.        (progn (setq gr nil) (setq xunhuan nil) t)
  49.   )
  50.   (and
  51.     gr
  52.     (progn
  53.       (cond
  54.         ((= (car gr) 5)
  55.          (setq gr-p (cadr gr))
  56.          (and
  57.      PT-OLD
  58.      (progn
  59.        (if (= (getvar 'ORTHOMODE) 1)
  60.          (progn
  61.            (setq gr-p
  62.             (vl-catch-all-apply
  63.         (function
  64.           (lambda ()
  65.             (zuo-biao-ci-xi pt0 gr-p ro-div)
  66.           )
  67.         )
  68.             )
  69.            )
  70.            (if (vl-catch-all-error-p gr-p)
  71.        (progn (setvar 'ORTHOMODE 0) (setq gr-p nil))
  72.            )
  73.          )
  74.        )
  75.        (if gr-p
  76.          (progn
  77.            (grdraw PT0 gr-p 3)
  78.            (setq ro-to
  79.             (- (angle PT0 gr-p) (angle PT0 PT-OLD))
  80.            )
  81.            (mapcar (function (lambda (e) ($ro$ e PT0 ro-to)))
  82.              ents
  83.            )
  84.          )
  85.        )
  86.      )
  87.          )
  88.          (SETQ PT-OLD gr-p)
  89.         )
  90.         ((= (car gr) 3)
  91.          (setq xunhuan nil)
  92.         )
  93.         ((and (= (car gr) 2) (= (cadr gr) 15))
  94.          (setvar 'ORTHOMODE (abs (- (getvar 'ORTHOMODE) 1)))
  95.           ;翻转
  96.         )
  97.       )
  98.     )
  99.   )
  100.       )
  101.     )
  102.   )
  103.   ents
  104. )



"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-2-23 07:09:21 | 显示全部楼层
与rotate命令有啥区别?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-12 09:19 , Processed in 0.164430 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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