找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1319|回复: 5

[求助] [求助] 请各位高手帮忙程序看看哪出错了

[复制链接]
发表于 2007-7-29 22:07:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
[求助] 请各位高手帮忙程序看看哪出错了
请教以下两个反应器问题

01.我试着取得复制后产生的物件,再将其加入成为反应器,
但却都没法完成,请问程序中哪里出错呢?
02.删除后若执行 UNDO 命令,所恢复的物件是否变成临时性反应器?

希望各位高手可以解答一下.
谢谢!

[PHP]
(VL-LOAD-COM)
(SETQ ACADOBJECT   (VLAX-GET-ACAD-OBJECT))
(SETQ ACADDOCUMENT (vla-GET-ACTIVEDOCUMENT ACADOBJECT))
(SETQ MSPACE       (vla-GET-MODELSPACE ACADDOCUMENT))

; 复制反应程序
(DEFUN AR_AE_RR_COPIED
(NOTIFIER-OBJECT REACTOR-OBJECT PARAMETER-LIST /
  AR_AE_RR_COPIED AR_AE_RR_MODIFIED BRK_VLA-NR-OBJ
  BRK-vla-RR-OBJ DXF05_LAS-OBJ DXF05_NN-OBJ DXF05_NR-OBJ
  DXF05_RR-OBJ EN-AREA EN-AREA-M I LST NN NR-OBJ PTDT RE
  RR-OBJ vla-NR-OBJ VLA-RR-OBJ)
(PRINT "AR_AE_RR_COPIED,复制反应程序")
(IF (VLAX-READ-ENABLED-P NOTIFIER-OBJECT) ;;确定物件对象是否可读
(PROGN
(SETQ NR-OBJ (ENTLAST)) ;取出最后物件
(IF (= (AR_DXF 0 NR-OBJ) "LWPOLYLINE")
(PROGN
(SETQ vla-NR-OBJ (VLAX-ENAME->vla-OBJECT NR-OBJ)) ;转换为VLA
(SETQ PTDT (VLAX-CURVE-GETPOINTATPARAM NR-OBJ 0)) ;PL起点
(SETQ DXF05_NR-OBJ (vla-GET-HANDLE VLA-NR-OBJ)) ;图元处理码
(SETQ BRK_VLA-NR-OBJ (LIST vla-NR-OBJ)) ;串列VLA

; 建立复制物件后的反应器
(SETQ LST (CDR (CAR (VLR-REACTORS :VLR-Object-Reactor)))) ;取出反应器列表
(SETQ I 0)
(SETQ RE T)
(SETQ DXF05_LAS-OBJ (vla-GET-HANDLE (CAR (VLR-OWNERS (LAST LST))))) ;最后一笔资料
  
(WHILE RE
(SETQ NN (VLR-OWNERS (NTH I LST)))
(SETQ DXF05_NN-OBJ (vla-GET-HANDLE (CAR NN)))

(COND
((= DXF05_NR-OBJ DXF05_NN-OBJ)
(PRINT "相同资料 ") (PRINC (ITOA I))
(SETQ I (1+ I))
(SETQ RE T)
)

((AND (= DXF05_LAS-OBJ DXF05_NN-OBJ)
       (= DXF05_NR-OBJ DXF05_NN-OBJ)
       )
(PRINT "最后一笔资料 ") (PRINC (ITOA I))
(SETQ RE NIL)
)

((/= DXF05_NR-OBJ DXF05_NN-OBJ)
(SETQ EN-AREA (vla-GET-AREA VLA-NR-OBJ)) ;取出面积
(SETQ EN-AREA-M (STRCAT (RTOS (/ EN-AREA 10000) 2 2) "㎡")) ;面积单位
(VL-CMDF "TEXT" PTDT 30 0 EN-AREA-M ) ;输出面积数值成文字
(SETQ RR-OBJ (ENTLAST))
(SETQ vla-RR-OBJ (VLAX-ENAME->vla-OBJECT RR-OBJ)) ;转换为VLA
(SETQ DXF05_RR-OBJ (vla-GET-HANDLE VLA-RR-OBJ)) ;图元处理码
(SETQ BRK-vla-RR-OBJ (LIST vla-RR-OBJ)) ;串列VLA

(VLR-PERS ;;永久反应器
(VLR-OBJECT-REACTOR ;;物件反应器
  BRK_VLA-NR-OBJ ;;NR_物件对象,LIST的VLA
  DXF05_RR-OBJ   ;;RR_编辑对象.图元处理码
'((:VLR-MODIFIED . AR_AE_RR_MODIFIED) ;编辑反应程序
   (:VLR-COPIED . AR_AE_RR_COPIED) ;复制反应程序
   (:VLR-ERASED . AR_AE_RR_ERASED) ;删除反应程序
   )
))
(SETQ I (1+ I))
(SETQ RE NIL)
)

) ;_ 结束COND
) ;_ 结束WHILE
) ;_ 结束PROGN
) ;_ 结束IF
) ;_ 结束PROGN
) ;_ 结束IF
) ; DEFUN AR_AE_RR_COPIED

; 编辑反应程序
(DEFUN AR_AE_RR_MODIFIED
(NOTIFIER-OBJECT REACTOR-OBJECT PARAMETER-LIST / EN-AREA EN-AREA-M RR-OBJ VLR-TX)
(PRINT "AR_AE_RR_MODIFIED,编辑反应程序")
(IF (VLAX-READ-ENABLED-P NOTIFIER-OBJECT) ;;确定物件对象是否可读
(PROGN
(SETQ RR-OBJ (HANDENT (VLR-DATA REACTOR-OBJECT))) ;;编辑对象,REACTOR-OBJECT
(SETQ VLR-RR-OBJ  (VLAX-ENAME->vla-OBJECT RR-OBJ))
(SETQ EN-AREA (vla-GET-AREA NOTIFIER-OBJECT)) ;;物件对象,NOTIFIER-OBJECT
(SETQ EN-AREA-M (STRCAT (RTOS (/ EN-AREA 10000) 2 2) "㎡"))
(vla-PUT-TEXTSTRING VLR-RR-OBJ EN-AREA-M)
) ;_ 结束PROGN
) ;_ 结束IF
) ;DEFUN AR_AE_RR_MODIFIED

; 删除反应程序
(DEFUN AR_AE_RR_ERASED (NOTIFIER-OBJECT REACTOR-OBJECT PARAMETER-LIST / )
(PRINT "AR_AE_RR_ERASED,删除反应程序")
(FOREACH I (CDR (CAR (VLR-REACTORS :VLR-OBJECT-REACTOR)))
(IF (OR (VLAX-ERASED-P (CAR (VLR-OWNERS I)))
  (VLAX-ERASED-P (VLAX-ENAME->vla-OBJECT NOTIFIER-OBJECT))
  )
(PROGN
(SETQ RR-OBJ (HANDENT (VLR-DATA REACTOR-OBJECT))) ;;编辑对象,REACTOR-OBJECT
(ENTDEL RR-OBJ)
(VLR-PERS-RELEASE I)
(VLR-REMOVE I)
) ;_ 结束PROGN
) ;_ 结束IF
)
) ;DEFUN AR_AE_RR_MODIFIED

; 删除没有物件对象者的反应器
(IF REMOVE_PERS_REACT
(PROGN
(FOREACH I (VLR-PERS-LIST)
   (IF (NOT (VLR-OWNERS I))
     (PROGN
       (VLR-PERS-RELEASE I)
       (VLR-REMOVE I)
     ) ;_ 结束PROGN
   ) ;_ 结束IF
) ;_ 结束FOREACH
) ;_ 结束PROGN
) ;_ 结束if

(defun AR_DXF (#code #ename)
(cdr (assoc #code (entget #ename)))
)

; 执行产生面积程序
(defun c:CRAREA ()
(prompt "\n**<面积反应器练习>**")
(SETQ NR-OBJ (CAR (ENTSEL "\n 选取物件:")))
(SETQ PTDT (VLAX-CURVE-GETPOINTATPARAM NR-OBJ 0)) ;PL起点
(SETQ vla-NR-OBJ (VLAX-ENAME->vla-OBJECT NR-OBJ)) ;转换为VLA
(SETQ DXF05_NR-OBJ (vla-GET-HANDLE VLA-NR-OBJ)) ;图元处理码
(SETQ BRK_VLA-NR-OBJ (LIST vla-NR-OBJ)) ;串列VLA
(SETQ EN-AREA (vla-GET-AREA VLA-NR-OBJ)) ;取出面积
(SETQ EN-AREA-M (STRCAT (RTOS (/ EN-AREA 10000) 2 2) "㎡")) ;面积单位
(VL-CMDF "TEXT" PTDT 30 0 EN-AREA-M ) ;输出面积数值成文字
(SETQ RR-OBJ (ENTLAST)) ;;取得文字图元
(SETQ vla-RR-OBJ (VLAX-ENAME->vla-OBJECT RR-OBJ)) ;转换为VLA
(SETQ DXF05_RR-OBJ (vla-GET-HANDLE VLA-RR-OBJ)) ;图元处理码
(SETQ BRK-vla-RR-OBJ (LIST vla-RR-OBJ)) ;串列VLA

; 建立反应器
(VLR-PERS ;;永久反应器
(VLR-OBJECT-REACTOR ;;物件反应器
BRK_VLA-NR-OBJ ;;NR_物件对象,LIST的VLA
DXF05_RR-OBJ   ;;RR_编辑对象.图元处理码
'((:VLR-MODIFIED . AR_AE_RR_MODIFIED) ;编辑反应程序
   (:VLR-COPIED . AR_AE_RR_COPIED) ;复制反应程序
   (:VLR-ERASED . AR_AE_RR_ERASED) ;删除反应程序
   )
))

(prin1))

[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-7-29 22:43:06 | 显示全部楼层
愿上帝保佑你!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-7-29 22:49:13 | 显示全部楼层
愿王母娘娘也保佑你!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-7-30 08:42:24 | 显示全部楼层
最近要加班,先顶一下。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-7-30 18:42:19 | 显示全部楼层
只能祝福您了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-30 19:44:31 | 显示全部楼层
谢谢各位的祝福
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 07:57 , Processed in 0.462772 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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