图块、文字批量指定角度,代码优化
本帖最后由 sammy 于 2024-6-20 10:46 编辑对图块和文本一键指定角度,在UCS和WCS下都能用。(灵感来自一位坛友)
但是有个小问题让我觉得很诡异,但又不知道哪里出问题了:在UCS下如果是点选很多个对象,执行完命令可以正常恢复至当前UCS坐标系;但如果是框选了很多对象,执行完旋转后就不能正常恢复,而是留在WCS了。
请各位路过的兄弟姐妹帮我看下代码问题出在哪了。
;;;-----------------------------------
;;;启动命令: ROO
;;; --Credit @Sammy
;;;-----------------------------------
(defun c:ROO (/ *error* X selection doc obj)
(defun *error* (s) (command-s ".UCS" "P") (princ))
(vl-load-com)
(setq selection (ssget '((0 . "INSERT,TEXT"))))
(if selection
(progn
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(command ".UCS" "W")
(setq X (getangle "\n输入需要旋转的角度<归0>:"))
(setq X (if (null x) 0 X))
(progn
(foreach obj (mapcar 'cadr (ssnamex selection))
(setq obj (vlax-ename->vla-object obj))
(if (= :vlax-false (vla-get-Lock (vla-item (vla-get-Layers doc) (vla-get-Layer obj))))
(vla-put-Rotation obj X)
)
)
(command ".UCS" "P")
(princ "\n选定的对象已旋转。")
)
)
)
(princ)
) pzweng 发表于 2024-6-20 11:05
;;;-----------------------------------
;;;启动命令: ROO
;;; --Credit @Sammy
谢谢版主,效果很完美!!
想请教下为什么会出现之前这种情况呢? sammy 发表于 2024-6-20 11:24
谢谢版主,效果很完美!!
想请教下为什么会出现之前这种情况呢?
程序有问题,出错中断了,我只是给你加了个出错处理。 感觉这只是旋转,没指定基点。随便转就行了吧,没必要WCS和UCS之间来回切换吧。 evayleung 发表于 2024-6-20 12:04
感觉这只是旋转,没指定基点。随便转就行了吧,没必要WCS和UCS之间来回切换吧。
因为用了getangle函数获取角度,不切换到WCS的话角度会不正确 看看怎么样 试试看,感谢分享 pzweng 发表于 2024-6-20 11:36
程序有问题,出错中断了,我只是给你加了个出错处理。
那直接getreal,getstring,反正也只是要一个数字而已。我是这样认为的。
页:
[1]