Reference_manual-2.1.pdf

  • Uploaded by: Daniel Landi
  • 0
  • 0
  • October 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Reference_manual-2.1.pdf as PDF for free.

More details

  • Words: 26,302
  • Pages: 137
DOODLE : Origami Oriented Diagramming LanguagE

by J´ erˆ ome Gout Version 2.1 October 2001

Copyright 2000-2001, J´erˆ ome Gout. This document may be printed and distributed 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 2 General Concepts 2.1 Comments . . . 2.2 Operators . . . 2.3 Internal data . 2.3.1 Vertices 2.3.2 Edges . 2.3.3 Faces . 2.4 Folds . . . . . . 2.5 Page layout . .

6

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

3 Doodle operators 3.1 Block operators . . . . . . . . . . . 3.1.1 \diagram header . . . . . . 3.1.2 \step . . . . . . . . . . . . 3.2 Diagram header specific operators 3.2.1 \color back . . . . . . . . 3.2.2 \color front . . . . . . . . 3.2.3 \comment . . . . . . . . . . 3.2.4 \design date . . . . . . . . 3.2.5 \designer . . . . . . . . . 3.2.6 \diagram date . . . . . . . 3.2.7 \diagrammer . . . . . . . . 3.2.8 \title . . . . . . . . . . . 3.2.9 \today . . . . . . . . . . . 3.3 Paper shape operators . . . . . . . 3.3.1 \diamond . . . . . . . . . . 3.3.2 \horizontal rectangle . . 3.3.3 \square . . . . . . . . . . . 3.3.4 \vertical rectangle . . . 3.4 Geometrical operators . . . . . . . 3.4.1 Vertex cloning . . . . . . . 3.4.2 \fraction . . . . . . . . . 3.4.3 \inter cut . . . . . . . . . 3.4.4 \intersection . . . . . . . 3.4.5 \line to line . . . . . . . 3.4.6 \middle . . . . . . . . . . . 3.4.7 \move . . . . . . . . . . . . 3.4.8 \parallel . . . . . . . . . 3.4.9 \perpendicular . . . . . . 3.4.10 \point to line . . . . . .

3

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

7 7 7 7 8 8 9 9 10

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11 11 11 11 13 13 15 17 18 19 20 21 22 23 24 24 25 27 28 30 30 31 33 35 38 41 43 45 47 49

3.4.11 \point to point . . . . 3.4.12 \rabbit ear . . . . . . 3.4.13 \shift . . . . . . . . . 3.4.14 \symmetry . . . . . . . 3.4.15 \unshift . . . . . . . . 3.5 Line operators . . . . . . . . . 3.5.1 \border . . . . . . . . . 3.5.2 \cut . . . . . . . . . . . 3.5.3 \fold . . . . . . . . . . 3.5.4 \mountain fold . . . . 3.5.5 \valley fold . . . . . . 3.5.6 \xray fold . . . . . . . 3.6 Arrow operators . . . . . . . . 3.6.1 \open arrow . . . . . . 3.6.2 \push arrow . . . . . . 3.6.3 \repeat arrow . . . . . 3.6.4 \simple arrow . . . . . 3.6.5 \return arrow . . . . . 3.7 Model manipulation . . . . . . 3.7.1 \rotate . . . . . . . . . 3.7.2 \turn over horizontal 3.7.3 \turn over vertical . 3.8 Edge management operators . . 3.8.1 \hide . . . . . . . . . . 3.8.2 \show . . . . . . . . . . 3.8.3 \space fold . . . . . . 3.9 Faces coloring operators . . . . 3.9.1 \darker . . . . . . . . . 3.9.2 \fill . . . . . . . . . . 3.9.3 \lighter . . . . . . . . 3.9.4 \unfill . . . . . . . . . 3.10 Step layout . . . . . . . . . . . 3.10.1 \clip . . . . . . . . . . 3.10.2 \scale . . . . . . . . . 3.10.3 \unclip . . . . . . . . . 3.10.4 \visible area center 3.10.5 \visible area height 3.10.6 \visible area width . 3.11 Page layout operators . . . . . 3.11.1 \bottom margin . . . . 3.11.2 \horizontal space . . 3.11.3 \left margin . . . . . . 3.11.4 \right margin . . . . . 3.11.5 \top margin . . . . . . 4

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52 55 59 62 64 65 65 70 71 74 77 80 83 83 85 87 90 92 95 95 96 97 98 98 99 100 101 101 102 103 104 105 105 107 109 110 112 114 116 116 117 118 119 120

3.11.6 \vertical space . 3.12 Text operators . . . . . . 3.12.1 \caption . . . . . 3.12.2 \label . . . . . . 3.12.3 \ref . . . . . . . . 3.12.4 \text . . . . . . . 3.13 Debugging . . . . . . . . . 3.13.1 \debug . . . . . . 3.13.2 \debug line . . . 3.13.3 \debug point . . . 3.14 Miscellaneous operators . 3.14.1 \define . . . . . . 3.14.2 \include . . . . . 3.14.3 \reset . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

4 Summary

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

121 122 122 123 124 125 126 126 127 129 130 130 132 133 134

5

1

Introduction

Doodle is a language to describe Origami diagrams using symbolic and meaning notations. This language is symbolic, this means that users only manipulate names rather than geometrical coordinates. It also a powerful geometrical 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 operator 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 readability 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, Doodle 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 2

This is true only if the operator \reset isn’t used. 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 geometrical relation between symbols (referencing real graphical points) to XY coordinates, the page layout is as mush as possible human oriented. The system 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 configurable 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 operators 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 contains 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 Type

: Operator that return the current date (\today) : 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 Type

: Operator that return the current date (\today) : 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 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 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 righthand 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



d

c

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 described 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 parameter 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

o



c

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

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 describe by VERTEX 2. 36

• Vertex defined by VERTEX 3 should not be equivalent to the one describe 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







d

a2

b

b

c



d

mid_cd

c

Figure 4: Computing both opposite edge middles and a bisection 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 intersections 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 Type Allowed values EDGE_3 Description Type Allowed values

: Indicates the second segment to calculate median line. : Edge, vertex identifier pair. : Any vertex identifier pair previously defined. : Indicates the first intersection segment. : Edge, vertex identifier pair. : 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

d

b

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 describe 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 operator. 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 symmetric 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.

b

v1

a 

c

d Figure 6: Example of operator \move

Usage \square(a, b, c, d); v1 = \line_to_line(b, a, \cut([a, d], v1); % \move(a, [v1, b]); % \border(v1, b); % \fill(back, v1, b, a); %

d, [a, d]); fold cut the orignal edge effective paper move fold line becomes border 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

d

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 belong 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.

v2

b

v3 

v1

a 

d

v4

c

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 







b

b

ab

i1

f i 



o

da



bc

i2

da

d

d 

c 

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 Type Allowed values DEST Description Type Allowed values EDGE_1 Description

: Moving vertex. : Symbol, vertex identifier. : Any vertex identifier previously defined. : Destination vertex. : Symbol, vertex identifier. : Any vertex identifier previously defined.

: 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 explains 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.

a

d 

o1

b bc



c

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







d

o



bc

c

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, [VERTEX, VERTEX = VERTEX =

CENTER_O] = \rabbit_ear(MOVING, DEST, VERTEX_3, EDGE); CENTER_O] = \rabbit_ear(MOVING, DEST, VERTEX_3); \rabbit_ear(MOVING, DEST, VERTEX_3, CENTER_I, EDGE); \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 notion 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 coordinates 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 geometrical 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 values 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 

c

b

aa

a



b

d 

d

c

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 parameter 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. 

a

ab 

da

b







d

bc

c

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 Type

: Vertex which has to be symmetrized. : Symbol, vertex identifier. 62

Allowed values EDGE Description Type Allowed values

: Any vertex identifier previously defined. : Indicates the symmetry axis. : Edge, couple of vertex identifiers : 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 sequence 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

d

bc2

dc3 c

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, \fold(VERTEX_1, \fold(VERTEX_1, \fold(VERTEX_1,

VERTEX_2); VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE); VERTEX_2, EDGE_1, V2_PERCENTAGE); 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, \mountain_fold(VERTEX_1, \mountain_fold(VERTEX_1, \mountain_fold(VERTEX_1,

VERTEX_2); VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE); VERTEX_2, EDGE_1, V2_PERCENTAGE); 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. Indeed, 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, \valley_fold(VERTEX_1, \valley_fold(VERTEX_1, \valley_fold(VERTEX_1,

VERTEX_2); VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE); VERTEX_2, EDGE_1, V2_PERCENTAGE); 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. Indeed, 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, \xray_fold(VERTEX_1, \xray_fold(VERTEX_1, \xray_fold(VERTEX_1,

VERTEX_2); VERTEX_2, V1_PERCENTAGE, V2_PERCENTAGE); VERTEX_2, EDGE_1, V2_PERCENTAGE); 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 according 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 common symbol to the push action on Origami diagrams. This operator takes three parameters. First one is the vertex name on which the arrow is directed. 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 : Type : Allowed values : Default value :

Indicates the arrow orientation angle in degrees. Integer. Any integer value in range [-180, 180]. 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 : Type : Allowed values : Default value :

Indicates the arrow orientation angle in degrees. Integer. Any integer value in range [-180, 180]. 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 : Type : Allowed values : Default value :

Indicates the orientation side of the arrow. Side type. One value in {left, right}. right.

ARC (optional) Description Type Allowed values Default value

Indicates the circle arc length in degrees. Integer. Any positive non null integer 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



o1

a

o

m1





b

m1 m2

d

b

m2

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 : Type : Allowed values : Default value :

Indicates the curve ratio of the arrow. Percentage type. One value in the range ]0, 100[. 50.

94

3.7

Model manipulation

3.7.1

\rotate

Description Operator to allow rotation of the previous diagram step. It is usually represented 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 (counterclockwise). 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 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_horizontal;

96

3.7.3

\turn over vertical

Description \turn over vertical allows to filp over the sheet of paper over the vertical 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. Elements 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. Following 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); \unfill(a, b, d); \unfill;

% clear the previous filled square % 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 3.10.1

Step layout \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 center 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 3.11.1

Page layout operators \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 diagram 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 3.12.1

Text operators \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 readability, 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 effects 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 operator 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; \debug_line(a, cd1); \debug_line([a, b]);

% Display the name of all vertices % Show me all edges containing a and cd1 % 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 parameter) 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; \debug_point(a, cd1);

% Display the name of all vertices % 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 3.14.1

Miscellaneous operators \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 extensible. 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 parameters 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 \border \bottom margin \caption \clip \color back \color front \comment \cut \darker \debug \debug line \debug point \define \design date \designer \diagram date \diagram header \diagrammer \diamond \fill \fold \fraction \hide \horizontal rectangle \horizontal space \include \intersection \label \left margin \line to line \lighter \middle \mountain fold \open arrow \point to line \point to point

Short description                                    

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

Operator \push arrow \ref \repeat arrow \return arrow \right margin \rabbit ear \rotate \scale \show \simple arrow \space fold \square \step \shift \symmetry \text \title \today \top margin \turn over horizontal \turn over vertical \unclip \unfill \unshift \valley fold vertex cloning \vertical rectangle \vertical space \visible area center \visible area height \visible area width \xray fold

Short description                                

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

135

Index operators . . . . . . . . . . . . . . . . . . . . . 7 \border . . . . . . . . . . . . . . . . . 65 \bottom margin . . . . . . . . 116 \caption . . . . . . . . . . . . . . . 122 \clip . . . . . . . . . . . . . . . . . . 105 \color back . . . . . . . . . . . . 13 \color front . . . . . . . . . . . 15 \comment . . . . . . . . . . . . . . . . 17 \cut . . . . . . . . . . . . . . . . . . . . . 70 \darker . . . . . . . . . . . . . . . . 101 \debug line . . . . . . . . . . . 127 \debug point . . . . . . . . . . 129 \debug . . . . . . . . . . . . . . . . . 126 \define . . . . . . . . . . . . . . . . 130 \design date . . . . . . . . . . . 18 \designer . . . . . . . . . . . . . . . 19 \diagram date . . . . . . . . . . 20 \diagram header . . . . . . . . 11 \diagrammer . . . . . . . . . . . . 21 \diamond . . . . . . . . . . . . . . . . 24 \fill . . . . . . . . . . . . . . . . . . 102 \fold . . . . . . . . . . . . . . . . . . . 71 \fraction . . . . . . . . . . . . . . . 31 \hide . . . . . . . . . . . . . . . . . . . 98 \horizontal rectangle . 25 \horizontal space . . . . 117 \include . . . . . . . . . . . . . . . 132 \inter cut . . . . . . . . . . . . . . 33 \intersection . . . . . . . . . . 35 \label . . . . . . . . . . . . . . . . . 123 \left margin . . . . . . . . . . 118 \lighter . . . . . . . . . . . . . . . 103 \line to line . . . . . . . . . . 38 \middle . . . . . . . . . . . . . . . . . 41 \mountain fold . . . . . . . . . 74 \move . . . . . . . . . . . . . . . . . . . 43 \open arrow . . . . . . . . . . . . 83 \parallel . . . . . . . . . . . . . . . 45 \perpendicular . . . . . . . . . 47 \point to line . . . . . . . . . 49 \point to point . . . . . . . . 52

A arrow operator 83, 85, 87, 90, 92 B block definition . . . . . . . . . . . . . . 11 C comment . . . . . . . . . . . . . . . . . . . . . . 7 D debugging . . . . . . . . . 126, 127, 129 definition edge . . 24, 25, 27, 28, 33, 65, 70, 71, 74, 77 edge (locally) . . . . . . . . . . . . 80 vertex 30, 31, 33, 35, 38, 41, 45, 47, 49, 52, 62 diagram header operator . 13, 15, 17–23 E edge management . . . . . . . 98–100 F fold . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 \mountain fold . . . . . . . . . 74 \valley fold . . . . . . . . . . . 77 \xray fold . . . . . . . . . . . . . . 80 G geometrical operator . 31, 33, 35, 38, 41, 43, 45, 47, 49, 52, 62 L line operator . 65, 70, 71, 74, 77, 80 M miscellaneous . . . . . 130, 132, 133 model manipulation . . . . . . 95–97 O

136

V vertex modification 43, 55, 59, 64

\push arrow . . . . . . . . . . . . 85 \rabbit ear . . . . . . . . . . . . 55 \ref . . . . . . . . . . . . . . . . . . . 124 \repeat arrow . . . . . . . . . . 87 \reset . . . . . . . . . . . . . . . . . 133 \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

Z zoom . . . . . . . . . . . . . . . . . . . . . . . 107

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

More Documents from "Daniel Landi"

Reference_manual-2.1.pdf
October 2019 7
November 2019 7
Riciclare Al 100%
November 2019 4
Presentation1.pptx
April 2020 7
Inclusione.pdf
May 2020 1
Tetrapak
November 2019 4