When a node SHAPE_ATTR is set to "custom" and the CUSTOM_ATTR has been set to the name of a user-supplied class that extends the GrappaShape class, then that user-supplied class is used to specify the Shape of the node.
The class constructor should look like:
public UserClass(Element elem, double x, double y, double width, double height) {
super(POLYGON_SHAPE, x, y, width, height, 0, 0, 0, 0, 0, false, false, null);
// code to save arguments as global variables and
// to set the GrappaShape path variable at a minimum
}
Note that the path built in the constructor is used to determine the bounding box and clipping region of the non-text portion of the node.
Further customization can be accomplished if the class also implements the CustomRenderer interface (see below).