I've created code that links objects together in a reactor:
Code:
(vl-load-com)
(defun LinkObjects (ObjList / ReactObj)
(if ObjList
(progn
(setq ReactObj (vlr-object-reactor
ObjList
nil
'((:vlr-erased . LinkObj:Delete)
(:vlr-unappended . LinkObj:Delete)
)
)
);end setq
(vlr-pers ReactObj);Make the reactor persistent
);end progn
);end if
);end defun
(defun LinkObj:Delete (LinkObj ReactObj ParamList / )
(if (not (vl-position ReactObj *LinkReactorsToRemove*))
(setq *LinkReactorsToRemove* (cons ReactObj *LinkReactorsToRemove*))
);end if
);end defun
Another snippet sets up a command-reactor
Code:
(vlr-command-reactor
nil
'((:vlr-commandWillStart . LinkReact:CommandStart)
(:vlr-commandEnded . LinkReact:CommandEnd))
)
(defun LinkReact:CommandStart (Reactor CommandList / )
(setq *LinkReactorsToRemove* nil)
);end defun
(defun LinkReact:CommandEnd (Reactor CommandList / )
(cond (*LinkReactorsToRemove*
(foreach ReactorToRemove *LinkReactorsToRemove*
(LinkObj:SafeDelete (vlr-owners ReactorToRemove))
);end foreach
);end *LinkReactorsToRemove*
);end conds
(LinkObj:SafeDeleteGo)
);end defun
(defun LinkObj:SafeDelete (ObjList / )
(foreach Obj ObjList
(if (and (not (vl-position Obj *LinkSafeToDelete*))
(not (vlax-erased-p Obj)))
(progn
(vla-put-visible Obj 0)
(setq *LinkSafeToDelete* (cons Obj *LinkSafeToDelete*))
);end progn
);end if
);end foreach
);end defun
(defun LinkObj:SafeDeleteGo ( / )
(if *LinkSafeToDelete*
(foreach Obj *LinkSafeToDelete*
(if (not (vlax-erased-p Obj))
(vla-erase Obj)
);end if
);end foreach
);end if
);end defun
Finally, a simple command to create the link...
Code:
(defun C:LinkObjects ( / SS SSLen ObjList)
(if (setq SS (ssget))
(progn
(Setq SSLen (sslength SS))
(while (> (Setq SSLEn (1- SSLen)) -1)
(setq ObjList (cons (vlax-ename->vla-object (ssname SS SSLen)) ObjList))
);end while
(if ObjList
(LinkObjects ObjList)
);end if
);end progn
);end if
);end defun
So i can draw a couple of plines, and then run LinkObjects, and they are linked together.
If I delete one object, then all of the other linked objects will also be deleted.
However, when I undo, only the object(s) I selected before are un-deleted, though the object reactor still exists and points to all linked objects.
How do I get all linked objects to undo together?
Thanks!