求帮忙合并一下程序
本帖最后由 ljfzx 于 2017-10-17 21:36 编辑;;;旋转视图 by ucuc2003
(defun C:XZST (/ ro_ang)
(setvar "cmdecho" 0)
(princ "旋转模型空间的视图")
(if (equal (getvar "TILEMODE") 1)
(progn
;;记忆参数old_ro_ucs_z_ang (这个值在本LSP文件内必须唯一,不能有重名的)
(if (= old_ro_ucs_z_ang nil) (setq old_ro_ucs_z_ang (/ pi 2)))
(princ (strcat "\n指定视口绕 Z 轴的旋转角度<" (angtos old_ro_ucs_z_ang 0 6) ">: "))
(setq ro_ang (getangle))
(if ro_ang (setq old_ro_ucs_z_ang ro_ang)(setq ro_ang old_ro_ucs_z_ang))
(command "_.undo" "_group")
(command "_.ucs" "_Z" (angtos ro_ang 0 8))
(command "_.Plan" "")
(command "_.undo" "_end")
)
(princ "\n*请切换到模型空间*")
)
(princ)
)
;;;旋转视图end
;;;恢复视图 by ucuc2003
(defun C:HFST (/ ro_ang)
(setvar "cmdecho" 0)
(princ "恢复视图")
(vl-load-com)
(setqacadobject (vlax-get-acad-object)
acaddocument (vla-get-activedocument acadobject))
(if (equal (getvar "TILEMODE") 1)
(progn
(command "_.undo" "_group")
(command "_.Plan" "w" "_.ucs" "w")
(command "_.undo" "_end")
)
(if (= (vla-get-mspace acaddocument) :vlax-false)
(command "mspace" "_.Plan" "w" "_.ucs" "w")
(command "_.Plan" "w" "_.ucs" "w")
)
)
(princ)
)
;;;恢复视图end
要求输入命令后,输入角度或者点击两个点执行第一个旋转视图的程序,什么都不输入直接按空格或者回车执行第二个恢复视图的程序
或者,在输入命令后,点击左键执行第一个程序,点击右键执行第二个程序
本帖最后由 xinxirong 于 2017-10-17 19:26 编辑
;;;第一个旋转视图 by ucuc2003
(defun XZST (ro_ang / )
(setvar "cmdecho" 0)
(princ "旋转模型空间的视图")
(if (equal (getvar "TILEMODE") 1)
(progn
(command "_.undo" "_group")
(command "_.ucs" "_Z" (angtos ro_ang 0 8))
(command "_.Plan" "")
(command "_.undo" "_end")
)
(princ "\n*请切换到模型空间*")
)
(princ)
)
;;;旋转视图end
;;;第二恢复视图 保存全局变量old_ro_ucs_z_ang
(defun C:ST (/ ro_ang)
;;记忆参数old_ro_ucs_z_ang (这个值在本LSP文件内必须唯一,不能有重名的)
(if (= old_ro_ucs_z_ang nil) (setq old_ro_ucs_z_ang (/ pi 2)))
(if ro_ang (setq old_ro_ucs_z_ang ro_ang)(setq ro_ang old_ro_ucs_z_ang))
(princ (strcat "\n指定视口绕 Z 轴的旋转角度<" (angtos old_ro_ucs_z_ang 0 6) ">(默认为恢复视图): "))
(setq ang (getangle))
(if ang
(XZST ang);什么也不输入,回车/空格
;else
(progn
(setvar "cmdecho" 0)
(princ "恢复视图")
(vl-load-com)
(setqacadobject (vlax-get-acad-object)
acaddocument (vla-get-activedocument acadobject))
(if (equal (getvar "TILEMODE") 1)
(progn
(command "_.undo" "_group")
(command "_.Plan" "w" "_.ucs" "w")
(command "_.undo" "_end")
)
(if (= (vla-get-mspace acaddocument) :vlax-false)
(command "mspace" "_.Plan" "w" "_.ucs" "w")
(command "_.Plan" "w" "_.ucs" "w")
)
)
(princ)
);progn
);if
)
;;;恢复视图end
没有知道的吗? 本帖最后由 ljfzx 于 2017-10-17 21:08 编辑
谢谢回复,我自己根据你的思路修改了一下,加入了记忆缩放位置的功能,现在更好用了,用着别人的代码,我也不好意思私藏,决定共享出来
本帖最后由 ljfzx 于 2017-10-17 21:10 编辑
xinxirong 发表于 2017-10-17 19:24
(defun C:st (/ ro_ang)
(princ (strcat "\n输入角度或指定视口绕 Z 轴的旋转角度(默认为恢复视图): "))
(setq ang (getangle))
(defun xzst (ro_ang / )
(setvar "cmdecho" 0)
(if (equal (getvar "TILEMODE") 1)
(progn
(command "_.undo" "_group")
(setq viewcenter (getvar "VIEWCTR")
viewsize (getvar "VIEWSIZE")
zoom1 (polar viewcenter (* pi 0.5) viewsize)
zoom2 (polar viewcenter (* pi 3.5) viewsize)
zoom1 (trans zoom1 1 0)
zoom2 (trans zoom2 1 0)
)
(command "_.ucs" "_Z" (angtos ro_ang 0 8))
(command "_.Plan" "")
(command "zoom" "w" (trans zoom1 0 1) (trans zoom2 0 1))
(command "_.undo" "_end")
)
(princ "\n*请切换到模型空间*")
)
(princ)
)
(if ang
(xzst ang)
(progn
(setvar "cmdecho" 0)
(if (equal (getvar "TILEMODE") 1)
(progn
(command "_.undo" "_group")
(setq viewcenter (getvar "VIEWCTR")
viewsize (getvar "VIEWSIZE")
zoom1 (polar viewcenter (* pi 0.5) viewsize)
zoom2 (polar viewcenter (* pi 3.5) viewsize)
zoom1 (trans zoom1 1 0)
zoom2 (trans zoom2 1 0)
)
(command "_.Plan" "w" "_.ucs" "w")
(command "zoom" "w" (trans zoom1 0 1) (trans zoom2 0 1))
(command "_.undo" "_end")
)
(princ "\n*请切换到模型空间*")
)
(princ)
))
)
挺好用的,谢谢楼主,但我喜欢逆时针为正,上面的正好是反的,有点别扭,不知别的人啥感觉。。。 回帖是一种美德!感谢楼主的无私分享 谢谢 xinxirong 发表于 2017-10-17 16:18
能不能帮我合并下程序。工作中用得比较多。
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=177757&highlight=%BA%CF%B2%A2 谢谢大师分享
页:
[1]