本帖最后由 kucha007 于 2024-1-23 10:01 编辑
复制天正对象到不同的UCS下时,转角改变通常需要手动调整。
但对象类型太多了,实操麻烦。干脆写个简单的程序代替这个过程吧。
- ;基于当前UCS修复天正对象的转角(除文字外)
- (defun C:FTA (/ DOC UCSAng SS i obj)
- (if (null vlax-dump-object) (vl-load-com));;将Visual LISP扩展功能加载到AutoLISP
- (setq DOC (vla-get-ActiveDOCument (vlax-get-acad-object)))
- (defun *error* (x) ;出错函数
- (vla-endundomark Doc) ;结束编组
- )
-
- (while (eq 8 (logand 8 (getvar 'undoctl)))
- (vla-endundomark DOC)
- );关闭以前的编组
- (vla-startundomark Doc) ;记录编组
- (setq UCSAng (atan (cadr (getvar 'ucsxdir)) (car (getvar 'ucsxdir))));UCS相对于世界坐标的夹角
- (if (<= UCSAng 0.0)(setq UCSAng (+ (* 2 pi) UCSAng)));负值修复
- (while
- (and
- (princ "\n——★★★ 请选择天正对象 ★★★——\n")
- (setq SS (ssget '((0 . "TCH_*"))))
- )
- (repeat (setq i (sslength SS))
- (setq obj (Vlax-Ename->Vla-Object (ssname SS (setq i (1- i)))))
- (if
- (and
- (vlax-property-available-p obj "LayoutRotation") ;存在转角属性
- (not (wcmatch (Vlax-Get obj 'ObjectName) "TDb*Text"));不是天正文字
- )
- (vlax-Put obj 'LayoutRotation (* 180 (/ UCSAng pi)))
- )
- )
- )
- (vla-endundomark Doc) ;结束编组
- (princ)
- )
|