- UID
- 4198
- 积分
- 621
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-4-22
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
[求助] 请各位高手帮忙程序看看哪出错了
请教以下两个反应器问题
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] |
|