When
writing a reactor-based application, you need to handle any command that
affects your objects in a significant way. One of your program design activities
should be to review all possible AutoCAD editing commands and determine
how your application should respond to each one. The format of the
reactor-trace sheet shown near the end of Lesson 6 is very good
for this purpose. Invoke the commands you expect your user to use,
and write down the kind of behavior with which your application
should respond. Other actions to plan for include
- Determine
what to do when users issue UNDO and REDO commands.
- Determine
what to do when users issue the OOPS command after erasing entities
linked with reactors.
To
prevent a very complex subject from becoming very, very complex,
the tutorial does not try to cover all the possibilities that should
be covered, and the functionality within this lesson is kept to
an absolute minimum.
Even though you won't be building
in the complete functionality for these extra commands, examine
what a few additional editing functions would require you to do:
- If
users stretch a polyline boundary (using the STRETCH command) several
things should happen. It could be stretched in any direction, not
just on the major or minor axis, so the boundary may end up in a
very odd shape. In addition, you need to take into consideration
how many vertices have been stretched. A situation where only one
vertex is stretched will result in a polyline quite different from
one in which two vertices are moved. In any case, the tiles must
be erased and new positions recalculated once you determine the
adjustments needed to the boundary.
- If users move a polyline boundary,
all the tiles should be erased, then redrawn in the new location.
This is a fairly simple operation, because the polyline boundary
did not change its size or shape.
- If
users scale a polyline boundary, you need to make a decision. Should
the tiles be scaled up as well, so that the path contains the same
number of tiles? Or, should the tile size remain the same and the
application add or remove tiles, depending on whether the polyline
was scaled up or down?
- If
users rotate a polyline boundary, all the tiles should be erased,
then redrawn in the new orientation.
To begin, though, just plan for the following:
- Warn
the user upon command-start that the selected edit command (such as stretch, move,
or rotate) will have
detrimental effects on a garden path.
- If
the user proceeds, erase the tiles and do not redraw them.
- Remove
the reactors from the path outline.
NoteIn
addition to user-invoked AutoCAD commands, entities may also
be modified or deleted through AutoLISP or ObjectARX® applications.
The example provided in the Garden Path tutorial does not cover
programmatic manipulation of the garden path polyline boundary,
such as through (entdel <polyline entity>).
In this case, the editor reactor events:vlr-commandWillStart and :vlr-commandEnded will not be triggered.