明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8234|回复: 23

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

    [复制链接]
发表于 2011-6-14 17:31 | 显示全部楼层 |阅读模式
本帖最后由 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》

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1金钱 +10 收起 理由
露水2 + 10 我看中

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-12-25 23:10 | 显示全部楼层
现在天正T20的墙体已经没有10,11组码的数据,不知何故?
发表于 2011-6-14 19:37 | 显示全部楼层
好贴,支持一下
发表于 2011-6-14 19:39 | 显示全部楼层
支持,顶一下。
发表于 2011-6-14 20:14 | 显示全部楼层
本帖最后由 highflybir 于 2011-6-14 20:17 编辑

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

我第一次编! 这个程序其实就很简单的几步!
花了两天照着论坛那个的LSP教程,才搞出来! 结果还是个崩溃CAD的程序
大家别笑话!
发表于 2011-6-14 21:14 | 显示全部楼层
楼主很厉害,太谦虚了
发表于 2011-6-15 19:00 | 显示全部楼层
阅读权限不够啊!~~可惜!~~
发表于 2011-6-17 15:24 | 显示全部楼层
一个相关的例子:
;;;天正隐藏门窗编号
(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))
发表于 2011-6-17 15:27 | 显示全部楼层
上面**不知道怎么出来的,应是selecti**et,用对象编辑可以,不会死机
发表于 2011-6-17 15:29 | 显示全部楼层
??。还有**啊,selecti-o-n-s-et
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-24 23:26 , Processed in 0.407818 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表