highflybird 发表于 2022-7-5 23:28:57

修改动态块XYZ比例

修改X、Y和Z比例因子。
 
有一个动态块,可以通过“属性”对话框修改XYZ比例因子!

但我使用lisp修改xyz比例因子,存在一个问题。

 
谢谢你的帮助!心存感激

xyscl。lsp

Tharwat 发表于 2022-7-5 23:42:52

因此,文本是一个动态块,您希望通过将其缩放到X=2.0、Y=2.0和Z=1.0来重新定位它?

highflybird 发表于 2022-7-5 23:51:04

 
是的,使用lisp,文本比例不变。
图纸1.dwg

Tharwat 发表于 2022-7-5 23:55:45

我无法在您的属性块上尝试代码,因为名称是用未知语言写入我的系统的,所以无论如何,请尝试并告诉我。
 
(defun c:Test (/ u x y z s sn i e l v ls ent o nx)
;;    Tharwat 02. March. 2014    ;;
(setq u (entlast))
(if (and (setq x (getdist "\n Specify New scale factor for < X > :"))
          (setq y (getdist "\n Specify New scale factor for < Y > :"))
          (setq z (getdist "\n Specify New scale factor for < Z > :"))
          (progn (princ "\n Select Attributed Blocks to rescale ")
               (setq s (ssget "_:L" '((0 . "INSERT") (66 . 1))))
          )
   )
   (repeat (setq i (sslength s))
   (setq e (entget (setq sn (ssname s (setq i (1- i)))))
         v nil
         l (cdr (assoc 8 e))
         v (mapcar '(lambda (a) (cons (vla-get-tagstring a) (vla-get-textstring a)))
                     (vlax-invoke (setq o (vlax-ename->vla-object sn)) 'getattributes)
             )
   )
   (command "_.-insert" (vla-get-effectivename o) "_none" (cdr (assoc 10 e)) "xyz" x y z "0")
   (if (not (eq u (setq ls (entlast))))
       (progn (entmod (subst (cons 8 l) (assoc 8 (entget ls)) (entget ls)))
            (setq nx ls)
            (while (and (setq nx (entnext nx)) (/= (cdr (assoc 0 (entget nx))) "SEQEND"))
                (if (eq (cdr (assoc 0 (setq ent (entget nx)))) "ATTRIB")
                  (foreach j v
                  (if (eq (car j) (cdr (assoc 2 ent)))
                      (entmod (subst (cons 1 (cdr j)) (assoc 1 ent) ent))
                  )
                  )
                )
            )
            (entdel sn)
       )
   )
   )
)
(princ)
)
(vl-load-com)


highflybird 发表于 2022-7-6 00:01:39

 
Tharwat,非常感谢!很好!但不支持正常块。

Tharwat 发表于 2022-7-6 00:09:36

 
不客气。
 
 
使用普通块要容易得多。。。
 

(defun c:Test (/ u x y z s sn i e l ls ent nx)
;;    Tharwat 02. March. 2014    ;;
(setq u (entlast))
(if (and (setq x (getdist "\n Specify New scale factor for < X > :"))
          (setq y (getdist "\n Specify New scale factor for < Y > :"))
          (setq z (getdist "\n Specify New scale factor for < Z > :"))
          (progn (princ "\n Select Blocks to rescale ")
               (setq s (ssget "_:L" '((0 . "INSERT"))))
          )
   )
   (repeat (setq i (sslength s))
   (setq e (entget (setq sn (ssname s (setq i (1- i)))))
         l (cdr (assoc 8 e))
   )
   (command "_.-insert"
            (vla-get-effectivename (vlax-ename->vla-object sn))
            "_none"
            (cdr (assoc 10 e))
            "xyz"
            x
            y
            z
            "0"
   )
   (if (/= u (setq ls (entlast)))
       (progn
         (entmod (subst (cons 8 l) (assoc 8 (entget ls)) (entget ls))
         )
         (entdel sn)
       )
   )
   )
)
(princ)
)
(vl-load-com)

highflybird 发表于 2022-7-6 00:16:36

现在,可以支持正常块。但动态块有问题。更改动态块后。缺少动态块的文本
此外,只需输入一次刻度值。不需要输入3次。

Tharwat 发表于 2022-7-6 00:24:49

 
第一个lisp也用于属性块和动力学,第二个lisp用于普通块。

highflybird 发表于 2022-7-6 00:35:18

 
非常感谢。塔尔瓦特。
没有别的办法了。
xyscl。lsp可以更改正常块。
页: [1]
查看完整版本: 修改动态块XYZ比例