[求助]ZZXXQQ能不能帮忙编个程序?拜托了!!
<p>时间紧迫,ZZXXQQ能不能帮忙编个程序:</p><p>要求能一次框选多个带有属性的块,并把块中的属性高度改为同一高度,颜色改为同一种颜色!?</p><p>我也能写写,可工程较紧,最近经常加班!想自己写,可技术不太熟练,每次写一个LISP都要调试好几次!麻烦你了!</p> <p>只给要求不知属性是什么结构如何写?再说我也总加班呀!</p> 本帖最后由 作者 于 2007-12-9 9:06:32 编辑下面是我自已写的"匹配块属性内容"的一个LISP,可是每次运行只能匹配一个目标的属性!如果ZZXXZQQ您能够帮我修改一下(效果是:选择源属性块后,再一次框选多个带有属性的块,结果可以把块中的属性内容改为同一内容!),那我从您的修改那里一定可以得到启示,相信我自己也可以写出"匹配块属性高度各颜色"的LISP.
下面我的这个LISP,是用来匹配带有标高的属性块!我这个贴子的原先求助是想:修改多个"标高"的属性块的
高度各颜色!
(defun c:at ( / att1 att2 en_data en_data2 enrr1 enrr2 ent1 ent2)
(setq ent1 (nentsel "\n选择源属性块的\"属性\":"))
(setq en_data (entget (setq enrr1 (car ent1))))
(setq att1 (assoc 1 en_data))
(setq ent2 (nentsel "\n选择匹配目标的\"属性\":"))
(setq en_data2 (entget (setq enrr2 (car ent2))))
(setq att2 (assoc 1 en_data2))
(setq en_data2 (subst att1 att2 en_data2))
(entmod en_data2)
(entupd enrr2)
) (defun c:tt ()
(vl-catch-all-apply
'(lambda (/ col h)
(if (and (ssget '((0 . "insert") (66 . 1)))
(setq col (acad_colordlg 1))
(setq h (getdist "\nHeight: "))
)
(vlax-for obj
(vla-get-activeselectionset
(vla-get-activedocument (vlax-get-acad-object))
)
(foreach x (vlax-invoke obj 'getattributes)
(vla-put-color x col)
(vla-put-height x h)
)
)
)
)
)
(princ)
) 本帖最后由 作者 于 2007-12-9 10:54:44 编辑
谢谢ivde!
我修改了一下,加入了旋转角度的功能,例如输入了45,完成后,我再双击属性块,可看到的"旋转"却是58.31007808870452,麻烦ivde解决一下!!(defun c:art ( / col h obj r x)
(vl-catch-all-apply
'(lambda (/ col h)
(if (and (ssget '((0 . "insert") (66 . 1)))
(setq col (acad_colordlg 1))
; (setq col (getdist "\ncolor: "))
(setq h (getdist "\nHeight: "))
(setq r (getdist "\Rotation: "))
)
(vlax-for obj
(vla-get-activeselectionset
(vla-get-activedocument (vlax-get-acad-object))
)
(foreach x (vlax-invoke obj 'getattributes)
(vla-put-color x col)
(vla-put-height x h)
(vla-put-Rotation x r)
)
)
)
)
)
(princ)
)
(defun c:at ()
(if (and (setq ent1 (entsel "\n选择源属性块的\"属性\":"))
(setq en_data (entget (car ent1)))
(= (cdr (assoc 66 en_data)) 1)
) (progn
(setq en_data (entget(entnext(cdr(assoc -1 en_data)))))
(setq txth (assoc 40 en_data))
(setq col (if (assoc 62 en_data) (assoc 62 en_data) '(62 . 256)))
(setq att1 (assoc 1 en_data))
(if (and (princ "\n选择匹配目标的\"属性\":")
(setq ss (ssget '((0 . "INSERT") (66 . 1))))) (progn
(setq i -1)
(repeat (sslength ss)
(setq ent2 (entget(entnext(cdr(assoc -1 (entget(setq enrr2 (ssname ss (setq i (1+ i))))))))))
;; (setq ent2 (subst att1 (assoc 1 ent2) ent2))
(setq ent2 (subst txth (assoc 40 ent2) ent2))
(if (assoc 62 ent2)
(setq ent2 (subst col (assoc 62 ent2) ent2))
(setq ent2 (append ent2 (list col)))
)
(entmod ent2)
(entupd enrr2)
)
))
))
(princ)
)
<strong><font face="Verdana" color="#da2549">谢谢ZZXXQQ,也<font color="#61b713">谢谢ivde!让我见识到vla函数威力,短短的几行就把问题给解决了!</font></font></strong> <strong><font face="Verdana" color="#da2549">谢谢</font></strong><p></p> 不错 <p><strong><font face="Verdana" color="#da2549">ZZXXQQ</font></strong></p><p><strong><font face="Verdana" color="#da2549">高高手来的</font></strong></p>
页:
[1]
2