自动比例尺preserv
你知道,我一直在使用这个由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_errnil
)
(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)
)
有人自动呼叫“awerning”帮我解决了这个问题。。。
检查以下内容
-----------------
它工作,完美。。。
糟糕的是,我希望它与Attribute块一起使用,现在我意识到它将有点像镜像属性或其他东西。。。因此,它在选定的块中保留负值,但有点像镜像文本,使其无法读取(除非我们可以从右向左读取)
我试图缩放和保留的这些块是动态的,所以我想我会使用动态选项来移动文本,而不是镜像,这会导致需要保留负值。。。但我想这比把值改成正数要好,。。。
-----------------
哦,我知道了。。。
通过向每个动态块属性和掩码添加翻转动作,我可以避免使用属性。。。现在我没有理由镜像我的任何块,可以将所有块都保持在正的x,y,z值。
我开始喜欢动态积木。
Bu-。lsp
页:
[1]