;;求插入点不就可以了吗??(defun c:tykb (/ en sc ss ins)
(if (and (setq en (entsel "请选择图块: "))
(setq sc (getreal "\n请输入要缩放块的比例: "))
)
(progn
(setq ss (ssget "_x" (list '(0 . "insert") (assoc 2 (entget (car en))))))
(repeat (setq n (sslength ss))
(setq en(ssname ss (setq n (1- n)))
ins (cdr (assoc 10 (entget en)))
)
(command "_.scale" en "" "_non" ins sc)
)
)
)
(princ)
)
<p>感谢楼上的不懈帮助!</p><p>但可能您没有完全理解我程序要完成的任务!</p><p>他的任务就是:一个同名块的选择集,要把个集内的每个块的比例设成我所输入得值!而这个集内的块又有不一致插入比例!</p> (defun c:tykb (/ en sc dat ss 41d 42d 43d)
(if (and (setq en (entsel "请选择图块: "))
(setq sc (getreal "\n请输入要缩放块的比例: "))
)
(progn
(setq dat (entget (car en))
ss(ssget "_x" (list '(0 . "insert") (assoc 2 dat)))
41d (cons 41 sc)
42d (cons 42 sc)
43d (cons 43 sc)
)
(repeat (setq n (sslength ss))
(setq en(ssname ss (setq n (1- n)))
dat (entget en)
dat (subst 43d
(assoc 43 dat)
(subst 42d
(assoc 42 dat)
(subst 41d (assoc 41 dat) dat)
)
)
)
(entmod dat)
)
)
)
(princ)
) <p>再次感谢!</p><p>但以上程序对带有属性文字的块,有点小问题!</p><p>就是属性文字大小不能随着块的比例而改变!不是跟“Scale”命令一样缩放!</p> (defun c:tykb (/ en sc dat ss 41d 42d 43d n th)
(if (and (setq en (entsel "请选择图块: "))
(setq sc (getreal "\n请输入要缩放块的比例: "))
)
(progn
(setq en(car en)
dat (entget en)
ss(ssget "_x" (list '(0 . "insert") (assoc 2 dat)))
)
(repeat (setq n (sslength ss))
(setq en(ssname ss (setq n (1- n)))
dat (entget en)
41d (assoc 41 dat)
42d (assoc 42 dat)
43d (assoc 43 dat)
att (assoc 66 dat)
dat (subst (cons 41 (* sc (cdr 41d)))
41d
(subst (cons 42 (* sc (cdr 41d)))
42d
(subst (cons 42 (* sc (cdr 41d)))
43d
dat
)
)
)
)
(entmod dat)
(if (equal att '(66 . 1))
(while
(equal (assoc 0 (setq dat (entget (setq en (entnext en)))))
'(0 . "ATTRIB")
)
(setq th(assoc 40 dat)
dat (subst (cons 40 (* (cdr th) sc)) th dat)
)
(entmod dat)
)
)
)
)
)
(princ)
) 楼上的思路还是有问题,就是属性的缩放与块插入点有关系,现在忙,有空帮你调试! 为什么不用vla方法?这样就不用管什么属性了,,,,, caoyin发表于2008-5-23 12:53:00static/image/common/back.gif楼上的思路还是有问题,就是属性的缩放与块插入点有关系,现在忙,有空帮你调试!
<p>是我表达的有问题!</p><p>我是希望块的属性文字大小随着块的比例而同步改变!跟“Scale”命令一样缩放!</p><p>但按你14楼的程序运行后就出现上图的情形!</p><p>另:楼上的朋友能给出 用什么 vla函数实现吗?</p>
;;自己完善下吧
;;自己完善下吧(defun c:tt ()
(SETQ SC (GETREAL "\N 比例:"))
(while (setq ss (ssget ":s" '((0 . "INSERT"))))
(command ".scale"
ss "" "non"
(cdr (assoc 10 (entget (ssname ss 0))))
sc
)
)
)