明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4206|回复: 23

[基础] 第一次编程序,程序可以用,但次次都把CAD搞死机!! 求解释

  [复制链接]
发表于 2011-6-13 21:24:42 | 显示全部楼层 |阅读模式
本帖最后由 wowan1314 于 2011-6-13 22:29 编辑

第一次编程序,程序可以用,但次次都把CAD搞死机!! 求解释


;;;--------------------------功能:天正门窗居中(单选)--------------------------------
;;;可能entmod函数修改块定义中的图元,但这样做可能会生成引用自身的块,导致AutoCAD系统崩溃。
;;;改为单,entmake 处理,还是崩溃。
(defun C:E1 (/ SS YY_TEMP YY_WZIL YY_CHUANZ YY_WZDX YY_WZDY YY_NEWXYZ YY_NEWCZIL)
    (princ "选择要居中门窗,只改一个,命令前后注意保存,连续处理几个会崩溃")
    (setq SS (ENTSEL))
    (setq YY_TEMP (ENTGET (CAR SS)));得到所选的资料
(IF (= "TCH_OPENING" (CDR (ASSOC 0 YY_TEMP)))
   (PROGN
    (setq YY_WZIL (ENTGET (CDR (assoc 330 (CDR (CDR (CDR YY_TEMP))))));得到墙的资料
           YY_CHUANZ (CADDR (CDR (assoc 10 YY_TEMP)))
           YY_WZDX (/ (+ (CAR (CDR (assoc 10 YY_WZIL))) (CAR (CDR (assoc 11 YY_WZIL)))) 2)
           YY_WZDY (/ (+ (CADR (CDR (assoc 10 YY_WZIL))) (CADR (CDR (assoc 11 YY_WZIL)))) 2)
          YY_NEWXYZ (CONS '10 (LIST YY_WZDX YY_WZDY YY_CHUANZ));得到窗户居中插入的插入点坐标并形成资料格式
          YY_NEWCZIL (SUBST YY_NEWXYZ (assoc 10 YY_TEMP) YY_TEMP));更新坐标资料
     (command "_.erase" SS "");按删掉旧图元
     (ENTMAKE YY_NEWCZIL);按新资料重建图元
   )
  (princ "你他妈的又把对象类型选错了!!!!")
)
(prinC "程序完毕!!注意保存!!!随时死机!!!")
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-6-13 21:45:03 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-13 21:57 编辑

我用了,没死。
不过还是稍微改了一下。
;;;--------------------------功能:天正门窗居中(单选)--------------------------------
;;;可能entmod函数修改块定义中的图元,但这样做可能会生成引用自身的块,导致AutoCAD系统崩溃。
;;;改为单,entmake 处理,还是崩溃。
  1. (defun C:E1 (/   SS      YY_TEMP  YY_WZIL
  2.       YY_CHUANZ  YY_WZDX     YY_WZDY  YY_NEWXYZ
  3.       YY_NEWCZIL
  4.      )
  5.   (princ
  6.     "选择要居中门窗,只改一个,命令前后注意保存,连续处理几个会崩溃"
  7.   )
  8.   (while (setq SS (ENTSEL))
  9.     (setq YY_TEMP (ENTGET (CAR SS))) ;得到所选的资料
  10.     (IF (= "TCH_OPENING" (CDR (ASSOC 0 YY_TEMP)))
  11.       (PROGN
  12. (setq YY_WZIL  (ENTGET (CDR (assoc 330 (CDR (CDR (CDR YY_TEMP))))))
  13.      ;得到墙的资料
  14.        YY_CHUANZ  (CADDR (CDR (assoc 10 YY_TEMP)))
  15.        YY_WZDX  (/ (+ (CAR (CDR (assoc 10 YY_WZIL)))
  16.           (CAR (CDR (assoc 11 YY_WZIL)))
  17.        )
  18.        2
  19.     )
  20.        YY_WZDY  (/ (+ (CADR (CDR (assoc 10 YY_WZIL)))
  21.           (CADR (CDR (assoc 11 YY_WZIL)))
  22.        )
  23.        2
  24.     )
  25.        YY_NEWXYZ  (CONS '10 (LIST YY_WZDX YY_WZDY YY_CHUANZ))
  26.      ;得到窗户居中插入的插入点坐标并形成资料格式
  27.        YY_NEWCZIL (SUBST YY_NEWXYZ (assoc 10 YY_TEMP) YY_TEMP)
  28. )    ;更新坐标资料
  29. (command "_.erase" SS "") ;按删掉旧图元
  30. (ENTMAKE YY_NEWCZIL)  ;按新资料重建图元
  31.       )
  32.       (princ "对象类型选错了!!!!")
  33.     )
  34.   )
  35.   (prinC "程序完毕!!注意保存!!!随时死机!!!")
  36. )

 楼主| 发表于 2011-6-13 21:50:36 | 显示全部楼层
本帖最后由 wowan1314 于 2011-6-14 17:13 编辑

连续多用几次就死了! 貌似必死!   ,, 再发个框选的 也是必死
;;;--------------------------功能:天正门窗居中-(框选)-------------------------------
;;;实现门窗居中的自动批处理。缺点:CAD必然崩溃。2011.6 YY
;;;可能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 (>= 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);按新资料重建图元
    (setq k (+ k 1))
  );结束WHILE
(command "_.erase" SS "")
(prompt (strcat "处理了 " (RTOS (sslength ss)) " 个门窗!!注意保存!!!"))
(princ)
)

发表于 2011-6-13 21:53:18 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-13 21:54 编辑

还是没死,你是什么版本的天正?我的是8.2版挂在2012上
 楼主| 发表于 2011-6-13 21:56:31 | 显示全部楼层
本帖最后由 wowan1314 于 2011-6-14 21:45 编辑

CAD2006+天正8.2     伤心啊! 单位的电脑都只敢装CAD2004.


发表于 2011-6-13 21:58:49 | 显示全部楼层
我想会不会是版本的问题呢?希望大家都来测试。
 楼主| 发表于 2011-6-13 22:02:04 | 显示全部楼层
本帖最后由 wowan1314 于 2011-6-13 22:44 编辑

肯定会死机! 又测试了下! 不会马上死去! 但终究会死! 我连续用了不到20秒就崩溃了

有时候连续五六个就直接完蛋 了!  疑惑啊!


还好崩溃前有段时间可以保存图纸,重启CAD 。 就当RE了几下! 哈哈。

发表于 2011-6-13 22:43:26 | 显示全部楼层
把你的图发上来看看。
 楼主| 发表于 2011-6-13 22:47:21 | 显示全部楼层
测试文件,

本帖子中包含更多资源

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

x
发表于 2011-6-13 23:13:39 | 显示全部楼层
累死我了。测试的256扇门,未崩溃。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-28 09:24 , Processed in 0.187870 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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