  Writing custom plan objects notes.
  ==================================

  To write custom plan objects you should consider following issues:

  1. New plan object MUST be derived from TPlanObject or any it's descendants.
  2. You MUST override following TPlanObject methods:

      - GetObjectTypeDescr;     // returns object type string (e.g. 'Box')
      - Clone;                  // creates the plan object clone
      - Draw;                   // draws plan object
      - FillObjectProperties;   // fills 'Properties' string list with object properties
      - HasInternalProperty;    // returns True of the given property name is internal for this plan object
      - UpdateObjectProperties; // restores plan object properties from 'Properties' string list

  3. You may need to override following TPlanObject methods:
    
      - SaveCoords;        // if the point count differs from ancestor's
      - GetClippingRgn;    // if the covered region differs from ancestor's
      - AddPoint;          // if the point count differs from ancestor's
      - CanBeParent;
      - GetDisplayRect;    // if the covered region differs from ancestor's
      - HasInternalPoint;  // if the covered region differs from ancestor's
      - HasMarginPoint;    // if the covered region differs from ancestor's
      - EditMove;          // if the covered region differs from ancestor's
      - EditResize;        // if the covered region differs from ancestor's
      - Move;              // if the covered region differs from ancestor's
      - Resize;            // if the covered region differs from ancestor's
      - NeedRepaint.       // if the covered region differs from ancestor's

  4. You MUST register new plan object class using RegisterPlanObjectClass
     method.
