Você está na página 1de 137

DOODLE :

Origami
Oriented
Diagramming
LanguagE

by Jérôme Gout
Version 2.1
October 2001
Copyright 2000-2001, Jérôme Gout. This document may be printed and dis-
tributed free of charge in its original form (including the list of authors). If it is
changed or if parts of it are used within another document, then the author list
must include all the original authors AND that author (those authors) who has
(have) made the changes.

2
Contents
1 Introduction 6

2 General Concepts 7
2.1 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Internal data . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3.1 Vertices . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.2 Edges . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.3 Faces . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Folds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Page layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Doodle operators 11
3.1 Block operators . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.1 \diagram header . . . . . . . . . . . . . . . . . . . . . 11
3.1.2 \step . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Diagram header specific operators . . . . . . . . . . . . . . . 13
3.2.1 \color back . . . . . . . . . . . . . . . . . . . . . . . 13
3.2.2 \color front . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.3 \comment . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.4 \design date . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.5 \designer . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.6 \diagram date . . . . . . . . . . . . . . . . . . . . . . 20
3.2.7 \diagrammer . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.8 \title . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.9 \today . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Paper shape operators . . . . . . . . . . . . . . . . . . . . . . 24
3.3.1 \diamond . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.2 \horizontal rectangle . . . . . . . . . . . . . . . . . 25
3.3.3 \square . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.4 \vertical rectangle . . . . . . . . . . . . . . . . . . 28
3.4 Geometrical operators . . . . . . . . . . . . . . . . . . . . . . 30
3.4.1 Vertex cloning . . . . . . . . . . . . . . . . . . . . . . 30
3.4.2 \fraction . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4.3 \inter cut . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.4 \intersection . . . . . . . . . . . . . . . . . . . . . . 35
3.4.5 \line to line . . . . . . . . . . . . . . . . . . . . . . 38
3.4.6 \middle . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4.7 \move . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.4.8 \parallel . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4.9 \perpendicular . . . . . . . . . . . . . . . . . . . . . 47
3.4.10 \point to line . . . . . . . . . . . . . . . . . . . . . 49

3
3.4.11 \point to point . . . . . . . . . . . . . . . . . . . . . 52
3.4.12 \rabbit ear . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.13 \shift . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.4.14 \symmetry . . . . . . . . . . . . . . . . . . . . . . . . 62
3.4.15 \unshift . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.5 Line operators . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.5.1 \border . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.5.2 \cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.5.3 \fold . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.5.4 \mountain fold . . . . . . . . . . . . . . . . . . . . . 74
3.5.5 \valley fold . . . . . . . . . . . . . . . . . . . . . . . 77
3.5.6 \xray fold . . . . . . . . . . . . . . . . . . . . . . . . 80
3.6 Arrow operators . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.6.1 \open arrow . . . . . . . . . . . . . . . . . . . . . . . 83
3.6.2 \push arrow . . . . . . . . . . . . . . . . . . . . . . . 85
3.6.3 \repeat arrow . . . . . . . . . . . . . . . . . . . . . . 87
3.6.4 \simple arrow . . . . . . . . . . . . . . . . . . . . . . 90
3.6.5 \return arrow . . . . . . . . . . . . . . . . . . . . . . 92
3.7 Model manipulation . . . . . . . . . . . . . . . . . . . . . . . 95
3.7.1 \rotate . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.7.2 \turn over horizontal . . . . . . . . . . . . . . . . . 96
3.7.3 \turn over vertical . . . . . . . . . . . . . . . . . . 97
3.8 Edge management operators . . . . . . . . . . . . . . . . . . . 98
3.8.1 \hide . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.8.2 \show . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.8.3 \space fold . . . . . . . . . . . . . . . . . . . . . . . 100
3.9 Faces coloring operators . . . . . . . . . . . . . . . . . . . . . 101
3.9.1 \darker . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.9.2 \fill . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.9.3 \lighter . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.9.4 \unfill . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.10 Step layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
3.10.1 \clip . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
3.10.2 \scale . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.10.3 \unclip . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3.10.4 \visible area center . . . . . . . . . . . . . . . . . 110
3.10.5 \visible area height . . . . . . . . . . . . . . . . . 112
3.10.6 \visible area width . . . . . . . . . . . . . . . . . . 114
3.11 Page layout operators . . . . . . . . . . . . . . . . . . . . . . 116
3.11.1 \bottom margin . . . . . . . . . . . . . . . . . . . . . 116
3.11.2 \horizontal space . . . . . . . . . . . . . . . . . . . 117
3.11.3 \left margin . . . . . . . . . . . . . . . . . . . . . . . 118
3.11.4 \right margin . . . . . . . . . . . . . . . . . . . . . . 119
3.11.5 \top margin . . . . . . . . . . . . . . . . . . . . . . . 120

4
3.11.6 \vertical space . . . . . . . . . . . . . . . . . . . . . 121
3.12 Text operators . . . . . . . . . . . . . . . . . . . . . . . . . . 122
3.12.1 \caption . . . . . . . . . . . . . . . . . . . . . . . . . 122
3.12.2 \label . . . . . . . . . . . . . . . . . . . . . . . . . . 123
3.12.3 \ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.12.4 \text . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.13 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.13.1 \debug . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.13.2 \debug line . . . . . . . . . . . . . . . . . . . . . . . 127
3.13.3 \debug point . . . . . . . . . . . . . . . . . . . . . . . 129
3.14 Miscellaneous operators . . . . . . . . . . . . . . . . . . . . . 130
3.14.1 \define . . . . . . . . . . . . . . . . . . . . . . . . . . 130
3.14.2 \include . . . . . . . . . . . . . . . . . . . . . . . . . 132
3.14.3 \reset . . . . . . . . . . . . . . . . . . . . . . . . . . 133

4 Summary 134

5
1 Introduction
Doodle is a language to describe Origami diagrams using symbolic and mean-
ing notations. This language is symbolic, this means that users only manip-
ulate names rather than geometrical coordinates. It also a powerful geomet-
rical assistant providing plenty of geometrical operation origami oriented. It
takes the responsibility to produce a standardized output with an automatic
steps layout.
Doodle is also a ”translator” system which transforms the input Doodle
source code in several outputs. Currently there is only one output Doodle
can produces. We have made the choice to provide first of all a printable
output. Postscript appears to be the highest quality way to print something.
Nevertheless Doodle has been design to provide a C++ objects API to
extend its output capacities.
The first section of this manual explains with more details the general
concepts of the system. This section helps user to understand the internal
structure of the system and the way it manages graphical elements.
As the Doodle language is composed of a collection of operators which
represent the base of the language we have provided a complete description
of them. Operators have been grouped by categories such as geometrical or
fold operators.
This manual aims to be the Doodle reference manual. This way, each op-
erator has been described separately and for each ones we give the following
elements:

• a general description of the operator,

• sometimes graphical examples (made directly with Doodle),

• possible practical usages,

• formal possible syntaxes,

• the complete description of each formal input parameter,

• detail on the result of the operator if needed

• feasibility conditions (such as geometric assertions) if needed.

The last section is a short summary listing briefly all operators with a
link to the detailed page for each of them.

6
2 General Concepts
Diagram file = diagram header block + sequence of step blocks.

2.1 Comments

Description
Comments in diagram source code can be inserted thanks to percent
character (%). All the code placed between % and carriage return will
be skipped.

Usage

% This is a comment

2.2 Operators
A Doodle instruction is an instantiation of an operator. Each operator
begins with the backslash character (\). Operators are distributed in two
exclusive types :

1. block operators,

2. basic operators.

Operators of the first type define contexts within basic ones can be found.
There are only two defined block operators in the language:

• \diagram header cf. §3.1.1,

• \step cf. §3.1.2.

All other operators are basic operators. Each basic operator source line
ends with a semi-colon (;).

2.3 Internal data


Internal data are information managed by Doodle which represents the core
of the system. Input Doodle operators define/modify geometrical data.
Those data are essentially points and lines of the steps. A third type of
data stored and maintained by the system is faces defined when user fills an
area.

7
2.3.1 Vertices
Main data structure is the vertices list. It represents all defined points up
to now. For instance, when a paper format description operator (such as
\square or \diamond) is parsed by Doodle, it creates four new vertices in
the vertices list according to the names found in the operator parameters.
The vertices database can be seen as a dictionary binding geometrical
coordinates to name given by user in operator parameter. Other geometrical
elements such as face or edge reference a physical point by its symbol name.
This way, each other component using a point share the same physical data
and thus the same coordinates. This symbol referencing paradigm is useful
in our case to guarantee unicity of each vertex. Vertex object structure is
the following:

• the symbol name,

• x coordinate,

• y coordinate,

• x shifting value (dx),

• y shifting value (dy).

Its shifting values (dx and dy) are values expressed in millimeter in a
local direct coordinate system centered in the point. Those extra coordinates
are used to separate visually two points at the same position. The operator
related to those values is mainly \shift (cf. §3.4.13 for more information).
An equivalence notion has been defined between two different vertices.
Two different vertices could be considerate as sharing the same position if
the norm the vector they form is lesser than  (a very small value equal to
1E −6 ).
Vertices can’t be removed from the database according to the assumption
that points defined on a physical paper can’t be removed once they have been
defined. Each new vertex definition is added to the database and then, the
vertex can be used/referenced. The vertices database can be accessed from
any part of a Doodle source file and its lifetime is also global.
Nevertheless, user can remove all graphical elements previously defined
using the operator \reset.

2.3.2 Edges
Edge is the main element that uses vertices. It is used to draw graphical
line in steps. It contains both extremity symbol names referencing to both
vertices delimiting this edge. The Doodle notation of an edge used braces
around the couple of vertices names:

8
[a, b] % means the edge from ’a’ to ’b’

Some geometrical operators (like \line to line or \rabbit ear) return


a couple of vertices. They use the edge notation for convenience and read-
ability but they do not define an edge.
In an Origami point of view, edges are used to express paper limits (its
borders), folds to apply (mountain or valley) and creases which result of
application of folds. An edge is typed according to its Origami nature. For
instance, a line used to draw a valley fold will be considered as a valley edge.
Section 2.4 explains how edge types are changed from step to step.
Edges can be modified by operators (such as \cut) but like vertices a
defined edge cannot be physically removed from the internal structure. Even
if an edge is hidden (using operator \hide) it remains in data structure. This
way, it guarantees that at any moment it can be restored in steps (using
operator \show).
Edges can always be accessed once they have been defined1 .

2.3.3 Faces
Faces are structures that allow user to define a particular area to fill on
current step of the diagram. A face is mainly a vertex names list. Face
closure is automatically done by the system. At present time, faces are used
only by coloring operators (such as \fill).

2.4 Folds
Traditional origami folds are basically lines in diagrams. Therefore, Doo-
dle folds are edges defined between two vertices. In fact, folds have been
understood in Doodle context as the line defining an Origami fold. It is
important to keep in mind that Doodle doesn’t compute any origami fold,
in sense of computing new paper layers position after a fold. Doodle remains
a graphical tool, it can be seen as a geometrical and graphical assistant for
a diagrammer. In the rest of this document, fold can be interpreted as the
line which defines an Origami fold, a paper border, an existing fold or a xray
line (hidden fold line). Here is the exhaustive Doodle line style list:

• border : double width plain line to represent paper borders,

• mountain : single width dot-dot-dashed line to represent a mountain


fold line,

• valley : single width dashed line to represent a valley fold line,

• fold : thin2 uncompleted line to represent a crease or an existing fold


1
This is true only if the operator \reset isn’t used.
2
The fold line should be thinner than mountain or valley one.

9
• xray : single width dotted line to represent an xray line (when a
mountain or a valley fold is hidden by some paper layers).

Once a fold line is defined by a fold operator of the language (cf. §3.5)
an edge is added to the edge internal data structure. This operation can
only be made inside a step block meaning that the new fold is applied on
this particular step. As we have seen in a previous section edge, database is
global and edges are still present for next steps. Thus, the problem is what
kind of line a particular fold should become in further steps. Indeed once a
valley fold has been defined, the fold still exists physically but in an Origami
diagramming sense its dashed style has to be changed to a permanent style
like border or existing fold (crease). The choice done to issue this problem
is that each fold line takes the existing fold style at the end of the step in
which it has been created. This implicit mechanism can be overridden if it
leads to an unexpected result. In this case the line style of the fold can be
explicitly specified with one of the line operators.

2.5 Page layout


In the same spirit that it has been done for points positioning preferring geo-
metrical relation between symbols (referencing real graphical points) to XY
coordinates, the page layout is as mush as possible human oriented. The sys-
tem has the responsibility of the position of each diagram step according to
the user specifications. Of course, Doodle follows the model order implicitly
given by the user through the operator \step. It also respects all the config-
urable model parameters. These parameters allow users to control globally
the page layout such as the bottom/top margin or the horizontal/vertical
space between two steps. All those parameters have default value. Each of
those parameters can be specified in the header block of the diagram. For
instance we find an operator \bottom margin which takes the length that
Doodle has to left in the bottom of each page (expressed in millimeters).
Explain here in detail the concept of page automatic layout.

10
3 Doodle operators
3.1 Block operators
As it was already said, there are two exclusive types of operators.

• block operators,

• terminal operator (all others operators).

In the next two sections, block operators are detailed. Terminal opera-
tors will be found further grouped by categories.
Block operators define particular semantic context for simple operators.
The scope defined by such an operator is all instructions found between the
following open bracket ({) and the close one (}). Therefore, block operator
doesn’t end with a semi-colon (;).

3.1.1 \diagram header

Description
Top level block. Block definition of general diagram information. It con-
tains several information like dates, author names, title etc...

Usage

\diagram_header {
% Here, we find general information about diagram
}

3.1.2 \step

Description
Step block defines a scope within which operators for a step of the model
can be described. Steps are automatically indexed beginning with 1. There
are two implicit treatments associated to a step block:

• at the beginning of each step over the first, points and edges defined
into previous steps are automatically inserted in the new step. Then,
they can be used as if they are defined in the current step. During
the edge transfer, the type of previous edges are systematically set to
fold. A valley or mountain fold in a step will become basic fold in
next one.

11
• at the end of each step, an automatic diagram output from the internal
data structures (vertices and edges) is produced. Default output is a
Postscript.

Thus, an empty step block will produce a diagram step containing all
the previously defined and visible edges up to this step, the fold line (valley
or mountain) appear as fold (thin shortest line).

Usage

\step {
% Insert here new operations for this current step
}

12
3.2 Diagram header specific operators
Among simple operators, some of them are specific to the diagram header
block. Their can only be found in this particular context.

3.2.1 \color back

Description
Operator to specify the desired color of the backside of the sheet of paper.
This color is used within a fill operation (operator \fill see §3.9.2) in which
the side flag is equal to ’back’. There are two different ways to define a color:

• by its name (according to those predefined),

• by its RGB values.

Therefore, two syntaxes are provided. The first one takes only one parameter
which is the color symbol name. This name should be one of those declared
by the language (see below). The second syntax takes three integer values
which are respectively red, green and blue percentage.
Due to its global aspect this operator should only appear in a diagram header
block.

Usage

\color_back(gray80);
\color_back(0, 0, 100); % cyan

Formal structure

\color_back(COLOR);
\color_back(RED, GREEN, BLUE);

Parameters

COLOR
Description : Indicates the name of the back color.
Type : Symbol.
Allowed values : One of the predefined color name :
[black, gray10, gray20, gray30,
gray40, gray50, gray60, gray70,
gray80, gray90, white].

RED

13
Description : Indicates the percentage of red in back color.
Type : Integer.
Allowed values : Any integer in range [0, 100].

GREEN
Description : Indicates the percentage of green in back color.
Type : Integer.
Allowed values : Any integer in range [0, 100].

BLUE
Description : Indicates the percentage of blue in back color.
Type : Integer.
Allowed values : Any integer in range [0, 100].

14
3.2.2 \color front

Description
Operator to specify the desired color of the front side of the sheet of paper.
This color is used within a fill operation (operator \fill see §3.9.2) in which
the side flag is equal to ’back’. There are two different ways to define a color:

• by its name (according to those predefined),

• by its RGB values.

Therefore, two syntaxes are provided. The first one takes only one parameter
which is the color symbol name. This name should be one of those declared
by the language (see below). The second syntax takes three integer values
which are respectively red, green and blue percentage.
Due to its global aspect this operator should only appear in a diagram header
block.

Usage

\color_front(gray10);
\color_front(100, 8, 58); % deep pink

Formal structure

\color_front(COLOR);
\color_front(RED, GREEN, BLUE);

Parameters

COLOR
Description : Indicates the name of the front color.
Type : Symbol.
Allowed values : One of the predefined color name :
[black, gray10, gray20, gray30,
gray40, gray50, gray60, gray70,
gray80, gray90, white].

RED
Description : Indicates the percentage of red in front color.
Type : Integer.
Allowed values : Any integer in range [0, 100].

15
GREEN
Description : Indicates the percentage of green in front color.
Type : Integer.
Allowed values : Any integer in range [0, 100].

BLUE
Description : Indicates the percentage of blue in front color.
Type : Integer.
Allowed values : Any integer in range [0, 100].

16
3.2.3 \comment

Description
Operator to free comment the diagram. It can contain history of the
model or global indications (paper size, colors etc ...). Operator takes a
string parameter which is the comment. Comments are written in the first
page of the diagram, after authors name and title. Only three lines of
comments is enabled, if the parser finds more than three occurrences of
\comment in the diagram header a warning is produced and only the three
first comments are considered.

Usage

\diagram_header {
...
\comment("I’m proud to present my first origami creation.");
\comment("Difficulty : intermediate.");
\comment("Use a 30 cm paper, 70gr.");
\comment("This comment won’t appear on diagram");
...
}

Formal structure

\comment(COMMENT_STRING);

Parameters

COMMENT_STRING
Description : Indicates the comment string.
Type : String.
Allowed values : Any well formed string (between two double-quotes (")).

17
3.2.4 \design date

Description
Design date of the model. This operator is followed by a date. Dates
can be specified giving three integers MONTH DAY YEAR or using \today
operator (cf. §3.2.9 ). There isn’t control on year value, third example is
ambiguous and it is the responsibility of the author to guarantee the future
readability.
This operator should only appear in a diagram header block.

Usage
\design_date(\today);
\design_date(1, 1, 2000); % the bug day
\design_date(3, 29, 99);
\design_date(1998); % just for copyright

Formal structure
\design_date(TODAY);
\design_date(MONTH, DAY, YEAR);
\design_date(YEAR);

Parameters
TODAY
Description : Operator that return the current date (\today)
Type : Operator.

MONTH
Description : Indicates the number of the month of design.
Type : Integer.
Allowed values : Integer values in range [1, 12].

DAY
Description : Indicates the number of the day of design.
Type : Integer.
Allowed values : Integer values in range [1, 31].

YEAR
Description : Indicates the number of the year of design.
Type : Integer.
Allowed values : Any integer value.

18
3.2.5 \designer

Description
This operator defines the name(s) of author(s). It is followed by a list of
string separated by blanks.
This operator should only appear in a diagram header block.

Usage

\designer("Jerome Gout"); % First Doodle designer (I guess ;-)


\designer("Bart Simpson"); % Who knows ...

Formal structure

\designer(NAME_STRING);

Parameters

NAME_STRING
Description : Indicates the designer name string.
Type : String.
Allowed values : Any well formed string (between two double-quotes (")).

19
3.2.6 \diagram date

Description
Creation date of the diagram. This operator is followed by a date. Dates
can be specified giving three integers MONTH DAY YEAR or using \today
operator (cf. §3.2.9). There isn’t control on year value, third example is
ambiguous and it is the responsibility of the author to guarantee the future
readability.
This operator should only appear in a diagram header block.

Usage

\diagram_date(\today);
\diagram_date(02, 29, 2000);

Formal structure

\diagram_date(TODAY);
\diagram_date(MONTH, DAY, YEAR);
\diagram_date(YEAR);

Parameters

TODAY
Description : Operator that return the current date (\today)
Type : Operator.

MONTH
Description : Indicates the number of the month of diagram.
Type : Integer.
Allowed values : Integer values in range [1, 12].

DAY
Description : Indicates the number of the day of diagram.
Type : Integer.
Allowed values : Integer values in range [1, 31].

YEAR
Description : Indicates the number of the year of diagram.
Type : Integer.
Allowed values : Any integer value.

20
3.2.7 \diagrammer

Description
This operator defines the name(s) of diagrammer(s). It is followed by a
list of string separated by blanks.
This operator should only appear in a diagram header block.

Usage

\diagrammer("John Montroll");

Formal structure

\diagrammer(NAME_STRING);

Parameters

NAME_STRING
Description : Indicates the model author name string.
Type : String.
Allowed values : Any well formed string (between two double-quotes (")).

21
3.2.8 \title

Description
This operator defines the title of the model. It takes a string parameter.
This operator should only appear in a diagram header block.

Usage

\title("Asian elephant");

Formal structure

\title(TITLE_STRING);

Parameters

TITLE_STRING
Description : Indicates the title string.
Type : String.
Allowed values : Any well formed string (between two double-quotes (")).

22
3.2.9 \today

Description
Return the current date read from the system. Should only be used with
date operators (cf. §3.2.4 and §3.2.6).
This operator should only appear in a diagram header block.

Usage

\design_date(\today);

23
3.3 Paper shape operators
3.3.1 \diamond

Description
This operator allows the user to define four new vertices and four new
border edges drawing a diamond (a diamond is a rotated square, such
presentation is very frequent as beginning step). First vertex is the upper
corner, other vertices are set around the diamond in clockwise order.
This operator should only appear within a step block.

Usage

\diamond(A, B, C, D);

Formal structure

\diamond(VERTEX_1, VERTEX_2, VERTEX_3, VERTEX_4);

Parameters

VERTEX_1
Description : Indicates the name symbol use for the upper corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_2
Description : Indicates the name symbol use for the right corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_3
Description : Indicates the name symbol use for the bottom corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_4
Description : Indicates the name symbol use for the left corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

24
3.3.2 \horizontal rectangle

Description
Operator \horizontal rectangle defines four new edges associated to
four vertices named by the operator parameters (symbols). Edges are built
circularly taking two consecutive symbols. The first symbol of the parameter
list binds the upper left corner of the square. Second symbol is linked to the
upper right corner, the third one names the lower right corner and the fourth
is associated to the lower left vertex. The type of the four edges created is
border. A fifth parameter is added, it gives the ratio between width and
height of the rectangle. A possibility exists to specify a well known paper
format like ‘dollar’ or ‘A’ (ISO format: √12 ). Numeric ratio is given as a
percentage, 200 means a rectangle as taller as a square and twice wider. If
the ratio value is lesser than 100, a horizontal rectangle is still defined with
a width equal to the normal square size but the height is reduce to fit the
ratio.
This operator should only appear within a step block.

Usage

\horizontal_rectangle(a, b, c, d, dollar); % a horizontal dollar paper


\horizontal_rectangle(A, B, C, D, 200); % 1x2 double square size on X
\horizontal_rectangle(A, B, C, D, 50); % 1x2 half square size on Y

Formal structure

\horizontal_rectangle(VERTEX_1, VERTEX_2, VERTEX_3, VERTEX_4, RATIO);


\horizontal_rectangle(VERTEX_1, VERTEX_2, VERTEX_3, VERTEX_4, PAPER_TYPE);

Parameters

VERTEX_1
Description : Name symbol used for the left top corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_2
Description : Name symbol used for the right top corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_3

25
Description : Name symbol used for the right bottom corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_4
Description : Name symbol used for the left bottom corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

RATIO
Description : Percentage between width and height.
Type : Integer.
Allowed values : Any positive integer values (expect zero).

PAPER_TYPE
Description : Name of a predefined paper format.
Type : Symbol.
Allowed values : One of values [A, dollar] .

26
3.3.3 \square

Description
Operator square defines four new edges associated to four vertices named
by the operator parameters (symbols). Edges are built circularly taking two
consecutive symbols. The first symbol of the parameter list binds the upper
left corner of the square. Second symbol is linked to the upper right corner,
the third one names the lower right corner and the fourth is associated to
the lower left vertex. The type of the four edges created is border.
This operator should only appear within a step block.

Usage

\square(a, b, c, d);

Formal structure

\square(VERTEX_1, VERTEX_2, VERTEX_3, VERTEX_4);

Parameters

VERTEX_1
Description : Name symbol used for the left top corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_2
Description : Name symbol used for the right top corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_3
Description : Name symbol used for the right bottom corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_4
Description : Name symbol used for the left bottom corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

27
3.3.4 \vertical rectangle

Description
Operator \vertical rectangle defines four new edges associated to four
vertices named by the operator parameters (symbols). Edges are built cir-
cularly taking two consecutive symbols. The first symbol of the parameter
list binds the upper left corner of the square. Second symbol is linked to the
upper right corner, the third one names the lower right corner and the fourth
is associated to the lower left vertex. The type of the four edges created is
border. A fifth parameter is added, it gives the ratio between height and
width of the rectangle. A possibility exists to specify a well known paper
format like ‘dollar’ or ‘A’ (ISO format: √12 ). Numeric ratio is given as a
percentage, 200 means a rectangle as wider as a square and twice taller. If
the ratio value is lesser than 100, a vertical rectangle is still defined with
a height equal to the normal square size but the width is reduce to fit the
ratio.
This operator should only appear within a step block.

Usage

\vertical_rectangle(a, b, c, d, dollar); % a vertical dollar paper


\vertical_rectangle(A, B, C, D, 200); % 2x1 double square size on Y
\vertical_rectangle(A, B, C, D, 50); % 2x1 half square size on X

Formal structure

\vertical_rectangle(VERTEX_1, VERTEX_2, VERTEX_3, VERTEX_4, RATIO);


\vertical_rectangle(VERTEX_1, VERTEX_2, VERTEX_3, VERTEX_4, PAPER_TYPE);

Parameters

VERTEX_1
Description : Name symbol used for the left top corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_2
Description : Name symbol used for the right top corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_3

28
Description : Name symbol used for the right bottom corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

VERTEX_4
Description : Name symbol used for the left bottom corner.
Type : Symbol.
Allowed values : Any vertex identifier not already defined.

RATIO
Description : Percentage between height and width.
Type : Integer.
Allowed values : Any positive integer values (expect zero).

PAPER_TYPE
Description : Name of a predefined paper format.
Type : Symbol.
Allowed values : One of values [A, dollar] .

29
3.4 Geometrical operators
Geometrical operators are the mathematical kernel of Doodle. Indeed, they
allow to compute new points from other according to mathematical rules
(such as parallel, angle bisection, projection etc. . . ). All following operators
have only effects on internal data structures (creation of new elements or
modification of existent ones).

3.4.1 Vertex cloning


This operation is not properly an operator (in the functional sense) but
rather an operation in the arithmetic sense. Indeed, It can be sometimes
helpful to duplicate a vertex to save its coordinates or when vertices share
a position. Applying this cloning operation has the effect to create a new
vertex (left-hand operand of operation) with the internal data of the right-
hand operand (physical coordinates and shifting values). The name of this
new vertex is set according to the symbol used in the operation (left-hand
operand). Of course this name shouldn’t be already used for an existing
vertex.
This operator should only appear within a step block.

Usage

aa = a; % aa is defined as the a clone

Formal structure

RETURN_VERTEX = VERTEX;

Parameters

VERTEX
Description : Indicates the vertex which is cloned.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

Return value

RETURN_VERTEX
Description : Symbol reference of the new vertex created as
the clone of VERTEX.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined.

30
3.4.2 \fraction

Description
Operator \fraction is an extension of the \middle operator (cf. §3.4.6).
It allows to define a new vertex as a given fraction of segment defined by its
two extremities. The two parameters are symbols representing two vertices.
This is not mandatory that an edge defined with those two vertices actually
exists.
This operator should only appear within a step block.

b
a ab4

cd5_4 

c
d

Figure 1: Example of operator \fraction

Usage

ab4 = \fraction(a, b, 1, 4);


cd5_4 = \fraction(c, d, 5, 4);% cd5_4 doesn’t belong to segment [c,d]

Formal structure

RETURN_VERTEX = \fraction(VERTEX_1, VERTEX_2, NUMERATOR, DENOMINATOR);

Parameters

VERTEX_1
Description : Indicates the first vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

31
VERTEX_2
Description : Indicates the second vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

NUMERATOR
Description : Indicates the upper integer of the fraction.
Type : integer.
Allowed values : Any integer.

DENOMINATOR
Description : Indicates the lower interger of the rational.
Type : integer.
Allowed values : Any integer value excepted zero.

Return value

RETURN_VERTEX
Description : Symbol reference of the new vertex created as
fraction of both others.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined.

Conditions

• Vertex defined by VERTEX 1 should not be equivalent to the one de-


scribed by VERTEX 2 (for information about vertices equivalence cf.
§2.3.1).

• DENOMINATOR not equal to zero.

32
3.4.3 \inter cut

Description
As its name indicates this operator is a short-cut of two other ones:

• \intersection (cf. §3.4.4 page 35)

• \cut(cf. §3.5.2 page 70)

Geometrical operator, \inter cut returns the intersection vertex of two


edges given in parameter. Its second effect is to break the first edge pa-
rameter at the intersection point. So after the application of \inter cut a
new point is added to vertex data base (returned vertex), first parameter is
modified and a new edge is created as the second part of the original broken
edge.
Operator \inter cut is useful to prepare elements before moving points
(application of a real fold). All edges intersecting the fold line should be cut
to make move.
This operator should only appear within a step block.

ab1 

a b

da2

o1
d cd2
cd1 c

Figure 2: Example of operator \inter cut. Edge [ab1,


cd1] no longer exists and edges [ab1, o1] and [o1, cd1] are
created.

Usage

\step {
\square(a, b, c, d);
ab1 = \fraction(a, b, 30, 100);
cd1 = \perpendicular([c, d], ab1);

33
\fold(ab1, cd1);
da2 = \middle(d, a);
cd2 = \middle(c, d);
\valley_fold(da2, cd2);
o1 = \inter_cut([ab1, cd1], [da2, cd2]);
}

Formal structure

RETURN_VERTEX = \inter_cut(EDGE_1, EDGE_2);

Parameters

EDGE_1
Description : Indicates the first segment.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

EDGE_2
Description : Indicates the second segment.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

Return value

RETURN_VERTEX
Description : New vertex intersection of both segments
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier not already defined

Conditions

• Edges should not be parallel.

34
3.4.4 \intersection

Description
Geometrical operator \intersection returns the intersection vertex of
two edges given in parameter. This operator has the two equivalent syntaxes
taking:

1. four vertex symbols,

2. two edges.

First syntax is a compact form which can be ambiguous or at least not


very clear for beginners. The second one using edge notation can be easier
to understand. Nevertheless, the intersection is made with lines instead of
edges, this way the resulting point may not belong to the given edges.
This operator should only appear within a step block.

a b

d


Figure 3: Point o is built as the intersection of both diago-


nals

Usage

o = \intersection(a, c, b, d); % same as below but shorter ...


o = \intersection([a, c], [b, d]);

Formal structure

RETURN_VERTEX = \intersection(VERTEX_1, VERTEX_2, VERTEX_3, VERTEX_4);


RETURN_VERTEX = \intersection(EDGE_1, EDGE_2);

35
Parameters

VERTEX_1
Description : Indicates the first vertex of the first segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the second vertex of the first segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_3
Description : Indicates the first vertex of the second segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_4
Description : Indicates the second vertex of the second segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

EDGE_1
Description : Indicates the first segment.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

EDGE_2
Description : Indicates the second segment.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

Return value

RETURN_VERTEX
Description : New vertex intersection of both segments
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier not already defined

Conditions

• Vertex defined by VERTEX 1 should not be equivalent to the one de-


scribe by VERTEX 2.

36
• Vertex defined by VERTEX 3 should not be equivalent to the one de-
scribe by VERTEX 4.

• Edges should not be parallel.

37
3.4.5 \line to line

Description
\line to line is a geometrical operator which allows to create one new
vertex or two by making an edge meets an other. Suppose we want to
create such a fold. We have to know what are the points to give to the fold
operation. \line to line gives us those points. In such operations, we are
only looking for points belonging to certain edges of the figure. In fact there
are two different syntaxes for this operator:

1. taking four edges and returning a pair of vertices,

2. taking three vertices and one edge and returning one vertex.

a mid_ab a a2 b


c 

c
d mid_cd d

Figure 4: Computing both opposite edge middles and a bi-


section case (22.5 degrees)

The first syntax is used when there is no defined intersection between


both lines. In this case, the computation procedure is to calculate intersec-
tions of the median line (between two given edges) and the others. The two
first parameters are edges to calculate median line, and both last are edges
on which we expect to find intersection with this median line. The returned
vertices pair is bounded respectively to each intersection found with both
last edges.
The second syntax allows to compute the intersection of the bisector
line and a given edge. The bisector line is obtained according to the three
vertices parameters.
Edge parameters are given according to edge syntax ([ ]) but it doesn’t
impose that a line has been defined for those edges. It is just to make the

38
operator more readable and not ambiguous. The only condition is that edge
vertices are not equivalent.
This operator should only appear within a step block.

Usage

[mid_ab, mid_cd] = \line_to_line([a,d], [b,c], [a, b], [c, d]);


a2 = \line_to_line(d, a, b, [a,b]);

Formal structure

[RETURN_V_1, RETURN_V_2]=\line_to_line(EDGE_1, EDGE_2, EDGE_3, EDGE_4);


RETURN_VERTEX = \line_to_line(VERTEX_1, VERTEX_2, VERTEX_3, EDGE);

Parameters

EDGE_1
Description : Indicates the first segment to calculate median line.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

EDGE_2
Description : Indicates the second segment to calculate median line.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.
EDGE_3
Description : Indicates the first intersection segment.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

EDGE_4
Description : Indicates the second intersection segment.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

VERTEX_1
Description : Indicates segments common intersection.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the end of the first segment.
[VERTEX_1, VERTEX_2] is the first segment.

39
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_3
Description : Indicates the end of the second segment.
[VERTEX_1, VERTEX_3] is the second segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

EDGE
Description : Indicates the intersection segment.
Type : Edge, vertex identifier pair.
Allowed values : Any vertex identifier pair previously defined.

Return value

RETURN_V_1
Description : New vertex, first intersection of median
line and EDGE_3 parameter.
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier not already defined

RETURN_V_2
Description : New vertex, second intersection of median
line and EDGE_4 parameter.
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier not already defined

RETURN_VERTEX
Description : New vertex intersection of bisector line
and EDGE parameter.
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier not already defined

40
3.4.6 \middle

Description
Operator \middle defines a new vertex as middle of segment given by its
two extremities. The two given parameters are symbols representing two
vertices. This is not mandatory that an edge defined with those two vertices
actually exists.
This operator should only appear within a step block.

a ab2 b

d
c

Figure 5: Point ab2 is built as the middle of edge [a, b]

Usage

ab2 = \middle(a,b);

Formal structure

RETURN_VERTEX = \middle(VERTEX_1, VERTEX_2);

Parameters

VERTEX_1
Description : Indicates the first vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the second vertex of the segment.

41
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

Return value

RETURN_VERTEX
Description : New vertex middle of given other vertices
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier not already defined

Conditions

• Vertex defined by VERTEX 1 should not be equivalent to the one de-


scribe by VERTEX 2 (equivalence notion is explains in 2.3.1).

42
3.4.7 \move

Description
\move isn’t a vertex or edge creator but only a vertex modification opera-
tor. It allows to change one vertex internal coordinates. It has two different
syntaxes whether the destination vertex exists or not. Its first parameter is
always the name of the point we want to move. Other parameters depend
of the context:

syntax 1 a destination vertex. Coordinates of the moving point become those


of this vertex,

syntax 2 an edge. Coordinates of the moving point become those of its sym-
metric through this edge.

This operator is useful to present the result of a fold. Next figure presents
the result of the bisection of a square diagonal. The source code to obtain
this figure is given in the next section.

v1

a


c
d

Figure 6: Example of operator \move

Usage
\square(a, b, c, d);
v1 = \line_to_line(b, a, d, [a, d]);
\cut([a, d], v1); % fold cut the orignal edge
\move(a, [v1, b]); % effective paper move
\border(v1, b); % fold line becomes border
\fill(back, v1, b, a); % we see now a part of the back side

43
Formal structure

\move(SRC, DEST);
\move(SRC, EDGE);

Parameters

SRC
Description : Source vertex.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

DEST
Description : Destination vertex.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

EDGE
Description : Indicates the symmetry axis to compute
destination point.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers previously defined.

44
3.4.8 \parallel

Description
Operator \parallel is a geometrical operator. It is used to define a
line parallel to another meeting a particular point. It takes the following
parameters:
• the reference line to build its parallel,
• the starting point of the new line,
• the line defining end of the new line.
The following figure (7) presents an example of this operator. The code to
obtain this result can be found in the next section. The bisector of the half
square triangle defines the mark (v1) on which a parallel to the diagonal
[d, b] should pass.

This operator should only appear within a step block.

v2
a b

v1

c


Figure 7: Example of operator \parallel

Usage
v1 = \line_to_line(b, a, d, [a, d]); % bisector definition
v2 = \parallel([d, b],v1, [a, b]); % found other extermity
\valley_fold(v1, v2); % make valley fold line

Formal structure
RETURN_VERTEX = \parallel(EDGE, VERTEX, LIMIT_EDGE);

45
Parameters

EDGE
Description : Indicates the edge reference to build its
parallel line.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already.

VERTEX
Description : Indicates the vertex origin of the parallel
line.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

LIMIT_EDGE
Description : Indicates the new parallel line limit.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.

Return value

RETURN_VERTEX
Description : New vertex intersection of parallel line
and LIMIT_EDGE.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined.

Conditions

• length of EDGE shouldn’t be null.

46
3.4.9 \perpendicular

Description
Operator \perpendicular is a geometrical operator. It is used to define
a perpendicular line to another meeting a particular point. Principle of this
operator is to compute a new point such as the line defined by this point
and the point given in parameter is orthogonal to the given line. There are
two syntaxes whether the new created point belongs to the given reference
line.
The following figure (8) presents an example of this operator. The code
to obtain this result can be found in the next section. In this example there
are three instances of operator \perpendicular to compute respectively
v2, v3 and v4. Both first use the first syntax because points searched be-
long to the base line. v4 belongs to [d, c] so this line should be given to
the operator. It can be noted that in the former case, the use of operator
\intersection could get v4 as the intersection of segment [v3, a] and
[d, c].

This operator should only appear within a step block.

b
v2

v3


v1

c
d v4

Figure 8: Examples of operator \perpendicular

Usage

v2 = \perpendicular([v1, b], c);


v3 = \perpendicular([v1, b], a);
v4 = \perpendicular([v1, b], a, [d, c]);

47
Formal structure

RETURN_VERTEX = \perpendicular(EDGE, VERTEX);


RETURN_VERTEX = \perpendicular(EDGE, VERTEX, LIMIT_EDGE);

Parameters

EDGE
Description : Indicates the reference edge to build its
orthogonal line.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers previously defined.

VERTEX
Description : Indicates the vertex origin of the
perpendicular line.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

LIMIT_EDGE
Description : Indicates the new orthogonal line limit.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.

Return value

RETURN_VERTEX
Description : New vertex intersection of new orthogonal
line and LIMIT_EDGE.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not yet defined.

Conditions

• length of EDGE shouldn’t be null.

• EDGE and LIMIT EDGE shouldn’t be perpendicular.

48
3.4.10 \point to line

Description
Operator \point to line is a geometrical operator. It is useful to define
points to draw a fold (mountain or valley) line. It allows to get vertices of
a frequent origami fold, when a corner (or a general vertex) comes to a line.
\point to line takes two points:

1. moving vertex,

2. pivot vertex

and also two edges:

1. the edge on which the point has to arrive,

2. the edge on which the intersection with fold line is found.

In fact, there are always two theoric solutions to set the moving point in the
given edge (a segment can have up to two intersections with a circle). A last
parameter can be given to specify if it is the first or the second intersection
point met we want to consider. This parameter can be omitted, in this case
the first intersection found around the circle is kept.
The return vertex is the intersection of the fold line and the given last
edge.
This operator should only appear within a step block.

Usage

f = \point_to_line(i, o, [da, bc], [da, i]); % fig 9 left


s = \point_to_line(i, o, [da, bc], [ab, b], second); % fig 9 left
i2 = \point_to_line(i1, d, [c, d], [b, c], second); % fig 9 right

Formal structure

RETURN_VERTEX = \point_to_line(MOVING, PIVOT, LIMIT_EDGE, EDGE, WHICH);

Parameters

MOVING
Description : Moving vertex.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.
PIVOT

49
ab s ab b



i1
f i 

i2


o 

bc
da da

d
d


c 

Figure 9: left: On this figure one can see both usages


of \point to line showing both intersections of the circle
made by i around o and the edge [da, bc].
right: Bringing i1 on edge [c, d] using d as pivot. Note
that one have to specified the second intersection with [d,
i2] anticlockwise.

Description : Pivot vertex. Movement circle radius is


[MOVING, PIVOT].
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.
LIMIT_EDGE
Description : Indicates the movement segment limit.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined in a previous step.
EDGE
Description : Indicates the edge on which intersection with
fold line can be found.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined in a previous step.
WHICH (optional)
Description : Flag indicates which point the operator returns.
Type : Symbol.
Allowed values : One of [first, second].
Default value : first.

Return value

50
RETURN_VERTEX
Description : New vertex intersection of fold line and EDGE.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined.

Conditions

• EDGE should have intersection with moving circle (PIVOT, [PIVOT,


MOVING]).

51
3.4.11 \point to point

Description
Operator \point to point is a geometrical operator. It is useful to define
points to draw fold (mountain or valley) line. It allows to get vertices of
a frequent origami operation; when a corner (or a general point) comes to
another point. \point to point takes two points:
1. moving vertex,
2. destination vertex
and also two edges:
1. the edge on which the first intersection with fold line is found,
2. the edge on which the second intersection with fold line is found.

ab b
a

i2

i1

d cd c

Figure 10: Example of the operator \point to point. Note


that this operator does not return an edge but a couple of
vertices, on this figure, we have explicitly add a valley fold
using those points

Usage
[i1, i2] = \point_to_point(c, ab, [d, a], [b, c]);

Formal structure
[RETURN_V_1, RETURN_V_2] = \point_to_point(MOVING, DEST, EDGE_1, EDGE_2);

52
Parameters

MOVING
Description : Moving vertex.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.
DEST
Description : Destination vertex.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.
EDGE_1
Description : Indicates the edge on which second intersection with
fold line can be found.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.
EDGE_2
Description : Indicates the edge on which second intersection with
fold line can be found.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.

Return value

RETURN_V_1
Description : New vertex, first intersection of fold
line and EDGE_1 parameter.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined

RETURN_V_2
Description : New vertex, second intersection of fold
line and EDGE_2 parameter.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined

Conditions

• MOVING should not be equivalent to DEST (equivalence notion is ex-


plains in 2.3.1),

• edge formed by MOVING and DEST should not be orthogonal with EDGE 1
nor EDGE 2,

53
• length of EDGE 1 and EDGE 2 should not be null.

54
3.4.12 \rabbit ear

Description
The geometrical operator \rabbit ear has been designed to help users to
make the special fold usually called ”rabbit ear ”. The fold uses a triangle.
The goal is to make three (usually valley) folds and one inverse fold (if the
first three are valley folds the last is a mountain one). Each of the first three
folds starts from a corner of the triangle and ends to a common intersection.
This point is often the intersection of the three bisectors of each corner but
can also be any given point inside the triangle.
As for other geometrical operators the goal is not to draw the result of
the fold but to compute the new vertices needed to draw the fold lines. The
goal of this operator is to provide a geometrical tool to compute how the last
fold has to be done. In our case, there are two different syntaxes whether
the common intersection of the three first folds is given or not. If this point
is not given, we qualify the case as regular, which in fact is the most frequent
case. In this situation, this common point is defined as the intersection of
the three bisectors and it will be returned by the operator. In the second
syntax (the goofy one), this point is given by user and already exists and it
is not returned.
The last fold of the rabbit ear is what we are looking for; it starts from
the common intersection of the three first folds and ends intersecting one
of the three edge defining the initial triangle or another given edge. This
latter point is the second point (or the only one) computed and returned by
\rabbit ear.
Inputs of this operator are:
• three vertices (defining the triangle, the rabbit ear fold reduces),

• the common intersection (optional),

• an edge, on which the searched vertex is expected (also optional).


So, as we can see one has to provide at least three vertex names as input
of \rabbit ear. Those points are not equivalent:
• the first one is the moving point of the rabbit ear fold. It is the point
one grabs to make the fold.

• the second one can be called the destination point even if it gives only
a direction rather than an exact position. This point indicates the
direction the moving point takes during the fold.

• the third one is the last point defining the rabbit ear triangle.
Outputs of this operator can be:

55
• two new vertices (regular case),

• one new vertex (goofy case).

For the first case, the couple of returned vertices are given as extremities
of an edge, but there are not an edge. It is just for convenient reasons as for
the \line to line operator for instance (cf. §3.4.5). Keep in mind that in
this case, the output of this operator is not an edge but a couple of points.
Nevertheless, this couple of points can also be seen as the last (mountain)
fold described before, even if the physical edge has not been added to the
edges data base. The order of vertices is important, the first one is the
searched point located on one of the edge of the triangle and second one is
the common center of the triangle.
Concerning the second syntax case, there is only one returned vertex
because the common center has be given as a parameter.

This operator should only appear in a step block.

d 

o1
b

bc

Figure 11: Example of a regular usage of the operator


\rabbit ear.
[bc, o1] = \rabbit ear(b, c, a);
Point b is the moving point and it goes in the direction of the
point c during the fold. As the common intersection has not been
given it is computed as the intersection of the three bisectors. This
point is o1 in the figure. The searched point bc is located on the
edge [b, c] since the edge parameter has been omitted.
On the right the result of the fold is presented.

56
a


ab
b

bc


d 

Figure 12: Example of a goofy usage of the operator \rabbit ear.


bc = \rabbit ear(c, ab, d, o, [b, c]);
Here, the common end of the three first valley fold is given. This
point o is the center of the initial square (intersection of both
diagonals). Moving point c goes in the direction of ab which is
the middle point of the edge [a, b]. The searched point should
be located on [b, c] which is not an edge defining the rabbit ear
triangle.
On the right the result of the fold is presented.

Usage
[bc, o1] = \rabbit_ear(b, c, a); % the simplest rabbit ear definition
bc = \rabbit_ear(c, ab, d, o, [b, c]); % o is the square center

Formal structure
[VERTEX, CENTER_O] = \rabbit_ear(MOVING, DEST, VERTEX_3, EDGE);
[VERTEX, CENTER_O] = \rabbit_ear(MOVING, DEST, VERTEX_3);
VERTEX = \rabbit_ear(MOVING, DEST, VERTEX_3, CENTER_I, EDGE);
VERTEX = \rabbit_ear(MOVING, DEST, VERTEX_3, CENTER_I);

Parameters
MOVING
Description : The corner of the triangle that moves during the
fold.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

57
DEST
Description : One of both other points (than MOVING) of
the triangle to indicate the direction of
the rabbit ear.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_3
Description : Third triangle corner vertex.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

CENTER_I
Description : The vertex which is the intersection of the first
three folds of the rabbit ear.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

EDGE (optional)
Description : The edge on which VERTEX should be found.
Type : Edge, couple of vertex identifier.
Allowed values : Any couple of vertex identifiers
previously defined.
Default value : [MOVING, DEST].

Return value
VERTEX
Description : The searched vertex located on EDGE.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined.

CENTER_O
Description : The intersection of three bisectors of the
rabbit ear triangle.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined.

Conditions
• MOVING, DEST and VERTEX 3 should not be equivalent (equivalence no-
tion is explains in 2.3.1) and not aligned,
• CENTER I should be located inside the triangle.

58
3.4.13 \shift

Description
Operator \shift provides the way to represent diagrams in pseudo 3D.
Classically, diagrams show each sheet layer separately such as diagrams were
drawn with some perspective angle. Sometimes it’s even useful to draw
graphical elements as it cannot be seen in reality. For this reason, a real and
computed 2D projection of a 3D geometrical representation of the model
can limit the expressiveness of the Doodle language. We think it’s better to
let user express a fake 3D as he wants.

In this approach, the user’s work is bigger than in the automated way
even if there is no physic limitations. In order to reduce this effort the
\shift operator has been introduced. Its goal is to modify the visual coor-
dinates of a particular vertex. With the vertex to shift this operator takes
two values related to each geometrical axis (first for the horizontal one and
the second for the vertical one). \shift locally changes a vertex position
using two little relative values expressed in millimeter (can be float values).
The coordinates don’t change internally, the change is only visual but ge-
ometrical operations (even the future ones) such as intersection, symmetry
etc. . . use the shifted coordinates to reflect the visual reality.

In fact, if a shifted point is used into an geometrical operation to produce


a new point, this new vertex has its physical coordinates computed such as
the shifted point wasn’t shifted and the system computes also shifting val-
ues to reflect the geometrical operation in the visual world. Indeed, if the
system wouldn’t compute this former values the result of the geometrical
operator would be confusing.
The right figure below highlights one of those situation.

This operator should only appear in a step block.

Usage

\shift(a, 4, 0); % draw point ’a’ 4mm right to its real position.

Formal structure

\shift(VERTEX, DX, DY);

59
a
b


c aa
a

d
b
d


Figure 13: Left: Example of the operator \shift. Point a and


point c have internally the same position. The a coordinates have
been set in this case with a \move(a,c); operator. Note that
this operator does not handle edges masking, on this figure we
have explicitly redraw edge [a, d] using edge [c, b] as limit (cf.
§3.5.1).
Right: This figure is surely useless but it presents the case of a
geometrical operator producing a new vertex using a shifted point.
c has been shift by 1cm to the left but in fact its physical position
hasn’t be modified. The new vertex aa is defined as the symmetric
of c through edge [d, b]. The internal position is equivalent to one
of a, but since a is no longer the visual symmetric of c through
edge [d, b] due to the shift operation, Doodle computes aa shifting
values to draw aa correctly. If user unshifts the vertex aa it will
be drawn in the a position.

Parameters

VERTEX
Description : Indicates the vertex which is shifted.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

DX
Description : Indicates the horizontal relative shift.
Type : Integer (millimeter).
Allowed values : Any integer value are allowed.

DY
Description : Indicates the vertical relative shift.

60
Type : Integer (millimeter).
Allowed values : Any integer value are allowed.

61
3.4.14 \symmetry

Description
Operator \symmetry allows the creation of a new point as the symmetric
of its first parameter through an axis (second parameter). The second pa-
rameter is an edge (represented as a couple of vertices with brackets ([ ]),
but this syntaxic form does not means that the couple of vertices represents
an existing edge in the edge internal data, it is just to make the operator
more readable and not ambiguous. The only condition is that vertices are
not equivalent.
This operator should only appear in a step block.

ab
a 

da


bc

c
d cd

Figure 14: bc is built as the symmetrical point of da


through edge [ab, cd]

Usage

bc = \symmetry(da, [ab, cd]);

Formal structure

\symmetry(VERTEX, EDGE);

Parameters

VERTEX
Description : Vertex which has to be symmetrized.
Type : Symbol, vertex identifier.

62
Allowed values : Any vertex identifier previously defined.
EDGE
Description : Indicates the symmetry axis.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined in a previous step.

Return value

RETURN_VERTEX
Description : New vertex symmetric of given VERTEX through EDGE.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier not already defined.

Conditions

• length of EDGE should not be null.

63
3.4.15 \unshift

Description
\unshift is used to cancel some 3D visual effects previously set by the
operator \shift (cf. §3.4.13). It has two syntaxic forms whether one wants
a global application or not:

• without any parameter. All vertices contained in the Doodle database


is updated to remove its shifting values.

• with a list of vertex names list. Only those points will be affected and
their shifting values will be reset.

The second form (explicit vertex targeting) could be replaced by a se-


quence of operator \shift(..., 0, 0) which is another way to reset the
shifting values.

Usage

\unshift; % All points previously defined are affected


\unshift(c, ab2); % only c and ab2 are reseted

Formal structure

\unshift;
\unshift(VERTICES_LIST);

Parameters

VERTICES_LIST : All vertices to reset.


Type : List of vertex symbols.
Allowed values : Any sequence of vertex identifiers already
defined in previous steps.

64
3.5 Line operators
Operators described in following sections are designed to draw the lines of
diagram. Those lines can be fold lines identified with their patterns or paper
border lines. Operator \cut is considered as a line opertor in the sense that
it creates a new edge element.

3.5.1 \border

Description
\border is one of the edge creation operators. It allows user to define a
new border edge. Border edges are displayed as black double width line.
As other edge operators (for example \valley fold cf. §3.5.5) \border has
mainly a pair of symbol parameters; they represent two vertices which are
the extremities of the created edge. As others fold operators \border is
opportunist. It only creates a new edge stored in the internal edge structure
if there isn’t yet an edge (whatever its type) defined with the same two
vertices.
In fact, all line operators (except \cut cf. §3.5.2) are built on the same
scheme. They can take two additional parameters to indicate visual limit
for each extremities of the line. Indeed, both first parameters represent the
physical vertices limit of the new edge, but it is often useful to draw only a
portion of the entire edge. Thus, you can imagine that a certain part of the
line around of each extremity is hidden as if the line was defined shorter. We
will see further that one can also draw a longer line than the real distance
separating both vertices.
There are two different ways to express each extremity:

• the edge visible end is obtained by a percentage of the total length,

• the edge visible end is obtained by intersection with another edge.

In the first case, an integer percentage is given as an extra parameter.


If both limits are computed with percentages, \border operator ends with
two integer values which respectively represent the part hidden around the
first and second vertex. For example, suppose you want to make a pinch
around the first point, you will set the first value (third parameter) to 0 and
the second one (fourth parameter) to 80 or 90.
The second case presented above allows to easily define partial lines.
Indeed, the goal is to hide a part of an edge but we want that new edge ends
exactly on a particular edge (which often represents a paper layer). Finding
which percentage of the total length it correspond is quite impossible. Line
operators can thus take edges to indicate each extremity limit.

65
For both limit determination ways, the way to draw a new edge is the
same. Knowing both real end vertices, Doodle computes the first and second
limit according to the third and fourth parameter (integer or edge) and make
a line between those computed points. This way, it is impossible to draw
two parts of an unique edge, there is always just one line drawn for an edge.
If one uses negative percentage the drawn line is longer than the real
one. Continuing our first example of the pinch, it’s often useful to extend
the line beyond the real end point to make the diagram clearer. In case the
third parameter is not set to 0 but to -15 or -25.
Percentage and edge limits can be mixed into a same edge definition (as
shown in the third and fourth syntax form below). There are two forms
whether the edge limit concerns the first point or the second one.

This operator should only appear within a step block.

a


ab1 

ab3 b

ad2 bc2

dc3 c
d dc1

Figure 15: Result of three border line operators as defined


in the usage paragraph

Usage

\border(ab1, dc1);
\border(ab3, dc3, -10, -10); % line longer than real one
\border(ad2, bc2, [ab1, dc1], [ab3, dc3]);

Formal structure

\border(VERTEX_1, VERTEX_2);
\border(VERTEX_1, VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE);
\border(VERTEX_1, VERTEX_2, EDGE_1, V2_PERCENTAGE);

66
\border(VERTEX_1, VERTEX_2, V1_PERCENTAGE, EDGE_2);
\border(VERTEX_1, VERTEX_2, EDGE_1, EDGE_2);

Parameters

VERTEX_1
Description : Indicates the first vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the second vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

V1_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_1.
Type : Integer.
Allowed values : Any value.
Default value : 0.

V2_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_2.
Type : Integer.
Allowed values : Any value.
Default value : 0.

EDGE_1 (optional)
Description : Indicates the limit edge close to VERTEX_1. The
blank part starts at VERTEX_1 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_1.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

EDGE_2 (optional)
Description : Indicates the limit edge close to VERTEX_2. The
blank part starts at VERTEX_2 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_2.

67
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

68
Conditions

• VERTEX 1 and VERTEX 2 should not be equivalent (see 2.3.1).

• The sum of V1 PERCENTAGE and V2 PERCENTAGE should be lesser than


to 100.

69
3.5.2 \cut

Description
Operator \cut breaks an existing edge into two parts with an intermediate
vertex. A control is made to insure that the edge parameter really exists in
the internal data but the system does not require that the second parameter
(the vertex) geometrically belongs to the edge. Two new edges are created
defined with each of the edge extremity and the vertex. The original edge
is replaced in the internal structures by one of the new edges, the second
one is created and inserted. Thus, the original edge does not exist anymore
in the internal structures and can’t be used by another operator. This cut
operation is often associated with the hide operator (cf. §3.8.1) for instance
after a valley fold when the top layer hide some existing graphical elements.
This operator should only appear in a step block.

Usage

\cut([a, b], ab2); % delete [a,b] and created its two half segments

Formal structure

\cut(EDGE, VERTEX);

Parameters

EDGE
Description : Indicates the edge to cut.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined as an edge in a previous step.

VERTEX
Description : Break vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

Conditions

• EDGE should be already defined in the edges internal data.

70
3.5.3 \fold

Description
\fold is one of the edge creation operators. It allows user to define a new
fold edge. Fold edges are displayed as incomplete black thin lines (which
don’t reach extremities vertices). Like other edge operators (for example
\valley fold cf. §3.5.5) \fold is defined by two vertices which are the
extremities of the created edge. Usually, folds are automatically created at
the beginning of a new step by changing the type of valley or mountain folds
set in the previous step. Sometimes, it can be useful to redefine an existing
fold which has been cut in many parts (cf. §3.5.2) due to the application of
folds.
As others fold operators \fold is opportunist. It only creates a new edge
stored in the internal edge structure if there isn’t yet an edge (whatever its
type) defined with the same two vertices.
In fact, all line operators (except \cut cf. §3.5.2) are built on the same
scheme. They can take two additional parameters to indicate visual limit
for each extremities of the line. Indeed, both first parameters represent the
physical vertices limit of the new edge, but it is often useful to draw only a
portion of the entire edge. Thus, you can imagine that a certain part of the
line around of each extremity is hidden as if the line was defined shorter. We
will see further that one can also draw a longer line than the real distance
separating both vertices.
There are two different ways to express each extremity:

• the edge visible end is obtained by a percentage of the total length,

• the edge visible end is obtained by intersection with another edge.

In the first case, an integer percentage is given as an extra parameter. If


both limits are computed with percentages, \fold operator ends with two
integer values which respectively represent the part hidden around the first
and second vertex. For example, suppose you want to make a pinch around
the first point, you will set the first value (third parameter) to 0 and the
second one (fourth parameter) to 80 or 90.
The second case presented above allows to easily define partial lines.
Indeed, the goal is to hide a part of an edge but we want that new edge ends
exactly on a particular edge (which often represents a paper layer). Finding
which percentage of the total length it correspond is quite impossible. Line
operators can thus take edges to indicate each extremity limit.
For both limit determination ways, the way to draw a new edge is the
same. Knowing both real end vertices, Doodle computes the first and second
limit according to the third and fourth parameter (integer or edge) and make

71
a line between those computed points. This way, it is impossible to draw
two parts of an unique edge, there is always just one line drawn for an edge.
If one uses negative percentage the drawn line is longer than the real
one. Continuing our first example of the pinch, it’s often useful to extend
the line beyond the real end point to make the diagram clearer. In case the
third parameter is not set to 0 but to -15 or -25.
Percentage and edge limits can be mixed into a same edge definition (as
shown in the third and fourth syntax form below). There are two forms
whether the edge limit concerns the first point or the second one.

This operator should only appear within a step block.

Usage

\fold(b, ab2);

Formal structure

\fold(VERTEX_1, VERTEX_2);
\fold(VERTEX_1, VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE);
\fold(VERTEX_1, VERTEX_2, EDGE_1, V2_PERCENTAGE);
\fold(VERTEX_1, VERTEX_2, EDGE_1, EDGE_2);

Parameters

VERTEX_1
Description : Indicates the first vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the second vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.
V1_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_1.
Type : Integer.
Allowed values : Any value.
Default value : 5.

V2_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we

72
have to left blank close to VERTEX_2.
Type : Integer.
Allowed values : Any value.
Default value : 5.

EDGE_1 (optional)
Description : Indicates the limit edge close to VERTEX_1. The
blank part starts at VERTEX_1 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_1.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

EDGE_2 (optional)
Description : Indicates the limit edge close to VERTEX_2. The
blank part starts at VERTEX_2 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_2.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

Conditions

• VERTEX 1 and VERTEX 2 should not be equivalent (see 2.3.1).

• The sum of V1 PERCENTAGE and V2 PERCENTAGE should be lesser than


to 100.

73
3.5.4 \mountain fold

Description
Operator of fold. This operator allows user to mark a mountain fold
between two defined vertices. The mountain line style is a dot-dot-dash
line. The implicit result of this operator is the addition of a new mountain
edge to the global edge structure. Two optional parameters can be added
to allow user to define pinch. User gives percentages of total length of blank
for both extremities. Each percentage given can be negative to make the
fold line be larger than the original edge defined between both vertices. It
can be useful when fold is very short or if the fold is hide by a paper layer
(note that for define a fold under a layer the \xray fold can be used cf.
§3.5.6).
As others fold operators \mountain fold is opportunist. It only creates
a new edge stored in the internal edge structure if there isn’t yet an edge
(whatever its type) defined with the same two vertices.
In fact, all line operators (except \cut cf. §3.5.2) are built on the same
scheme. They can take two additional parameters to indicate visual limit
for each extremities of the line. Indeed, both first parameters represent the
physical vertices limit of the new edge, but it is often useful to draw only a
portion of the entire edge. Thus, you can imagine that a certain part of the
line around of each extremity is hidden as if the line was defined shorter. We
will see further that one can also draw a longer line than the real distance
separating both vertices.
There are two different ways to express each extremity:

• the edge visible end is obtained by a percentage of the total length,

• the edge visible end is obtained by intersection with another edge.

In the first case, an integer percentage is given as an extra parameter. If


both limits are computed with percentages, \mountain fold operator ends
with two integer values which respectively represent the part hidden around
the first and second vertex. For example, suppose you want to make a pinch
around the first point, you will set the first value (third parameter) to 0 and
the second one (fourth parameter) to 80 or 90.
The second case presented above allows to easily define partial lines.
Indeed, the goal is to hide a part of an edge but we want that new edge ends
exactly on a particular edge (which often represents a paper layer). Finding
which percentage of the total length it correspond is quite impossible. Line
operators can thus take edges to indicate each extremity limit.
For both limit determination ways, the way to draw a new edge is the
same. Knowing both real end vertices, Doodle computes the first and second

74
limit according to the third and fourth parameter (integer or edge) and make
a line between those computed points. This way, it is impossible to draw
two parts of an unique edge, there is always just one line drawn for an edge.
If one uses negative percentage the drawn line is longer than the real
one. Continuing our first example of the pinch, it’s often useful to extend
the line beyond the real end point to make the diagram clearer. In case the
third parameter is not set to 0 but to -15 or -25.
Percentage and edge limits can be mixed into a same edge definition (as
shown in the third and fourth syntax form below). There are two forms
whether the edge limit concerns the first point or the second one.

This operator should only appear within a step block.

Usage

\mountain_fold(B, D); % mountain fold the diagonal


\mountain_fold(B, D, 40, 40); % make a pinch in the middle of the diagonal
\mountain_fold(B, D, 0, -40); % mountain line is larger at D

Formal structure

\mountain_fold(VERTEX_1, VERTEX_2);
\mountain_fold(VERTEX_1, VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE);
\mountain_fold(VERTEX_1, VERTEX_2, EDGE_1, V2_PERCENTAGE);
\mountain_fold(VERTEX_1, VERTEX_2, EDGE_1, EDGE_2);

Parameters

VERTEX_1
Description : Indicates the first vertex of the mountain fold.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the second vertex of the mountain fold.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

V1_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_1.
Type : Integer.
Allowed values : Any value.

75
Default value : 0.

V2_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_2.
Type : Integer.
Allowed values : Any value.
Default value : 0.

EDGE_1 (optional)
Description : Indicates the limit edge close to VERTEX_1. The
blank part starts at VERTEX_1 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_1.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

EDGE_2 (optional)
Description : Indicates the limit edge close to VERTEX_2. The
blank part starts at VERTEX_2 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_2.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

Conditions

• Vertex VERTEX 1 and VERTEX 2 shouldn’t be equivalent (see 2.3.1).

• The sum of V1 PERCENTAGE and V2 PERCENTAGE should be lesser than


to 100.

76
3.5.5 \valley fold

Description
Main operator for building folds. This operator allows user to mark a
valley fold between two defined vertices. The valley line style is a dashed
line. The implicit result of this operator is the addition of a new valley
edge to the global edge structure. Two optional parameters can be added
to allow user to define pinch. User gives percentages of total length of blank
for both extremities. Each percentage given can be negative to make the
fold line be larger than the original edge defined between both vertices. It
can be useful when fold is very short or if the fold is hide by a paper layer
(note that for define a fold under a layer the \xray fold can be used cf.
§3.5.6).
As others fold operators \valley fold is opportunist. It only creates
a new edge stored in the internal edge structure if there isn’t yet an edge
(whatever its type) defined with the same two vertices.
In fact, all line operators (except \cut cf. §3.5.2) are built on the same
scheme. They can take two additional parameters to indicate visual limit
for each extremities of the line. Indeed, both first parameters represent the
physical vertices limit of the new edge, but it is often useful to draw only a
portion of the entire edge. Thus, you can imagine that a certain part of the
line around of each extremity is hidden as if the line was defined shorter. We
will see further that one can also draw a longer line than the real distance
separating both vertices.
There are two different ways to express each extremity:

• the edge visible end is obtained by a percentage of the total length,

• the edge visible end is obtained by intersection with another edge.

In the first case, an integer percentage is given as an extra parameter.


If both limits are computed with percentages, \valley fold operator ends
with two integer values which respectively represent the part hidden around
the first and second vertex. For example, suppose you want to make a pinch
around the first point, you will set the first value (third parameter) to 0 and
the second one (fourth parameter) to 80 or 90.
The second case presented above allows to easily define partial lines. In-
deed, the goal is to hide a part of an edge but we want that new the edge ends
exactly on a particular edge (which often represents a paper layer). Finding
which percentage of the total length it correspond is quite impossible. Line
operators can thus take edges to indicate each extremity limit.
For both limit determination ways, the way to draw a new edge is the
same. Knowing both real end vertices, Doodle computes the first and second

77
limit according to the third and fourth parameter (integer or edge) and make
a line between those computed points. This way, it is impossible to draw
two parts of an unique edge, there is always just one line drawn for an edge.
If one uses negative percentage the drawn line is longer than the real
one. Continuing our first example of the pinch, it’s often useful to extend
the line beyond the real end point to make the diagram clearer. In case the
third parameter is not set to 0 but to -15 or -25.
Percentage and edge limits can be mixed into a same edge definition (as
shown in the third and fourth syntax form below). There are two forms
whether the edge limit concerns the first point or the second one.

This operator should only appear within a step block.

Usage

\valley_fold(A, C); % valley fold the diagonal


\valley_fold(A, C, 40, 40); % make a pinch in the middle of the diagonal

Formal structure

\valley_fold(VERTEX_1, VERTEX_2);
\valley_fold(VERTEX_1, VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE);
\valley_fold(VERTEX_1, VERTEX_2, EDGE_1, V2_PERCENTAGE);
\valley_fold(VERTEX_1, VERTEX_2, EDGE_1, EDGE_2);

Parameters

VERTEX_1
Description : Indicates the first vertex of the valley fold
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the second vertex of the valley fold
Type : Symbol, vertex identifier
Allowed values : Any vertex identifier previously defined.

V1_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_1.
Type : Integer.
Allowed values : Any value.
Default value : 0.

78
V2_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_2.
Type : Integer.
Allowed values : Any value.
Default value : 0.

EDGE_1 (optional)
Description : Indicates the limit edge close to VERTEX_1. The
blank part starts at VERTEX_1 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_1.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

EDGE_2 (optional)
Description : Indicates the limit edge close to VERTEX_2. The
blank part starts at VERTEX_2 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_2.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

Conditions

• Vertex VERTEX 1 and VERTEX 2 shouldn’t be equivalent (see 2.3.1).

• The sum of V1 PERCENTAGE and V2 PERCENTAGE should be lesser than


100.

79
3.5.6 \xray fold

Description
\xray fold is one of the edge creation operators. It allows user to define
a new xray edge. Xray edges are displayed as black dotted line. As other
edge operators (for example \valley fold cf. §3.5.5) \xray fold has a pair
of symbol parameters; they represent two vertices which are the extremities
of the created edge. As others fold operators \xray fold is opportunist. It
only creates a new edge stored in the internal edge structure if there isn’t
yet an edge (whatever its type) defined with the same two vertices.
In fact, all line operators (except \cut cf. §3.5.2) are built on the same
scheme. They can take two additional parameters to indicate visual limit
for each extremities of the line. Indeed, both first parameters represent the
physical vertices limit of the new edge, but it is often useful to draw only a
portion of the entire edge. Thus, you can imagine that a certain part of the
line around of each extremity is hidden as if the line was defined shorter. We
will see further that one can also draw a longer line than the real distance
separating both vertices.
There are two different ways to express each extremity:

• the edge visible end is obtained by a percentage of the total length,


• the edge visible end is obtained by intersection with another edge.

In the first case, an integer percentage is given as an extra parameter. If


both limits are computed with percentages, \xray fold operator ends with
two integer values which respectively represent the part hidden around the
first and second vertex. For example, suppose you want to make a pinch
around the first point, you will set the first value (third parameter) to 0 and
the second one (fourth parameter) to 80 or 90.
The second case presented above allows to easily define partial lines. In-
deed, the goal is to hide a part of an edge but we want that the new edge ends
exactly on a particular edge (which often represents a paper layer). Finding
which percentage of the total length it correspond is quite impossible. Line
operators can thus take edges to indicate each extremity limit.
For both limit determination ways, the way to draw a new edge is the
same. Knowing both real end vertices, Doodle computes the first and second
limit according to the third and fourth parameter (integer or edge) and make
a line between those computed points. This way, it is impossible to draw
two parts of an unique edge, there is always just one line drawn for an edge.
If one uses negative percentage the drawn line is longer than the real
one. Continuing our first example of the pinch, it’s often useful to extend
the line beyond the real end point to make the diagram clearer. In case the
third parameter is not set to 0 but to -15 or -25.

80
Percentage and edge limits can be mixed into a same edge definition (as
shown in the third and fourth syntax form below). There are two forms
whether the edge limit concerns the first point or the second one.

It differs to other edge operators because xray created edge is removed


from edge internal data during the initialization of the next step block.
Indeed, xray folds are only facilities to show other folds hidden under paper
layers.
This operator should only appear within a step block.

Usage

\xray_fold(b, ab2);

Formal structure

\xray_fold(VERTEX_1, VERTEX_2);
\xray_fold(VERTEX_1, VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE);
\xray_fold(VERTEX_1, VERTEX_2, EDGE_1, V2_PERCENTAGE);
\xray_fold(VERTEX_1, VERTEX_2, EDGE_1, EDGE_2);

Parameters

VERTEX_1
Description : Indicates the first vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

VERTEX_2
Description : Indicates the second vertex of the segment.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.
V1_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_1.
Type : Integer.
Allowed values : Any value.
Default value : 0.

V2_PERCENTAGE (optional)
Description : Indicates the percentage of total edge length we
have to left blank close to VERTEX_2.
Type : Integer.

81
Allowed values : Any value.
Default value : 0.

EDGE_1 (optional)
Description : Indicates the limit edge close to VERTEX_1. The
blank part starts at VERTEX_1 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_1.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

EDGE_2 (optional)
Description : Indicates the limit edge close to VERTEX_2. The
blank part starts at VERTEX_2 and ends to the
intersection between [VERTEX_1, VERTEX_2] and
EDGE_2.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is not mandatory.

Conditions

• VERTEX 1 and VERTEX 2 should not be equivalent (see 2.3.1).

• The sum of V1 PERCENTAGE and V2 PERCENTAGE should be lesser than


100.

82
3.6 Arrow operators
3.6.1 \open arrow

Description
\open arrow operator draws the symbol to open the model following the
arrow. The open symbol is usually represented as a white filled troncated
arrow. This operator takes two arguments:

• an edge: the edge on which the symbol is drawn,

• a side keyword: left/right to specify where to draw the arrow ac-


cording to the given edge. This parameter is optional and the default
value is right.

The open arrow symbol is drawn at the middle of the given edge. Doodle
checks if the given edge has been defined, if this is not the case an error
occurs.
WARNING: the order to specify the edge is important because it is used
to know which side is the left or right side.
Therefore, \open_arrow([a, b], left); doesn’t produce the same result
as \open_arrow([b, a], left);.
This operator should only appear within a step block.

Figure 16: Example of an open arrow usage using the


\open arrow operator. This figure presents a squash fold,
with the open action of the right part.

Usage

\open_arrow([b, a]); % right is default


\open_arrow([a, b], left); % same as above

83
Formal structure

\open_arrow(EDGE, SIDE);
\open_arrow(EDGE);

Parameters

EDGE
Description : Indicates the edge on which the arrow is drawn.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Edge should have been defined.
SIDE (optional)
Description : Indicates the orientation side of the arrow.
Type : Side type.
Allowed values : One value in {left, right}.
Default value : right.

84
3.6.2 \push arrow

Description
\push arrow operator draws a black filled arrow head which is the com-
mon symbol to the push action on Origami diagrams. This operator takes
three parameters. First one is the vertex name on which the arrow is di-
rected. Next, we find the arrow orientation angle expressed in degrees. This
angle is absolute, this means that user doesn’t have to bother with previous
rotations applied on the model when he defines this orientation value. The
last parameter is the distance expressed in millimeters between the arrow
and the pointed vertex. Negative values are allowed for convenience. Both
last parameters are optional. If the distance parameter is omitted the value
will be 0. Concerning the orientation angle default value, as a particular
value like 0 has no sense the approach is to compute this missing value. The
computation of the orientation is made such as the arrow is in the direction
of the center of the step. The center of the step is the intersection point of
both diagonals of the initial square (or diamond).
This operator should only appear within a step block.

Figure 17: Two simple uses of the \push arrow operator.


This figure presents two push actions the folder has to do
when he does a reverse fold.

Usage
\push_arrow(a, 135, 1); % full detailed usage
\push_arrow(b, 45); % the arrow touches ’b’
\push_arrow(b); % the same as above but shorter

Formal structure
\push_arrow(VERTEX, ANGLE, DISTANCE);
\push_arrow(VERTEX, ANGLE);
\push_arrow(VERTEX);

85
Parameters

VERTEX
Description : Indicates the name of vertex pointed by the arrow.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

ANGLE (optional)
Description : Indicates the arrow orientation angle in degrees.
Type : Integer.
Allowed values : Any integer value in range [-180, 180].
Default value : Computed according to VERTEX.

DISTANCE (optional)
Description : Indicates the distance between VERTEX and arrow.
Type : Integer.
Allowed values : Any integer value.
Default value : 0.

86
3.6.3 \repeat arrow

Description
\repeat arrow allows to draw the Origami symbol to repeat some folds or
steps. It commonly looks like a simple straight arrow with little lines which
represent the number of times folder has to repeat. It may also contain
references to steps defining all folding actions to repeat. Those references
are called labels and they should been defined using the special operator
\label (see cf. §3.12.2). If labels are provided, they are substituted by the
number of corresponding steps and a box containing both step numbers is
attached to the arrow.
WARNING: As the label and vertex identifiers belong to two different
symbol tables, user can use a same identifier for both a vertex and a label.
Nevertheless, such usage can be confusing.
The main parameter is the pointed vertex which determines the location of
the arrow in the step. The repeating number and/or labels are the following
parameters. Finally, as in the case of the \push arrow (see cf. §3.6.2) user
can specify an orientation angle and a distance from the pointed vertex to
adjust the arrow positioning.
This operator should only appear within a step block.

Usage

\repeat_arrow(b, 2, 45, 3) %
\repeat_arrow(b); % the simplest form !
\repeat_arrow(b, startRepeat, endRepeat); % using two labels

Formal structure

\repeat_arrow(VERTEX, NUMBER, ANGLE, DISTANCE);


\repeat_arrow(VERTEX, NUMBER, ANGLE);
\repeat_arrow(VERTEX, NUMBER);
\repeat_arrow(VERTEX);
\repeat_arrow(VERTEX, LABEL1, LABEL2, NUMBER, ANGLE, DISTANCE);
\repeat_arrow(VERTEX, LABEL1, LABEL2, NUMBER, ANGLE);
\repeat_arrow(VERTEX, LABEL1, LABEL2, NUMBER);
\repeat_arrow(VERTEX, LABEL1, LABEL2);

Parameters

VERTEX
Description : Indicates the name of vertex pointed by the arrow.

87
19 - 21

Figure 18: Left: Simple case of usage of \repeat arrow.


Arrow definition only uses the middle of the bottom side
of the square. As the lower half part of the square has
been shift to make the diagram more realistic, the arrow
orientation isn’t vertical, it follows the direction of the center
of the square.
Right: This figure presents a repeat actionn of severals steps.
Previous steps (19 to 21) have performed on the right part
of the diamond a rabbit ear, a squash fold followed by a
petal fold. The repeat arrow says that those folds have to
be made on the left side.

Type : Symbol, vertex identifier.


Allowed values : Any vertex identifier previously defined.

NUMBER (optional)
Description : Indicates the number of time to repeat.
Type : Positive non-null integer.
Allowed values : Any positive non-null integer.
Default value : Computed according to VERTEX.

LABEL1
Description : Indicates the label symbol used to refer
the beginning step to repeat.
Type : Symbol, label identifier.
Allowed values : Any label identifier previously defined.

LABEL2
Description : Indicates the label symbol used to refer
the end step to repeat.

88
Type : Symbol, label identifier.
Allowed values : Any label identifier previously defined.

ANGLE (optional)
Description : Indicates the arrow orientation angle in degrees.
Type : Integer.
Allowed values : Any integer value in range [-180, 180].
Default value : Computed according to VERTEX.

DISTANCE (optional)
Description : Indicates the distance between VERTEX and arrow.
Type : Integer.
Allowed values : Any integer value.
Default value : 0.

89
3.6.4 \simple arrow

Description
A useful operator to define arrows associated to folds is available. A simple
arrow is a circle arc arrow. Two different syntaxes can be used whether two
vertices or one vertex and a fold line to cross are provided. An arrow is
drawn proportionally to the length between points but always remains to
a defined circle arc length (default is 60◦ ). The type of each arrow head
and the side of the arrow can be specified (default value is right). Indeed,
the arrow is always defined from a source vertex, which defines the arrow
beginning. Along the arrow direction, the arc can be drawn to the left or to
the right, depending of the drawing situation.
This operator should only appear within a step block.

Usage

\simple_arrow(a, c, unfold, valley, left, 100);


\simple_arrow(a, [b, d], none, mountain, right);

Formal structure

\simple_arrow(SRC_VERTEX, DST_VERTEX, SRC_ARROW, DST_ARROW, SIDE, ARC);


\simple_arrow(SRC_VERTEX, EDGE, SRC_ARROW, DST_ARROW, SIDE, ARC);

Parameters

SRC_VERTEX
Description : Indicates the name of the beginning vertex arrow.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

DST_VERTEX
Description : Indicates the name of the end vertex arrow.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

EDGE
Description : Indicates the fold line.
DST_VERTEX is computed as the symmetric of
SRC_VERTEX through this edge.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already

90
defined in a previous step.

SRC_ARROW
Description : Indicates the type of arrow head at the origin.
Type : Arrow head type.
Allowed values : One value in {valley, mountain, unfold, none}.

DST_ARROW
Description : Indicates the type of arrow head at the end.
Type : Arrow head type.
Allowed values : One value in {valley, mountain, unfold, none}.

SIDE (optional)
Description : Indicates the orientation side of the arrow.
Type : Side type.
Allowed values : One value in {left, right}.
Default value : right.

ARC (optional)
Description : Indicates the circle arc length in degrees.
Type : Integer.
Allowed values : Any positive non null integer value.
Default value : 60.

91
3.6.5 \return arrow

Description
\return arrow is the second operator to draw arrow associated to fold
operations. \return arrow is design to build a curved arrow often used for
mountain fold, or back fold. Arguments of this operator are:

• an edge, beginning of the arrow (in figure 19 [m1 , m2 ]),

• an edge, limit of the arrow (in figure 19 [a, b]),

• first arrow head type,

• second arrow head type,

• side of the arrow end (left or right),

• arrow length ratio (called R).

a o2 b 

b


o1 a


o m1
m1

m2
m2

d c
d c
Figure 19: Points to compute a return arrow and result

The type of each arrow head and the side of the arrow should be specified
by the same way as in \simple arrow. Arrow is computed using edges, side
and ratio parameters. It is a bezier curve oriented along the line defined
as the mediator of [m1 , m2 ] (orthogonal crossing the middle of first edge
parameter of the arrow). In example this mediator is called [o, o2 ]. The
arrow begins near to the middle of the [o, o2 ] segment point (o1 ) and ends
near to the intersection of [o, o2 ] and limit arrow edge ([a, b]). In example, the
end of arrow is close to point o2 . Length of the arrow along [o, o2 ] depends
of the ratio R of the arrow beyond [a, b]. The default value of R is 50%
so the distance of arrow beyond [a, b] is equal to the distance between the

92
begin of arrow and point o2 . The side parameter allows to specify whether
the arrow is drawn at left or right of [o, o2 ].
This operator should only appear within a step block.

Usage

% balanced return arrow


\return_arrow([mid_ad, mid_bc], [a, b], none, mountain, left);
% long return arrow (3/4 beyong [a, b])
\return_arrow([mid_ad, mid_bc], [a, b], unfold, mountain, right, 75);

Formal structure

\return_arrow(EDGE_1, EDGE_2, SRC_ARROW, DST_ARROW, SIDE, RATIO);

Parameters

EDGE_1
Description : Indicates the origin of arrow (often fold line).
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.

EDGE_2
Description : Indicates the limit where the arrow returns.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.

SRC_ARROW
Description : Indicates the type of arrow head at the origin.
Type : Arrow head type.
Allowed values : One value in {valley, mountain, unfold, none}.

DST_ARROW
Description : Indicates the type of arrow head at the end.
Type : Arrow head type.
Allowed values : One value in {valley, mountain, unfold, none}.

SIDE (optional)
Description : Indicates the orientation side of the arrow.
Type : Side type.
Allowed values : One value in {left, right}.

93
Default value : right

RATIO (optional)
Description : Indicates the curve ratio of the arrow.
Type : Percentage type.
Allowed values : One value in the range ]0, 100[.
Default value : 50.

94
3.7 Model manipulation
3.7.1 \rotate

Description
Operator to allow rotation of the previous diagram step. It is usually rep-
resented in the diagram by two circular arrows indicating how the rotation
should be made. The rotating operator has an only parameter, the angle
of rotation expressed in degrees. The allowed range value is from -180◦ to
180◦ . The rotation is made according to the trigonometric order (counter-
clockwise).

This operator should only appear after a step block.

Usage

\rotate(45);

Formal structure

\rotate(ROTATION);

Parameters

ROTATION
Description : Indicates the rotation value in degrees.
Type : Integer.
Allowed values : Any integer value in range [-180, 180].

95
3.7.2 \turn over horizontal

Description
\turn over horizontal allows to flip over the sheet of paper over the
horizontal axis. This means that all points located in the upper part of the
paper will be drawn symmetrically in the bottom in the next step (same for
bottom). You have to keep in mind that this operator modifies the coor-
dinates of all the previously defined vertices. The official symbol (rounded
arrow) of turn over is also printed in the current step.
This operator should only appear after a step block.

Usage

\turn_over_horizontal;

96
3.7.3 \turn over vertical

Description
\turn over vertical allows to filp over the sheet of paper over the ver-
tical axis. This means that all points located in the right part of the paper
will be drawn symmetrically in the left in the next step (same for left). You
have to keep in mind that this operator modifies the coordinates of all the
previously defined vertices. The official symbol (rounded arrow) of turn over
is also printed in the current step.
This operator should only appear after a step block.

Usage

\turn_over_vertical;

97
3.8 Edge management operators
Diagrams lines are created by fold operators as you have seen in §3.5. Once
drawn, edges are always present in the data structures and in the next steps
of the diagram. Sometime due to fold operations some edges have to be
hidden (or partially hidden). Doodle provides two main operators to make
easy this edge management.

3.8.1 \hide

Description
Operator \hide is the dual of \show.
Operator \hide allows to hide previously drawn graphical elements. Ele-
ments given by the operator can be an edge or a list of vertices. If an edge is
given to hide, the system checks that this edge had been defined (edges are
defined by folds definition cf. §2.4). If vertices are given, the system hides
all edges containing any of them.
This operator should only appear within a step block.

Usage

\hide([a, b]); % hide the existing edge between a and b


\hide(c); % hide all edges containing c
\hide(c, d, ab2); % hide all edges containing c, d or ab2

Formal structure

\hide(EDGE);
\hide(VERTICES_LIST);

Parameters

EDGE
Description : Indicates an explicit edge to hide.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.
VERTICES_LIST : Vertices to hide. In fact, hide all edges that
contain those vertices.
Type : List of vertex symbols.
Allowed values : Any sequence of vertex identifiers already
defined in previous steps.

98
3.8.2 \show

Description
Operator \show is the dual of \hide.
Operator \show allows to make visible previously hidden graphical elements.
Elements given to the operator can be an edge or a vertices list. If an edge
is given to show, the system checks that this edge had been defined (edges
are defined by folds definition cf. §2.4). If vertices are given, the system
shows all edges containing one of them.
This operator should only appear within a step block.

Usage

\show([a, b]); % show the existing edge between a and b


\show(c); % show all edges containing c
\show(c, d, ab2); % show all edges containing c, d or ab2

Formal structure

\show(EDGE);
\show(VERTICES_LIST);

Parameters

EDGE
Description : Indicates an explicit edge to show.
Type : Edge, couple of vertex identifiers.
Allowed values : Any couple of vertex identifiers already
defined in a previous step.
VERTICES_LIST : Vertices to show. In fact, show all edges that
contain those vertices.
Type : List of vertex symbols.
Allowed values : Any sequence of vertex identifiers already
defined in previous steps.

99
3.8.3 \space fold

Description
\space fold allows to modify the visual aspect of edges. It changes the
blank space of each extremities of an edge. It takes an edge as its first
parameter and two integer values matching respectively first and second
extremity percentage of space we want to left blank. It can be applied on
all kind of folds (mountain, valley, existing fold, border or xray fold), but it
has no effect if the edge on which it is applied has been defined with edge
limitation (cf. §for example \mountain fold 3.5.4).

Usage

\space_fold([a,c], 40, 40); % fold becomes just a pinch

Formal structure

\space_fold(EDGE, V1_PERCENTAGE, V2_PERCENTAGE);

Parameters

EDGE
Description : Indicates the modified edge.
Type : Edge, couple of vertex identifiers
Allowed values : Any couple of vertex identifiers already
defined. Physical edge is mandatory.

V1_PERCENTAGE
Description : Indicates the percentage of total edge length we
have to left blank close to first vertex of EDGE.
Type : Integer.
Allowed values : Any value.

V2_PERCENTAGE
Description : Indicates the percentage of total edge length we
have to left blank close to second vertex of EDGE.
Type : Integer.
Allowed values : Any value.

100
3.9 Faces coloring operators
Actual version of Doodle provides two operators to handle the colors of
paper. In the header block, it has been defined both face colors. The
following coloring operators use two tokens referencing those colors or color
modifying operator (\darker and \lighter).

3.9.1 \darker

Description
\darker is a color modifier used to decrease a particular color given in
argument. It returns another color object which is 10% darker than the
original one. It can be used inside the filling operator (\fill) to modify
one of the two defined color (front or back). As the returned type is the
same of one of the argument this operator can be used on the result of itself.

Usage

\fill(\darker(back), a, b, c); % darker than ’back’ color


\fill(\darker(\darker(back)), a, d, c); % darker again

Formal structure

\darker(COLOR);

Parameters

COLOR
Description : Indicates which color has to be modified.
Type : Color type.
Allowed values : One value of [back, front] and the return of
\darker or \lighter operator.

101
3.9.2 \fill

Description
\fill is used to fill the area with a one of the two defined colors. First
parameter is a flag symbol to determine which color has to be used. Follow-
ing others parameters are symbol name of vertices defining the area to be
fill. Vertices have to be given in a circular order but the closure of area is
automatically done by joining first and last vertices. Once an area is filled
in a step, this filled area is added to the end of the area list stored to be
filled. In other words, the filling order of areas is chronological, first defined
first drawn.
This operator should only appear within a step block.

Usage

\fill(front, a, b, c, d); % fill initial square


\fill(back, a, b, d); % if c comes to a

Formal structure

\fill(SIDE, VERTICES_LIST);

Parameters

SIDE
Description : Indicates which color has to be used.
Type : Side type.
Allowed values : One value of [back, front].

VERTICES_LIST : Vertices defining area to fill.


Type : List of vertex symbols.
Allowed values : Any sequence of vertex identifiers already
defined in previous steps.

102
3.9.3 \lighter

Description
\lighter is a color modifier used to increase a particular color given in
argument. It returns another color object which is 10% lighter than the
original one. It can be used inside the filling operator (\fill) to modify
one of the two defined color (front or back). As the returned type is the
same of one of the argument this operator can be used on the result of itself.

Usage

\fill(\lighter(back), a, b, c); % lighter than ’back’ color


\fill(\lighter(\lighter(back)), a, d, c); % lighter again

Formal structure

\lighter(COLOR);

Parameters

COLOR
Description : Indicates which color has to be modified.
Type : Color type.
Allowed values : One value of [back, front] and the return of
\darker or \lighter operator.

103
3.9.4 \unfill

Description
\unfill is the dual operator of \fill previously described. It is used
to unfill a previously filled area. Parameters are symbol name of vertices
defining the area to be cleared. Vertices can be given without any particular
order. If no vertex is given the result is to unfill all faces previously filled.
This operator should only appear within a step block.

Usage

\unfill(a, c, b, d); % clear the previous filled square


\unfill(a, b, d);
\unfill; % clear all !

Formal structure

\unfill;
\unfill(VERTICES_LIST);

Parameters

VERTICES_LIST : Vertices used to define filled area to clear.


Type : List of vertex symbols.
Allowed values : Any sequence of vertex identifiers already
defined in previous steps.

104
3.10 Step layout
3.10.1 \clip

Description
\clip allows to automatically hide extra graphical elements outside of
the step box. Therefore, it guarantees that nothing will be drawn beyond
the limit of the step (see §3.10.5 and §3.10.6 to define these limits). It can
be useful combined with the \scale operator. This operator can be found
in different places :

• inside step blocks (local)


• between step blocks (global)

When it is found between steps its action is global, that is to say that
all next steps will be clipped. When it’s found inside a step this means that
this current step only will be clipped. This case has two different syntaxes
whether specific limits are given or not.

Usage
\step {
....
\clip; % make this step be clipped with limits previously defined
....
}

\clip; % next steps will be clipped with limits previously defined

\step {
.... % this step is clipped
}

\step {
....
\clip(120, 80); % make this step be clipped with the desired limits
....
}

Formal structure
\clip;
\clip(WIDTH, HEIGHT);

105
Parameters

WIDTH
Description : Indicates the width of the current step.
The value is given in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 210].

HEIGHT
Description : Indicates the height of the current step.
The value is given in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 297].

106
3.10.2 \scale

Description
\scale is a zooming operator. It allows to increase (or decrease) the
displayed vertices coordinates. It does not modify internal coordinates, it
operates only on display. The value following the operator represents the
percentage the original size.
This operator can be found in different places :

• inside step blocks (local)

• between step blocks (global)

If \scale is written inside a step block, the scaling factor defined by


this operator is only applied for the current step. In the other case, if it
is specified between two step blocks, the scaling factor becomes global, it
is applied on all next steps. Local scaling operator is always prioritary, if
a global scaling factor has been defined before the current step, the local
scaling factor is applied for this step as if any global scaling operator was
found, but the global value is restored for next steps. The caling factor is
an absolute value. Thus, at any moment if we want to restore the default
size for next steps, the 100 value can be used in a global operator.

Usage

\step {
....
\scale(50); % make this step be drawn twice smaller than normal ones
....
}

\scale(200); % next steps will displayed twice taller than default

\step {
.... % this step is taller
}

\step {
....
\scale(100); % make this only step be drawn as default
....
}

107
Formal structure

\scale(FACTOR);

Parameters

FACTOR
Description : Indicates the percentage according to default size.
Type : Integer.
Allowed values : Any positive integer value except zero.

108
3.10.3 \unclip

Description
\unclip is the dual operator of \clip previously described (cf. §3.10.1.
It releases a clip mode previously set. In the unclip mode, graphical elements
can be drawn anywhere even outside of the page limits. \unclip has not
parameter. Like \clip, \unclip can be found in different places :

• inside step blocks (local)

• between step blocks (global)

Usage

\clip;

....

\step {
....
\unclip; % make this step be drawn without any control
....
}

\unclip; % now release existent control for next steps

\step {
.... % so this step can be larger than its limits
}

Formal structure

\unclip;

109
3.10.4 \visible area center

Description
\visible area center allows to specify the point that is in the cen-
ter of the area used to draw a step. Bounds of this zone is defined by
\visible area height and \visible area width (cf. §3.10.5 and 3.10.6).
This operator is useful when one wants to focus on a peripheral zone of the
diagram. It can also be useful combined with a scale operator. It takes
only one parameter, the focus point which becomes the center of the visible
space.
\visible area center can be found in different scope :

• inside step blocks (local)

• between step blocks (global)

If \visible area center is written inside a step block, the change of


centering point defined by this operator is only applied for the current step.
In the other case, if it is specified between two step blocks, the new focus
becomes global, it is applied on all next steps. Local operator is always
prioritary: if a global focus point has been defined before the current step,
the local focus point is applied for this step but the global point is restored
for next steps.

Usage

\visible_area_center(o);

....

\step {
....
\visible_area_center(mid_ab); % focus this step around mid_ab point
....
}

\step {
.... % the focus is still the o point
}

Formal structure

\visible_area_center(VERTEX);

110
Parameters

VERTEX
Description : Indicates the name of the focus point.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

111
3.10.5 \visible area height

Description
\visible area height allows user to define the vertical limit for steps
clipping box. It takes only one parameter which is the length in millimeter.
This operator can be found in several different locations :

• inside the header block (initial global)

• between step blocks (new global)

• inside step blocks (local)

First location is inside the global diagram information block, the scope
of the operator is global. It can be seen as the set of a default value. If
\visible area height is found between two step blocks, it means that the
possible default value defined in the header block is now replace by its value.
Finally, if the operator is found inside a step block this specified the local
change of the height of this step. Next steps height will be different according
to the previous value globally defined.

Usage

\diagram_header{
....
\visible_area_height(100); % global default step height value of 10cm
....
}
....

\step {
....
\visible_area_height(150); % this step needs a wider vertical
% limit than default
....
}

\visible_area_height(80); % now we can reduce next steps height

\step {
.... % height of this step is 8cm (same for nexts)
}

112
Formal structure

\visible_area_height(HEIGHT);

Parameters

HEIGHT
Description : Indicates the step height value in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 297].

113
3.10.6 \visible area width

Description
\visible area width allows user to define the horizontal limit for steps
clipping box. It takes only one parameter which is the length in millimeter.
This operator can be found in several different locations :

• inside the header block (initial global)

• between step blocks (new global)

• inside step blocks (local)

First location is inside the global diagram information block, the scope
of the operator is global. It can be seen as the set of a default value. If
\visible area width is found between two step blocks, it means that the
possible default value defined in the header block is now replace by its value.
Finally, if the operator is found inside a step block this specified the local
change of the width of this step only. Next steps width will be different
according to the previous value globally defined.

Usage

\diagram_header{
....
\visible_area_width(100); % global default step width value of 10cm
....
}
....

\step {
....
\visible_area_width(150); % this step needs a wider horizontal
% limit than default
....
}

\visible_area_width(80); % now we can reduce next steps width

\step {
.... % width of this step is 8cm (same for nexts)
}

114
Formal structure

\visible_area_width(WIDTH);

Parameters

WIDTH
Description : Indicates the step width value in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 210].

115
3.11 Page layout operators
3.11.1 \bottom margin

Description
\bottom margin is a page layout operator. It is only used inside the
diagram header block. It defines the bottom space left for each page of the
diagram. It is followed by an integer representing the height of this blank
space in millimeter.

Usage

\bottom_margin(20); % left a space of 2 cm in the bottom of each page

Formal structure

\bottom_margin(HEIGHT);

Parameters

HEIGHT
Description : Indicates the bottom space value in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 297].

116
3.11.2 \horizontal space

Description
\horizontal space is a page layout operator. It is used only inside the
diagram header block. It defines the minimal horizontal space left between
two steps in a same line. It is followed by an integer representing the height
of this blank space in millimeter. Considering the width of steps, the system
can increase this value to make diagram presentation more pleasant.

Usage

\horizontal_space(5); % left a space of 5 mm between two consecutive steps

Formal structure

\horizontal_space(WIDTH);

Parameters

WIDTH
Description : Indicates the space between two consecutive steps.
The value is given in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 210].

117
3.11.3 \left margin

Description
\left margin is a page layout operator. It is only used inside the diagram
header block. It defines the left space left for each page of the diagram.
It is followed by an integer representing the width of this blank space in
millimeter.

Usage

\left_margin{30}; % left a space of 2 cm in the left of each page

Formal structure

\left_margin{WIDTH};

Parameters

WIDTH
Description : Indicates the left space value in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 210].

118
3.11.4 \right margin

Description
\right margin is a page layout operator. It is only used inside the di-
agram header block. It defines the right space left for each page of the
diagram. It is followed by an integer representing the width of this blank
space in millimeter.

Usage

\right_margin{30}; % left a space of 2 cm in the right of each page

Formal structure

\right_margin{WIDTH};

Parameters

WIDTH
Description : Indicates the right space value in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 210].

119
3.11.5 \top margin

Description
\top margin is a page layout operator. It is only used inside the diagram
header block. It defines the top space left for each page of the diagram.
It is followed by an integer representing the height of this blank space in
millimeter.

Usage

\top_margin(30}; % left a space of 2 cm in the top of each page

Formal structure

\top_margin(HEIGHT);

Parameters

HEIGHT
Description : Indicates the top space value in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 297].

120
3.11.6 \vertical space

Description
\vertical space is a page layout operator. It is used only inside the
diagram header block. It defines the minimal vertical space left between
two lines of steps. It is followed by an integer representing the width of this
blank space in millimeter. Considering the height of steps, the system can
increase this value to make diagram presentation more pleasant.

Usage

\vertical_space(15); % left a space of 15 mm between two steps lines

Formal structure

\vertical_space(HEIGHT);

Parameters

HEIGHT
Description : Indicates the space between two consecutive steps lines.
The value is given in millimeter.
Type : Integer.
Allowed values : Any positive integer value in range [0, 297].

121
3.12 Text operators
3.12.1 \caption

Description
This operator allows the insertion of sentences to explain the current
operations made in the step. Operator has one string argument which is
the caption between two double quotes (”).
This operator should only appear within a step block.

Usage

\caption("Unfold the first layer.");

Formal structure

\caption(STRING);

Parameters

STRING
Description : Indicates the caption.
Type : String.
Allowed values : Any well formed string (between two double-quotes (")).

122
3.12.2 \label

Description
This operator allows user to set a virtual mark on steps to further use this
mark as a reference of those steps. \label uses a symbol to alias the step
which it belongs to. Therefore, this symbol can be used as the index of this
step using the dual operator \ref (see cf. §3.12.3). The parameter is not
a string but a symbol, it is seen as a label identifier which has nothing in
common with vertex identifier. As the label and vertex identifiers belong to
two different symbol tables, user can use a same identifier for both a vertex
and a label. Nevertheless, such usage can be confusing.
Such labels can be used also in the operator \repeat arrow which can
takes two labels to designate the begin and the end step of the repeat (see
cf. §3.6.3 for more information on this operator).
This operator should only appear within a step block.

Usage

\step {
...
\label(beginStep); % we are in the begin step, so
... % beginStep is equivalent to 1
}

Formal structure

\label(SYMBOL);

Parameters

SYMBOL
Description : Indicates the label symbol.
Type : Symbol, label identifier (same as vertex identifier).
Allowed values : Any label identifier not previously defined.

123
3.12.3 \ref

Description
This operator is coupled with the previous one \label (see cf. §3.12.2).
It uses a defined label in a Doodle string (title, caption \text parameter
etc. . . ). The use of a label identifier can be earlier in the Doodle source
than its definition. In other words, user can make forward references. The
symbol given in parameter is substituted in the string by the number of the
step in which the symbol definition is made. So it’s a very convenient way
to designate steps in strings which is independent steps order.
This operator should only appear within a string argument of another one.

Usage

\caption("Repeat from step \ref(beginRepeat) to \ref(endRepeat).");


\caption("Refer to step \ref(result) to see result.");

Formal structure

\ref(SYMBOL)

Parameters

SYMBOL
Description : Indicates the label symbol to refer.
Type : Symbol, label identifier (same as vertex identifier).
Allowed values : Any label identifier defined.

124
3.12.4 \text

Description
This operator allows user to add text on diagram. The first parameter
represents the Doodle vertex on which the text (second parameter) should
be placed. This point should be an already defined but not necessary visible
vertex. The text is shown in its own coordinates system to optimize read-
ability, so it is not affected by previous rotation (cf. §3.7.1) or scale factor
(cf. §3.10.2). This operator should be useful to indicate precisely a point to
the folder. The text is usually referenced in the caption of the diagram step
(cf. §3.12.1) to clarify explanations.
This operator should only appear within a step block.

Usage

\text(a, "point a");

Formal structure

\text(VERTEX, STRING);

Parameters

VERTEX
Description : Indicates the point on which the text should be
written.
Type : Symbol, vertex identifier.
Allowed values : Any vertex identifier previously defined.

STRING
Description : Indicates the text to write at the VERTEX place.
Type : String.
Allowed values : Any well formed string (between two double-quotes (")).

125
3.13 Debugging
This section deals with special operators. Those operators haven’t any ef-
fects on vertices coordinates but only effects on the visual output. Indeed
they help user to localize graphical elements (points or segments) on the
step in which they are applied. They are optimized to show as much as
possible the name of elements. There are two main operators \debug point
and \debug line. First draws on diagrams the name of vertices currently
used. Second is focused on edge. A third operator (\debug) is equivalent
to both former ones. It’s a shortcut to give simply a maximum information
about the current step.
Thoses operators are only used for debugging diagram during its elaboration.

3.13.1 \debug
\debug is a wrapper operator around the next two ones. In fact, this oper-
ator calls \debug point and \debug line.
This operator should only appear within a step block.

Usage

\debug;

126
3.13.2 \debug line

Description
\debug line is only used for debugging diagram during its elaboration.
It should be used inside of a step block to draw additional information for
the current step. The system displays visible edge name. Edge name is
made by the name of its extremities and this name is shown at the center
of the edge. So if an edge doesn’t appear the reason is that it is hidden.

This operator is useful to locate edges after application of operators that


alter internal vertices coordinates as \turn over vertical (cf. §3.7.3) for
instance.
This operator has three syntaxes. The shorter (without parameter) is a
quick way to have a global view of edges. The second and third ones can
be seen as query operators since they reply to questions such as “Where are
located edges containing point. . . ?” The second syntax takes in argument
a vertices list. The result of this form is to draw on the step each edge
name which contains one of the given vertices. The third form replies to the
question “Where is located the edge. . . ?”.
This operator should only appear within a step block.

Usage

\debug_line; % Display the name of all vertices


\debug_line(a, cd1); % Show me all edges containing a and cd1
\debug_line([a, b]); % Where is edge [a, b] ?

Formal structure

\debug_line;
\debug_line(VERTICES_LIST);
\debug_line(EDGE);

Parameters

VERTICES_LIST : Any searched vertices.


Type : List of vertex symbols.
Allowed values : Any sequence of vertex identifiers already
defined in previous steps.
EDGE
Description : Indicates the edge to locate.
Type : Edge, couple of vertex identifiers.

127
Allowed values : Any couple of vertex identifiers already
defined in a previous step.

128
3.13.3 \debug point

Description
\debug point is only used for debugging diagram during its elaboration.
It should be used inside of a step block to draw additional information for
current step. The system displays symbols name of vertices extremities of
visible edges. So if a vertex doesn’t appear the reason is that all edges which
it belongs to are currently hidden.

This operator is useful to locate vertices after application of operators


that alter internal vertices coordinates as \turn over vertical (cf. §3.7.3)
for instance. This operator has two syntaxes. The shorter (without param-
eter) is a quick way to have a global view of vertices. The second one (the
more precise) can be seen as a query operator since it replies to the question
“Where are located point. . . ?” This form takes a list of vertex name in
parameter, vertices are separated by comma (’,’).
This operator should only appear within a step block.

Usage

\debug_point; % Display the name of all vertices


\debug_point(a, cd1); % Useful to locate some points

Formal structure

\debug_point;
\debug_point(VERTICES_LIST);

Parameters

VERTICES_LIST : All searched vertices.


Type : List of vertex symbols.
Allowed values : Any sequence of vertex identifiers already
defined in previous steps.

129
3.14 Miscellaneous operators
3.14.1 \define

Description
\define allows to define new operators. It is inspired by the well-known
#define of the C/C++ preprocessor. The aim of this operator is to create
a new operator based on other ones. It can also be used to change name
of operators. This way, we can imagine to translate all Doodle operators
in other foreign languages. But in fact, this usage is certainly not the most
interesting. Indeed, this operator make the Doodle language open and exten-
sible. We can also imagine macro operators definition compounding several
operators in one.
\define take two global parameters :

1. the entire new operator name and arguments,

2. the block by which the new operator will replaced.

\define replaces all occurrences of its first parameter (new operator


name) by the second one (block of Doodle source code). New operator pa-
rameters are substituted and used inside the Doodle code. The replacement
is purely lexical.

This operator can only be found outside of a block (step or header).

Usage

\define \def {\define} % for lazy people ...


\define \titre(t) {\title(t)} % french operator translation

Formal structure

\define OPERATOR (PARAMETERS) { DOODLE_CODE }

Parameters

OPERATOR
Description : Indicates the new operator name.
Type : Operator name.
Allowed values : Any valid operator name : starting with a backslash
character (\).

PARAMETERS (optional)

130
Description : Indicates the list of parameters taken by the new
operator.
Type : List of identifier.
Allowed values : Any sequence of identifiers separated by a coma (,).
Note : If no parameter are required, parenthesis are removed.

DOODLE_CODE
Description : Indicates the Doodle code by which an occurrence of
the new operator should be replaced.
Type : Piece of Doodle code.
Allowed values : Any valid Doodle source code.

131
3.14.2 \include

Description
\include allows to include another Doodle file inside the current one.
It can be seen as a replacement of the operator by the content of the file
given in parameter. The file to be inserted is given as a string, so it can
contain space characters. There is no restriction concerning the place of this
operator, it can be found anywhere in the file.

Usage

\include("french_operators.doo");

Formal structure

\include(STRING);

Parameters

STRING
Description : Indicates the inserted file name.
Type : String.
Allowed values : Any well formed string (between two double-quotes (")).

132
3.14.3 \reset

Description
\reset operator allows to reset all data structures. In other words, all
vertices, all edges and all faces previously defined will be erased from the
Doodle memory. The Doodle state after this operator is the same as the
one before the very first step of the file.

Usage

\reset;

133
4 Summary
The following table presents a summary of all previously detailed operators.
On electronic version of this document (DVI or PDF format) a quick jump
to an operator section is provided by clicking in the diamond.

Operator Short description

\border  draws a border line between two points


\bottom margin  defines the bottom margin value of each page
\caption  explanations of the current step
\clip  hides graphic beyond the step box limit
\color back  color of the back side of paper
\color front  color of the front side of paper
\comment  free comment on model (appears on first page)
\cut  cuts an edge into two at a given point
\darker  decrease the color lightening given in argument
\debug  adds the visible points and edges name for current step
\debug line  adds the visible edges name for current step
\debug point  adds the visible points name for current step
\define  defines a new operator to the Doodle language
\design date  specifies the design date, appears on first page
\designer  designer name
\diagram date  specifies the diagram date, appears on first page
\diagram header  diagram header block
\diagrammer  diagram author name
\diamond  draws a diamond and names the four corners
\fill  fills an area defined by vertices
\fold  draws a crease between two points (existing fold)
\fraction  defines new points from two others
\hide  hides some elements (vertices or edges)
\horizontal rectangle  draws an horizontal rectangle, names corners
\horizontal space  specifies horizontal space between steps
\include  includes a Doodle source file inside the current one
\intersection  finds intersection point of two edges
\label  defines a label symbol
\left margin  specifies the left margin of each page
\line to line  creates two points such as an edge meets another
\lighter  increase the color lightening given in argument
\middle  creates a point as the middle of two points
\mountain fold  draws a mountain line between two points
\open arrow  draws a open arrow
\point to line  finds points such as a point comes to an edge
\point to point  finds points such as a point meets another

134
Operator Short description

\push arrow  draws a push arrow


\ref  refers a step number in string
\repeat arrow  draws a repeat arrow
\return arrow  draws a curved arrow
\right margin  specifies the right margin of each page
\rabbit ear  computes new points to draw a rabbit ear fold
\rotate  rotates steps
\scale  scales steps (zoom in and out)
\show  shows previously hidden graphical elements
\simple arrow  draws a basic arrow
\space fold  specifies the blank for each edge extremity in %
\square  draws a square and names its corners
\step  defines a step context
\shift  visually moves a point relatively to its real position
\symmetry  creates a new point symmetrical to another
\text  draws some text on points
\title  specifies the model title
\today  returns the current date (used in date operators only)
\top margin  specifies the top margin of each page
\turn over horizontal  turns paper around horizontal axis
\turn over vertical  turns paper around vertical axis
\unclip  releases clipping beyond step limits
\unfill  clears a previously filled area
\unshift  reset all previously shifted vertices
\valley fold  draws a valley line between two points
vertex cloning  Duplicates a vertex (this is not an operator)
\vertical rectangle  draws a vertical rectangle, names corners
\vertical space  specifies vertical space between steps
\visible area center  specifies which points becomes the step center
\visible area height  specifies the height allowed to draw step
\visible area width  specifies the width allowed to draw step
\xray fold  draws a xray line between two points

135
Index
A operators . . . . . . . . . . . . . . . . . . . . . 7
arrow operator 83, 85, 87, 90, 92 \border . . . . . . . . . . . . . . . . . 65
\bottom margin . . . . . . . . 116
B \caption . . . . . . . . . . . . . . . 122
block definition . . . . . . . . . . . . . . 11 \clip . . . . . . . . . . . . . . . . . . 105
\color back . . . . . . . . . . . . 13
C
\color front . . . . . . . . . . . 15
comment . . . . . . . . . . . . . . . . . . . . . . 7
\comment . . . . . . . . . . . . . . . . 17
D \cut . . . . . . . . . . . . . . . . . . . . . 70
debugging . . . . . . . . . 126, 127, 129 \darker . . . . . . . . . . . . . . . . 101
definition \debug line . . . . . . . . . . . 127
edge . . 24, 25, 27, 28, 33, 65, \debug point . . . . . . . . . . 129
70, 71, 74, 77 \debug . . . . . . . . . . . . . . . . . 126
edge (locally) . . . . . . . . . . . . 80 \define . . . . . . . . . . . . . . . . 130
vertex 30, 31, 33, 35, 38, 41, \design date . . . . . . . . . . . 18
45, 47, 49, 52, 62 \designer . . . . . . . . . . . . . . . 19
diagram header operator . 13, 15, \diagram date . . . . . . . . . . 20
17–23 \diagram header . . . . . . . . 11
\diagrammer . . . . . . . . . . . . 21
E \diamond . . . . . . . . . . . . . . . . 24
edge management . . . . . . . 98–100 \fill . . . . . . . . . . . . . . . . . . 102
\fold . . . . . . . . . . . . . . . . . . . 71
F \fraction . . . . . . . . . . . . . . . 31
fold . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 \hide . . . . . . . . . . . . . . . . . . . 98
\mountain fold . . . . . . . . . 74 \horizontal rectangle . 25
\valley fold . . . . . . . . . . . 77 \horizontal space . . . . 117
\xray fold . . . . . . . . . . . . . . 80 \include . . . . . . . . . . . . . . . 132
\inter cut . . . . . . . . . . . . . . 33
G
\intersection . . . . . . . . . . 35
geometrical operator . 31, 33, 35,
\label . . . . . . . . . . . . . . . . . 123
38, 41, 43, 45, 47, 49, 52,
\left margin . . . . . . . . . . 118
62
\lighter . . . . . . . . . . . . . . . 103
L \line to line . . . . . . . . . . 38
line operator . 65, 70, 71, 74, 77, \middle . . . . . . . . . . . . . . . . . 41
80 \mountain fold . . . . . . . . . 74
\move . . . . . . . . . . . . . . . . . . . 43
M \open arrow . . . . . . . . . . . . 83
miscellaneous . . . . . 130, 132, 133 \parallel . . . . . . . . . . . . . . . 45
model manipulation . . . . . . 95–97 \perpendicular . . . . . . . . . 47
\point to line . . . . . . . . . 49
O \point to point . . . . . . . . 52

136
\push arrow . . . . . . . . . . . . 85 V
\rabbit ear . . . . . . . . . . . . 55 vertex modification 43, 55, 59, 64
\ref . . . . . . . . . . . . . . . . . . . 124
\repeat arrow . . . . . . . . . . 87 Z
\reset . . . . . . . . . . . . . . . . . 133 zoom . . . . . . . . . . . . . . . . . . . . . . . 107
\return arrow . . . . . . . . . . 92
\right margin . . . . . . . . . 119
\rotate . . . . . . . . . . . . . . . . . 95
\scale . . . . . . . . . . . . . . . . . 107
\shift . . . . . . . . . . . . . . . . . . 59
\show . . . . . . . . . . . . . . . . . . . 99
\simple arrow . . . . . . . . . . 90
\space fold . . . . . . . . . . . 100
\square . . . . . . . . . . . . . . . . . 27
\step . . . . . . . . . . . . . . . . . . . 11
\symmetry . . . . . . . . . . . . . . . 62
\text . . . . . . . . . . . . . . . . . . 125
\title . . . . . . . . . . . . . . . . . . 22
\today . . . . . . . . . . . . . . . . . . 23
\top margin . . . . . . . . . . . 120
\turn over horizontal . 96
\turn over vertical . . . 97
\unclip . . . . . . . . . . . . . . . . 109
\unfill . . . . . . . . . . . . . . . . 104
\unshift . . . . . . . . . . . . . . . . 64
\valley fold . . . . . . . . . . . 77
\vertical rectangle . . . 28
\vertical space . . . . . . . 121
\visible area center . 110
\visible area height . 112
\visible area width . . 114
\xray fold . . . . . . . . . . . . . . 80

P
page layout . . . . . . . . . . . . 116–121
paper coloring . . . . . . . . . . 101–104
Paper shape . . . . . . 24, 25, 27, 28

S
step layout . . 105, 107, 109, 110,
112, 114

T
text operator . . . . . . . . . . . 122–125

137

Você também pode gostar