刷块角度旋转
<p>大家好,那位能不能帮给写一个刷块角度的LSP,例如A块为30度,像格式刷一样,点一下A块,再点B块或C 块,或D块,或者框选其它块,然后这些块就也跟着A块角度一样旋转为30度,</p><p>就是把A块的角度刷给其它块,其它块也旋转,以前在明经网上看到一则这样的代码,但已经找不到了,那位大哥给写一下</p> 本帖最后由 crazylsp 于 2011-4-21 09:53 编辑 <br /><br /><P>我有个土方法,就是在调好的块底部先捕捉一点,</P> <p>这样不太方便吧,更何况你点击的旋转的角度很多情况下都不如意的,</p> 本帖最后由 作者 于 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 "选择的不是块参照")
)
)
<p>图块角度刷使用示例</p><p> </p> <p>感谢4楼高人,此恩不容谢,定当厚报,</p> 4楼楼主能不能改进一下,现在只能单选,要是能进行框先就好了 本帖最后由 作者 于 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 "选择的不是块参照")
)
)
厉害!谢谢 学习了 感谢8楼楼主,再厚报