dcl1214 发表于 2025-2-22 23:25:19

动态旋转(笔记)


动态旋转
(defun $tu-yuan-xuan-zhuan-dyn$(ents    PT0   ro-start-pt
         ro-div    lst   /      $ro$
         gr    gr-p   pt-old   ro-old
         ro-to    xunhuan
      )
          ;ents 需要旋转的图元列表
          ;PT0 旋转基点
          ;ro-start-pt 是否需要指定旋转起点
          ;ro-div 角度等分,360度等分为多少个角度
          ;($tu-yuan-xuan-zhuan-dyn$(SSGET)(getpoint "请指定旋转基点")t 12 nil)
(defun $ro$ (e PT0 ro)
    (and e
   PT0
   ro
   (/= ro 0)
   (progn
   (vla-rotate
       (vlax-ename->vla-object e)
       (vlax-3D-point PT0)
       ro
   )
   )
    )
)
(if (and ents (= (type ents) 'pickset))
    (setq ents (vl-remove-if
   (function listp)
   (mapcar (function cadr) (ssnamex ents))
         )
    )
)
(setq ents (vl-remove nil ents))
(SETQ PT-OLD NIL)
(or ro-div (setq ro-div 36))
(and
    ents
    (progn
      (setq ro-old nil)
      (IF ro-start-pt
(setq PT-OLD (getpoint "旋转起点"))
(setq PT-OLD (cadr (vl-catch-all-apply 'grread (list nil 5 0))))
      )
      (setq xunhuan t)
      (while (and xunhuan PT0)
(setq gr (vl-catch-all-apply 'grread (list nil 5 0)))
(REDRAW)
(and (vl-catch-all-error-p gr)
       (progn (setq gr nil) (setq xunhuan nil) t)
)
(and
    gr
    (progn
      (cond
      ((= (car gr) 5)
         (setq gr-p (cadr gr))
         (and
   PT-OLD
   (progn
       (if (= (getvar 'ORTHOMODE) 1)
         (progn
         (setq gr-p
            (vl-catch-all-apply
      (function
          (lambda ()
            (zuo-biao-ci-xi pt0 gr-p ro-div)
          )
      )
            )
         )
         (if (vl-catch-all-error-p gr-p)
       (progn (setvar 'ORTHOMODE 0) (setq gr-p nil))
         )
         )
       )
       (if gr-p
         (progn
         (grdraw PT0 gr-p 3)
         (setq ro-to
            (- (angle PT0 gr-p) (angle PT0 PT-OLD))
         )
         (mapcar (function (lambda (e) ($ro$ e PT0 ro-to)))
             ents
         )
         )
       )
   )
         )
         (SETQ PT-OLD gr-p)
      )
      ((= (car gr) 3)
         (setq xunhuan nil)
      )
      ((and (= (car gr) 2) (= (cadr gr) 15))
         (setvar 'ORTHOMODE (abs (- (getvar 'ORTHOMODE) 1)))
          ;翻转
      )
      )
    )
)
      )
    )
)
ents
)


xyp1964 发表于 2025-2-23 07:09:21

与rotate命令有啥区别?
页: [1]
查看完整版本: 动态旋转(笔记)