357785513 发表于 2009-12-16 12:50:00

刷块角度旋转

<p>大家好,那位能不能帮给写一个刷块角度的LSP,例如A块为30度,像格式刷一样,点一下A块,再点B块或C 块,或D块,或者框选其它块,然后这些块就也跟着A块角度一样旋转为30度,</p><p>就是把A块的角度刷给其它块,其它块也旋转,以前在明经网上看到一则这样的代码,但已经找不到了,那位大哥给写一下</p>

crazylsp 发表于 2009-12-16 16:25:00

本帖最后由 crazylsp 于 2011-4-21 09:53 编辑 <br /><br /><P>我有个土方法,就是在调好的块底部先捕捉一点,</P>

357785513 发表于 2009-12-17 07:10:00

<p>这样不太方便吧,更何况你点击的旋转的角度很多情况下都不如意的,</p>

xianaihua 发表于 2009-12-17 22:42:00

本帖最后由 作者 于 2009-12-17 23:13:09 编辑

用vlisp编了一个


;;; By lihuaili
;;; Copyright (C) 2009 lihuaili, All Rights Reserved
;;; E-mail: lihl671@126.com
;;; QQ: 1102834080
(vl-load-com)

;;;获得块参照的角度
(defun Get_BlkRefObj_Ang (blkObj)
(if (= (vla-get-ObjectName blkObj) "AcDbBlockReference")
    (vla-get-Rotation blkObj)
)
)
;;;设置块参照的角度
(defun Set_BlkRefObj_Ang (blkObj rang)
(if (= (vla-get-ObjectName blkObj) "AcDbBlockReference")
    (vla-put-Rotation blkObj rang)
)
(vla-Update blkObj)
)
(defun c:BlkRef_ang_Match (/ loop ent1 ent2 obj1 obj2 rang)
(setq loop T)
(if (setq ent1 (car (entsel "选择一个源块: ")))
    (progn
      (setq obj1 (vlax-ename->vla-object ent1)
   rang (Get_BlkRefObj_Ang obj1)
      )
      (while loop
(if (and rang
   (setq ent2
   (car (entsel "选择一个目标块(按右键或回车结束选择): ")
   )
   )
   )
   (progn (setq obj2 (vlax-ename->vla-object ent2))
   (Set_BlkRefObj_Ang obj2 rang)
   )
   (setq loop nil)
)
      )
    )
    (alert "选择的不是块参照")
)
)

xianaihua 发表于 2009-12-17 23:03:00

<p>图块角度刷使用示例</p><p>&nbsp;</p>

357785513 发表于 2009-12-18 12:57:00

<p>感谢4楼高人,此恩不容谢,定当厚报,</p>

357785513 发表于 2009-12-18 22:17:00

4楼楼主能不能改进一下,现在只能单选,要是能进行框先就好了

xianaihua 发表于 2009-12-19 00:03:00

本帖最后由 作者 于 2009-12-19 13:22:28 编辑

一次框选程序
;;; By lihuaili
;;; Copyright (C) 2009 lihuaili, All Rights Reserved
;;; E-mail: lihl671@126.com
;;; QQ: 1102834080
(vl-load-com)
;;;获得块参照的角度
(defun Get_BlkRefObj_Ang (blkObj)
(if (= (vla-get-ObjectName blkObj) "AcDbBlockReference")
    (vla-get-Rotation blkObj)
)
)
;;;设置块参照的角度
(defun Set_BlkRefObj_Ang (blkObj rang)
(if (= (vla-get-ObjectName blkObj) "AcDbBlockReference")
    (vla-put-Rotation blkObj rang)
)
(vla-Update blkObj)
)
(defun c:BlkRef_ang_Match (/ent1 ent2 obj1 obj2 rang ss Cnt)
(if (setq ent1 (car (entsel "选择一个源块: ")))
    (progn
      (setq obj1 (vlax-ename->vla-object ent1)
   rang (Get_BlkRefObj_Ang obj1)
      )
      (princ)
      (princ "选择一个或多个目标块: ")
      (if (setq SS (ssget '((0 . "INSERT"))))
(progn
   (setq Cnt 0)
   (repeat (sslength SS)
   (setq ent2 (ssname SS Cnt))
   (setq obj2 (vlax-ename->vla-object ent2))
   (Set_BlkRefObj_Ang obj2 rang)
   (setq Cnt (1+ Cnt))
   )
)
      )
    )
    (alert "选择的不是块参照")
)
)

xiewawa 发表于 2009-12-21 11:18:00

厉害!谢谢   学习了

357785513 发表于 2009-12-23 12:34:00

感谢8楼楼主,再厚报
页: [1] 2 3
查看完整版本: 刷块角度旋转