本帖最后由 wowan1314 于 2013-6-12 20:18 编辑
;;;--------------------------功能:天正门窗居中(必然搞死CAD版)----------------------------- ;;;实现门窗居中的自动批处理。缺点:CAD必然崩溃。 ;;;可能entmod函数修改块定义中的图元,但这样做可能会生成引用自身的块,导致 AutoCAD系统崩溃。 ;;;怎么解决?!改为ENTMAKE居然也会崩溃(不明白),不过好了点。其他批量修改图元资料的程序均可套用此格式。如:文字内容(或其他资料)刷,所有图元原地缩放等等。行行有说明,方便不会编程的朋友借鉴。 (defun C:ZZ2 (/ SS YY_TEMP YY_WZIL YY_CHUANZ YY_WZDX YY_WZDY YY_NEWXYZ YY_NEWCZIL N K NN) (princ "选择要居中门窗,可选N个,命令前后一定要保存,肯定死机") (setq SS (ssget '((0 . "TCH_OPENING"))));建立特定图元选集 (setq n (sslength ss) nn -1 K 1);批量修改循环参数设置,WHILE开始循环 (WHILE (>= N K) (setq nN (+ NN 1) YY_TEMP (ENTGET (SSNAME SS NN));得到门窗的资料 YY_WZIL (ENTGET (CDR (assoc 330 (CDR (CDR (CDR YY_TEMP))))));得到墙的资料 YY_CHUANZ (CADDR (CDR (assoc 10 YY_TEMP)));得到窗户的插入点Z坐标 YY_WZDX (/ (+ (CAR (CDR (assoc 10 YY_WZIL))) (CAR (CDR (assoc 11 YY_WZIL)))) 2);得到墙的中心点X坐标 YY_WZDY (/ (+ (CADR (CDR (assoc 10 YY_WZIL))) (CADR (CDR (assoc 11 YY_WZIL)))) 2);得到墙的中心点Y坐标 YY_NEWXYZ (CONS '10 (LIST YY_WZDX YY_WZDY YY_CHUANZ));得到窗户居中插入的插入点坐标并形成资料格式 YY_NEWCZIL (SUBST YY_NEWXYZ (assoc 10 YY_TEMP) YY_TEMP));将新的坐标资料替换旧的坐标资料 (ENTMAKE YY_NEWCZIL);按新资料重建图元,如不是块图元,则entmod修改资料就可以。 (setq k (+ k 1)) );结束WHILE (command "_.erase" SS "");删除旧图元 (prompt (strcat "处理了 " (RTOS (sslength ss)) " 个门窗!!注意保存!!!")) (princ) ) 本人是初学者,水平有限。不足处请谅解。 参考资料:《lisp 教程修正.chm》 ;《LSP函数集.chm》
|