你知道,我一直在使用这个由David制作并由我修改的lisp,这个将所有选定的块(法线、属性、动态和注释性)匹配到当前的dimscale。
这很漂亮,但现在我意识到一些块的x、y、z比例因子值为负值(镜像块),我希望保留这些值,因为通常需要镜像来确定方向,并且有必要在存在时保留负值。
还有其他块缩放例程,但这些例程使用
(命令“scale”eachblockinsertion“insertionpoint”(/newscale currentscale))
当使用这些例程时,它们会一直工作,直到找到负值,然后例程就会遇到这个消息
值必须为正且非零。
; 错误:功能已取消
有没有办法改变每个块的x、y、z值,但保留其原始值符号(正或负)?
有人知道怎么做吗?
- ;;; BXY by David Harrington; Modified by Paulo Gil Soto (added annotation scale reset to 1:1)
- ;;; updates selected blocks x,y and z values to current Dimscale
- ;;;
- ;;; Main Program
- ;;;
- (defun c:Bu (/ ss xs ys zs num x na lst editxyz_error olcmdecho old_err)
- (defun editxyz_error (msg)
- (if (or
- (= msg "Function cancelled")
- (/= msg "quit / exit abort")
- )
- (princ (strcat "Error: " msg))
- )
- (command ".UNDO" "E" "UNDO" "")
- (setq *error* old_err
- old_err nil
- )
- (setvar "CMDECHO" olcmdecho)
- (princ)
- )
- (setq old_err *error*
- olcmdecho (getvar "CMDECHO")
- *error* editxyz_error
- )
- (setvar "CMDECHO" 0)
- (setq dms (getvar "dimscale"))
- (command ".UNDO" "BE") (prompt "\nSelect Blocks to match current dimscale: ")
- (cond
- ((setq ss (ssget '((0 . "INSERT"))))
- (command "-objectscale" ss "" "add" "1:1" "" "cannoscale" "1:1")
- (setq num (sslength ss))
- (setq x 0)
- (repeat num
- (setq na (ssname ss x))
- (setq lst (entget na))
- (setq lst (subst (cons 41 dms) (assoc 41 lst) lst))
- (setq lst (subst (cons 42 dms) (assoc 42 lst) lst))
- (setq lst (subst (cons 43 dms) (assoc 43 lst) lst))
- (entmod lst)
- (entupd na)
- (setq x (+ x 1))
- )
- )
- )
- (command "attsync" "name" "*")
- (command ".UNDO" "E")
- (setq *error* old_err)
- (setvar "CMDECHO" olcmdecho)
- (princ)
- )
|