justindm 发表于 2022-7-6 08:25:54

围绕多个块旋转

是否有人拥有或知道任何lisp例程,允许我将所有选定的块围绕其各自的中心/原点旋转180度(或任何用户定义的方向)?
 
我的街区是有方向的(标志、路灯等)所以每个人都必须面对不同的方向。现在他们都面临着相反的方向,他们需要。。。
匹配属性等。。。这行不通。

Lee Mac 发表于 2022-7-6 08:29:34

(defun c:test ( / ss ang ) (vl-load-com)

(if (and (setq ss(ssget "_:L" '((0 . "INSERT"))))
          (setq ang (getangle "\nSpecify Rotation Angle: "))
   )
   (
   (lambda ( i / e o )
       (while (setq e (ssname ss (setq i (1+ i))))
         (vla-put-rotation (setq o (vlax-ename->vla-object e))
         (+ (vla-get-rotation o) ang)
         )
       )
   )
   -1
   )
)

(princ)
)

justindm 发表于 2022-7-6 08:34:10

确切地谢谢李!!

Lee Mac 发表于 2022-7-6 08:36:10

不客气

justindm 发表于 2022-7-6 08:41:18

有没有办法添加一些东西,允许我按名称选择块?我的一些层有多个块。有些需要旋转,有些不需要。。。

Lee Mac 发表于 2022-7-6 08:44:07

添加
 
(2 . "YourBlockNameHere")
 
(0)“插入”旁边

pBe 发表于 2022-7-6 08:47:17

李·麦克,
我注意到你使用
(setq ang (getangle "\nSpecify Rotation Angle: "))

 
也可用于在屏幕上选择2个点。它适用于数字输入,唯一的问题是,如果用户偶然想要在屏幕上选择两个角度点,那么电流ucs可能是最终结果的一个因素。有办法吗?

Lee Mac 发表于 2022-7-6 08:48:46

 
好的一点,我想你可以使用:
 

(defun c:test ( / ss ang ) (vl-load-com)

(if (and (setq ss(ssget "_:L" '((0 . "INSERT"))))
          (setq ang (getangle "\nSpecify Rotation Angle: "))
          (setq ang (+ ang (angle '(0. 0. 0.) (trans (getvar 'UCSXDIR) 0 (trans '(0. 0. 1.) 1 0 t) t))))
   )
   (
   (lambda ( i / e o )
       (while (setq e (ssname ss (setq i (1+ i))))
         (vla-put-rotation (setq o (vlax-ename->vla-object e))
         (+ (vla-get-rotation o) ang)
         )
       )
   )
   -1
   )
)

(princ)
)

 
这将忽略UCS,只使用WCS中的两点。

pBe 发表于 2022-7-6 08:51:33

 
我也是这么想的。但你的要好得多。
我们正在为你挑选大脑李麦克。。。一种奇妙的学习方式
非常感谢你

Lee Mac 发表于 2022-7-6 08:55:35

不客气pBe
页: [1] 2
查看完整版本: 围绕多个块旋转