Write Scripts

To create an alternative representation for an element or connector, you write a Shape Script that defines the size, shape, orientation and color of the representation. A Shape Script contains a number of sections for defining different aspects of the shape; for an element these include:

  • Main object
  • Labels
  • Decoration (for example, a Document element might contain an icon depicting a document)

For a connector the sections include:

  • Main object
  • Shape Source
  • Shape Target
  • Labels

Shape Scripts operate on the basis that the default (UML) representation is used unless the script contains an alternative definition. That is:

  • If you have a Shape Script containing just a decoration, this decoration is added on top of the normally-drawn object
  • If you have an empty shape routine, it overrides the default; so, a blank 'shape label' prevents the creation of the normal floating text label for elements that have them

You can also comment your scripts using C-style comments; for example:

     // C Style Single Line comment

     /* Multi Line

     comment supported */

Scripting is not case-sensitive: 'Shape' is the same as 'shape'.

Script Structure



See also

Example of Element Script Layout

shape main


          // draw the object


     shape label


          // draw a floating text label


          decoration <identifier>


          // draw a 16x16 decoration inside the object


The < identifier > string is an alphanumeric word.

Example of Connector Script Layout

shape main


          // draw the line


     shape target


          // draw the shape at the target end


     shape source


          // draw the shape at the source end


     label <positionLabel>


          // define the text for the label


The <positionLabel> string can be any of:

  • lefttoplabel
  • leftbottomlabel
  • middletoplabel
  • middlebottomlabel
  • righttoplabel
  • rightbottomlabel


A shape can have Sub-shapes, which must be declared after the main Shape Script, but called from the Method commands.

This is an example of the ordering for declarations:

     shape main


          // Initialisation Attributes - these must be before drawing commands

          noshadow = "true";

          h_align = "center";

          //drawing commands (Methods)

          rectangle (0,0,100,100);

          println ("foo bar");

          // call the sub-shape

          addsubshape ("red",  20, 70);

          // definition of a sub-shape

          shape red


               setfillcolor (200, 50, 100);

               rectangle (50,50,100,100);



     //definition of a label

     shape label


          setOrigin ("SW",0,0);

          println ("Object: #NAME#");


     //definition of a Decoration

     decoration triangle


          // Draw a triangle for the decoration

          startpath ();

          moveto (0,30);

          lineto (50,100);

          lineto (100,0);

          endpath ();

          setfillcolor (153,204,255);

          fillandstrokepath ();


The shape resulting from this script is:

Drawing Methods

Order of declaration

Shapes can consist of Attribute declarations, Command calls and Sub-shape definitions, which must appear in that order; that is, Attribute declarations must appear before all Command calls and Sub-shape definitions must appear last.

Shape Attributes Sub-Shapes

Learn more

Learning Center topics

  • Alt+F1 | Enterprise Architect | Modeling Languages | Defining Shapes | Defining an Element Shape