The Open API provides a way to add your own custom diagram painters for painting some additional stuff on the diagram canvas. A good sample would be some highlighting in the diagram.

The painter can be added only into the opened diagram's com.nomagic.magicdraw.uml.symbols.DiagramSurface. Only the opened diagram has DiagramSurface. A closed diagram returns null.

Example of the code:

Application.getInstance().addProjectEventListener(new ProjectEventListenerAdapter()
{
   public void projectOpened(Project project)
   {
      project.addPropertyChangeListener(new PropertyChangeListener()
      {
         public void propertyChange(PropertyChangeEvent evt)
         {
            if(evt.getPropertyName().equals(Project.DIAGRAM_OPENED))
            {
               DiagramPresentationElement diagram = Application.getInstance().getProject().getActiveDiagram();
               diagram.getDiagramSurface().addPainter(new DiagramSurfacePainter()
               {
                  public void paint(Graphics g, DiagramPresentationElement diagram)
                  {
                     g.setColor(Color.BLUE);
                     List symbols = diagram.getPresentationElements();
                     for (int i = 0; i < symbols.size(); i++)
                     {
                        PresentationElement o = (PresentationElement)symbols.get(i);
                        if( o instanceof ShapeElement)
                        {
                           Rectangle bounds = o.getBounds();
                           bounds.grow(5,5);
                           ((Graphics2D)g).draw(bounds);
                        }

                     }

                  };

               });

            }

         }

      });

   }

});
    

 You can find the code examples in <installation_directory>\openapi\examples\customdiagrampainter