Planning the Callback Functions
For each reactor event, you must plan the function that will be invoked when the
event occurs. The following pseudo-code outlines the logical sequence of events that
should occur when users drag one of the polyline vertices to a new location:
Defun gp:outline-changed Erase the tiles. Determine how the boundary changed. Straighten up the boundary. Redraw new tiles. End function
There is a complication, though. When the user begins dragging the outline of a polyline
vertex, AutoCAD notifies your application by issuing a :vlr-modified event. However, at this point the user has just begun dragging one of the polyline
vertices. If you immediately invoke the gp:outline-changed function, you will interrupt the action that the user is in the midst of. You would
not know where the new vertex location will be, because the user has not yet selected
its position. And finally, AutoCAD will not allow your function to modify the polyline
object while the user is still dragging it. AutoCAD has the polyline object open for
modification, and leaves it open until the user finishes repositioning the object.
You need to change your approach. Here is the updated logic:
When the user begins repositioning a polyline vertex, Invoke the gp:outline-changed function Defun gp:outline-changed Set a global variable that stores a pointer to the polyline being modified by the user End function When the command completes, Invoke the gp:command-ended function Defun gp:command-ended Erase the tiles Get information on the previous polyline vertex locations Get information on the new polyline vertex locations Redefine the polyline (straighten it up) Redraw the tiles End function
When a user completes modifying a path outline, AutoCAD notifies your application
by issuing a :vlr-commandEnded event, if you have established an editor reactor.
The use of a global variable to identify the polyline the user changed is necessary
because there is no continuity between the gp:outline-changed and gp:command-ended functions. In your application, both functions are invoked and executed independently
of one another. The global variable stores important information set up in one function
and accessed in the other.
Now consider what to do if the user erases the garden path boundary. The ultimate
objective is to erase all the tiles. The following pseudo-code outlines the logic:
When the user begins to erase the boundary, Invoke the gp:outline-erased function Defun gp:outline-erased Set a global variable that stores a pointer to the reactor attached to the polyline currently being erased End function When the erase is completed, Invoke the gp:command-ended function Defun gp:command-ended Erase the tiles that belonged to the now-deleted polyline End function
r each reactor event, you must plan the function that will be invoked when the event occurs. The following pseudo-code outlines the logical sequence of …function must create and return a ForeignScan plan node; … by fetching both tables' data and doing the join locally), it should provide this callback function:Planning. The FDW callback functions GetForeignRelSize , GetForeignPaths , GetForeignPlan , PlanForeignModify …Callback Routines. The FDW … This is called during query planning. … This function must create and return a ForeignScan plan node; …callback functions are used. … That seems like a lot of work if you're only planning on using your callback function once. Why not …plan, you have the flexibility to override the … To define a callback, simply create a shell function of the same …