The idea of design automation is to allow the generation of highly complex objects based on a set of formal construction rules. Using these construction rules, an object is described by a sequence of processing steps, rather than just by the result of all applied operations: Shape design becomes rule design. Due to its very general nature, this approach can be applied to any domain and to any shape representation that provides a set of generating functions.
In the context of computer-aided design (CAD) and shape description, the digital creation of a shape is called modeling. The most common representation of a shape is a composition of elementary objects. However, a shape can also be described by its generating process. In this case, the description is called a generative model. A generative model does not describe a shape by the parts it consists of, but by the operations and steps needed to be performed in order to create it; i.e., a generative model is an algorithm. Its implementation is an algorithmic description written in a programming language.
A state of the art overview on design automation, generative modeling, and algorithmic shapes has been written by Ulrich Krispel, Christoph Schinko, and Torsten Ullrich. It has been presented at the international workshop on 3D virtual reconstruction and visualization of complex architectures (3D-ARCH) and is available for open access: Krispel, U.; Schinko, C.; Ullrich, T.: A Survey of Algorithmic Shapes. Remote Sensing 2015, 7, 12763-12792.
A generative description usually depends on the programming language it is implemented in and on the used geometry representation. Euclides overcomes this problem: Euclides is a meta-modeler for generative modeling. It differs from other modeling environments in a very important aspect: target independence. Usually, a generative modeling environment consists of a script interpreter and a 3D rendering engine. A generative model (3D data structures with functionality) is interpreted directly to generate geometry, which is then visualized by the rendering engine. In Euclides, a model's source code is not interpreted but parsed into an intermediate representation, an abstract syntax tree. The consistent intermediate representation serves as a basis for back-end exporters to different languages, on many platforms and for various purposes.
The main idea of Euclides (and the implementation of the first version of Euclides 1.0) has been presented at the international conference on digital heritage in Limassol, Cyprus. The conference contribution by Christoph Schinko, Martin Strobl, Torsten Ullrich, and Dieter W. Fellner has been published by Springer: Schinko, C.; Strobl, M.; Ullrich, T.; Fellner, D. W.: Modeling Procedural Knowledge: A Generative Modeler for Cultural Heritage. Lecture Notes in Computer Science, 2010, 6436, 153-165.
Euclides is a programming language that is based on JavaScript or ECMAScript, respectively. Complicated language elements of ECMAScript have been removed; data structures for vectors, matrices, and corresponding linear algebra operators have been added.
The first example in almost every programming book since Brian Kernighan's and Dennis Ritchie's "The C Programming Language" is a version of the famous "hello world"-program. Following this tradition, the first Euclides program implements "HelloWorld!":
import 'io' print("Hello World!");
In addition to extending the language with additional data types, Euclides also has a number of standard libraries with a focus on mathematics, geometry and computer-aided design. A complete description of the language and its libraries, as well as numerous examples, can be found in the Euclides manual.
Euclides is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
The current version of Euclides is 4.0:
The Euclides distribution comprehends
The scripts "euclides.bat" and "euclides.sh" expect three parameters: the ECL library path, the name of the script to compile, and the resulting jar file name. Example:
euclides ./ecl ./man/lib_io_hello_world.ecs helloworld.jar
Euclides is developed and maintained by Torsten Ullrich (t.ullrich@cgv.tugraz.at) and Christoph Schinko (c.schinko@cgv.tugraz.at) at Graz University of Technology, Austria.
© 2019