Author Topic: reactor linking objects  (Read 1270 times)

0 Members and 1 Guest are viewing this topic.

ronjonp

  • Needs a day job
  • Posts: 7054
reactor linking objects
« on: April 29, 2005, 05:04:03 PM »
I was parusing the help file and saw reactors. My question is, how do I get an object to react when another object is modified? Example:

text is linked to object with area when area changes text updates to new area value. I've seen a vlx that does this but wanted to know how it works.

Here is my feeble attempt:

Code: [Select]
(defun c:react (/)

  (defun print-radius (notifier-object reactor-object parameter-list)
    (vl-load-com)
    (cond
      (
       (vlax-property-available-p
notifier-object
"Area"
       )
       (princ "\n The area is ")
       (princ (vla-get-area notifier-object))
       (princ)
      )
    )
  )

  (defun print-text (notifier-object reactor-object parameter-list)
    (vl-load-com)
    (cond
      (
     (setq x (vlax-property-available-p
notifier-object
"TextString"
       ))
(vla-put-TextString obj  x)
      )
    )
  )

  (setq myCircle (car (entsel)))
  (setq obj (vlax-ename->vla-object myCircle))
  (setq circleReactor
(vlr-object-reactor
  (list obj)
  "Circle Reactor"
  '((:vlr-modified . print-radius))
)
  )
  (princ)

  (setq mytext (car (entsel)))
  (setq obj (vlax-ename->vla-object mytext))
  (setq textReactor
(vlr-object-reactor
  (list obj)
  "Text Reactor"
  '((:vlr-modified . print-text))
)
  )
  (princ)
)


Thanks for your help.

Ron

Windows 10 x64 - AutoCAD /C3D 2020

Custom Build PC

SMadsen

  • Guest
reactor linking objects
« Reply #1 on: April 30, 2005, 11:41:34 AM »
Some quick ideas:
XData: Have the area object refer to a text object by handle (a 1005 group).
Dictionary: Maintain arrays of referencing objects as XRecords (just like groups do it).
The object reactor itself: Use the data field of the reactor to refer to a text object.
Groups: Self-explanatory.

In any case, make sure that you verify the referenced objects before using them. You don't want an error due to handling non-existing objects during a reactor callback. Also, AUDIT has a problem with handles in 1005 groups if they are lost.

MP

  • Seagull
  • Posts: 17488
reactor linking objects
« Reply #2 on: April 30, 2005, 12:24:25 PM »
Good advice Stig. If I'm not mistaken you can set the 1005 group data to "0" for objects that have gone to hades and audit won't balk.
\|// Set goal. Experiment tirelessly until
|Oo| practice has become expertise.  Loop.
|- | LinkedIn | Dropbox

Crank

  • Swamp Rat
  • Posts: 1441
reactor linking objects
« Reply #3 on: May 01, 2005, 07:02:50 AM »
It's a nice exercise...

But if you only need a linked text to display the area, then you can better use a field to do just that.

 Vault Professional 2018     /      Building Design Suite Ultimate 2017     /     AEC Collection 2018 + 2019 +2020

ronjonp

  • Needs a day job
  • Posts: 7054
reactor linking objects
« Reply #4 on: May 02, 2005, 09:15:57 AM »
Quote
then you can better use a field to do just that.


That is true...but then the field will only work in Acad 2005+.

Ron

Windows 10 x64 - AutoCAD /C3D 2020

Custom Build PC