wowan1314 发表于 2011-6-14 17:31:40

【源码分享】编程处女作-留念!功能:天正门窗居中(批量改图元均可参考)

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

azbd 发表于 2018-12-25 23:10:49

现在天正T20的墙体已经没有10,11组码的数据,不知何故?

display18 发表于 2011-6-14 19:37:15

好贴,支持一下

zhynt 发表于 2011-6-14 19:39:12

支持,顶一下。

highflybir 发表于 2011-6-14 20:14:58

本帖最后由 highflybir 于 2011-6-14 20:17 编辑

只是告诉楼主,崩溃并不是你LISP程序有问题,而是天正提供的接口有问题。
关于这个崩溃的问题,我曾经问过开发天正的自定义实体的软件的 (金剑--网名)
他亲口告诉我,以前这个地方开发的时候欠考虑。后来他离开天正公司了,到了斯维尔。
但天正公司对这个bug一直视而不见。
所以如果你用斯维尔的话,基本不会有问题,但天正基本有问题。
顺便学习一下楼主的程序。

wowan1314 发表于 2011-6-14 20:35:33

本帖最后由 wowan1314 于 2011-6-14 20:37 编辑

我第一次编! 这个程序其实就很简单的几步!
花了两天照着论坛那个的LSP教程,才搞出来! 结果还是个崩溃CAD的程序
大家别笑话!

仲文玉 发表于 2011-6-14 21:14:15

楼主很厉害,太谦虚了

daidong013 发表于 2011-6-15 19:00:01

阅读权限不够啊!~~可惜!~~

xiguao 发表于 2011-6-17 15:24:43

一个相关的例子:
;;;天正隐藏门窗编号
(defun c:mtt(/ door)
(princ "选择天正门窗:")
(ssget '((0 . "TCH_OPENING")))
(vlax-for door (vla-get-activeselecti**et (vla-get-activedocument (vlax-get-acad-object)))
    (vlax-put-property door 'hidelabel "是"))
(princ))

xiguao 发表于 2011-6-17 15:27:57

上面**不知道怎么出来的,应是selecti**et,用对象编辑可以,不会死机

xiguao 发表于 2011-6-17 15:29:02

??。还有**啊,selecti-o-n-s-et
页: [1] 2 3
查看完整版本: 【源码分享】编程处女作-留念!功能:天正门窗居中(批量改图元均可参考)