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

Layout

Description

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
 

 

Sub-shapes

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:

Shapescript_object

 

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) | Modeling Languages | Defining Shapes | Defining an Element Shape