本帖最后由 yjr111 于 2011-11-1 23:32 编辑
首先,向G版的点拨表示衷心感谢,希望论坛能有更多像G版一样热心的版主帮助我等初学!
现已明白单个反应器对象只能对自身的变化进行信息显示、查询。
花了一个晚上的时间,关于那个帖子里的标注反应器总算成功,现在发上源码和图片,对刚刚接触反应器的也许能有点帮助!

- ;;;;;;;;;;;;;;;;回调函数;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (defun SD1 (notifier-object reactor-object parameter-list )
- (VL-LOAD-COM)
- (setq p10 (vla-get-startpoint notifier-object)
- p11(vla-get-endpoint notifier-object)
- bzmp1 (rtos (vla-get-length notifier-object))
- bzmp(RTOS (vla-get-Measurement rlt_dim)));;;;;;;;取得未修改过的原始测量值
- (if (not(numberp(vl-string-search "~" bzmp )))
- (setq bzmp(strcat (rtos (distof bzmp1) 2 0) "~" (rtos (+(distof bzmp1) 20) 2 0)));;;;;;;;;;;;如果没被修改过的话对测量值处理
- (progn
- (setq bzmp(vla-get-TextOverride rlt_dim bzmp));;;;;;;;;;;;如果被修改过的话直接取标注文本
- (setq bzmp(strcat (rtos (distof bzmp) 2 0) "~" (rtos (+(distof bzmp) 20) 2 0)))
- );progn
- );if
- (vla-put-TextOverride rlt_dim bzmp);;;;;;;;;;;BZMP已经取得更改后的标注文本
- (vla-put-ExtLine1Point rlt_dim p10)
- (vla-put-ExtLine2Point rlt_dim p11)
- (vla-Update (car rlt_dim))
- (princ)
- )
- ;;;;;;;;;;;;;;;;;;;;;;主程序,标注对象加入反应器;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (defun c:sd(/ e1 rlt vrl)
- (setq e1_line (car (entsel"\n 选择要改变的物体:"))
- p1 (cdr(assoc 10 (entget e1_line)))
- p2 (cdr(assoc 11 (entget e1_line)))
- p3 (list(- (car p2)(car p1))(+ 20 (cadr p1)))
- rlt_line (list(vlax-ename->vla-object e1_line)))
- (command "dimaligned" p1 p2 p3)
- (setq e1_dim (entlast)
- rlt_dim (vlax-ename->vla-object e1_dim)
- vrl(vlr-pers(vlr-object-reactor rlt_line nil '((:vlr-modified . sd1)))))
- (princ)
- )
|