Merge remote-tracking branch 'origin/master' into ast-visitor

This commit is contained in:
Marius Kintel 2017-02-02 01:40:58 -05:00
commit 448333ed5f
28 changed files with 580 additions and 81 deletions

View file

@ -255,6 +255,7 @@ HEADERS += src/version_check.h \
src/FontListTableView.h \
src/GroupModule.h \
src/FileModule.h \
src/StatCache.h \
src/builtin.h \
src/calc.h \
src/context.h \
@ -438,6 +439,7 @@ SOURCES += \
src/hash.cc \
src/GroupModule.cc \
src/FileModule.cc \
src/StatCache.cc \
src/builtin.cc \
src/calc.cc \
src/export.cc \

View file

@ -31,6 +31,7 @@
#include "exceptions.h"
#include "modcontext.h"
#include "parsersettings.h"
#include "StatCache.h"
#include <boost/algorithm/string.hpp>
#include <boost/filesystem.hpp>
@ -74,16 +75,14 @@ void FileModule::registerUse(const UseNode &usenode) {
void FileModule::registerInclude(const std::string &localpath,
const std::string &fullpath)
{
struct stat st;
memset(&st, 0, sizeof(struct stat));
struct stat st{};
bool valid = stat(fullpath.c_str(), &st) == 0;
IncludeFile inc = {fullpath, valid, st.st_mtime};
this->includes[localpath] = inc;
this->includes[localpath] = {fullpath, valid, st.st_mtime};
}
bool FileModule::includesChanged() const
{
for(const auto &item : this->includes) {
for (const auto &item : this->includes) {
if (include_modified(item.second)) return true;
}
return false;
@ -91,12 +90,9 @@ bool FileModule::includesChanged() const
bool FileModule::include_modified(const IncludeFile &inc) const
{
struct stat st;
memset(&st, 0, sizeof(struct stat));
struct stat st{};
fs::path fullpath = find_valid_path(this->path, inc.filename);
bool valid = !fullpath.empty() ? (stat(fullpath.generic_string().c_str(), &st) == 0) : false;
bool valid = (StatCache::stat(inc.filename.c_str(), &st) == 0);
if (valid && !inc.valid) return true; // Detect appearance of file but not removal
if (valid && st.st_mtime > inc.mtime) return true;
@ -118,10 +114,9 @@ bool FileModule::handleDependencies()
// If a lib in usedlibs was previously missing, we need to relocate it
// by searching the applicable paths. We can identify a previously missing module
// as it will have a relative path.
for(const auto &lib : this->usedlibs) {
for (const auto &lib : this->usedlibs) {
std::string filename = lib.first;
const auto &usenode = lib.second;
bool wasmissing = false;
bool found = true;
@ -148,6 +143,9 @@ bool FileModule::handleDependencies()
if (changed) {
PRINTDB(" %s: %p -> %p", filename % oldmodule % newmodule);
}
else {
PRINTDB(" %s: %p", filename % oldmodule);
}
somethingchanged |= changed;
// Only print warning if we're not part of an automatic reload
if (!newmodule && !wascached && !wasmissing) {
@ -156,9 +154,9 @@ bool FileModule::handleDependencies()
}
}
// Relative filenames which were located is reinserted as absolute filenames
// Relative filenames which were located are reinserted as absolute filenames
typedef std::pair<std::string,std::string> stringpair;
for(const auto &files : updates) {
for (const auto &files : updates) {
this->usedlibs.insert({files.second, this->usedlibs.at(files.first)});
this->usedlibs.erase(files.first);
}
@ -166,17 +164,19 @@ bool FileModule::handleDependencies()
return somethingchanged;
}
AbstractNode *FileModule::instantiate(const Context *ctx, const ModuleInstantiation *inst, EvalContext *evalctx) const
AbstractNode *FileModule::instantiate(const Context *ctx, const ModuleInstantiation *inst,
EvalContext *evalctx) const
{
assert(evalctx == NULL);
assert(evalctx == nullptr);
FileContext context(ctx);
return this->instantiateWithFileContext(&context, inst, evalctx);
}
AbstractNode *FileModule::instantiateWithFileContext(FileContext *ctx, const ModuleInstantiation *inst, EvalContext *evalctx) const
AbstractNode *FileModule::instantiateWithFileContext(FileContext *ctx, const ModuleInstantiation *inst,
EvalContext *evalctx) const
{
assert(evalctx == NULL);
assert(evalctx == nullptr);
AbstractNode *node = new RootNode(inst);
try {

View file

@ -15,10 +15,11 @@ public:
FileModule(const std::string &path, const std::string &filename);
virtual ~FileModule();
virtual AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, EvalContext *evalctx = NULL) const;
virtual AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, EvalContext *evalctx = nullptr) const;
virtual void print(std::ostream &stream, const std::string &indent) const;
AbstractNode *instantiateWithFileContext(class FileContext *ctx, const ModuleInstantiation *inst, EvalContext *evalctx) const;
void setModulePath(const std::string &path) { this->path = path; }
const std::string &modulePath() const { return this->path; }
void registerUse(const UseNode &usenode);
void registerInclude(const std::string &localpath, const std::string &fullpath);

View file

@ -1,4 +1,5 @@
#include "ModuleCache.h"
#include "StatCache.h"
#include "FileModule.h"
#include "printutils.h"
#include "openscad.h"
@ -18,21 +19,22 @@ namespace fs=boost::filesystem;
FIXME: Implement an LRU scheme to avoid having an ever-growing module cache
*/
ModuleCache *ModuleCache::inst = NULL;
ModuleCache *ModuleCache::inst = nullptr;
/*!
Reevaluate the given file and all it's dependencies and recompile anything
needing reevaluation. Updates the cache if necessary.
The given filename must be absolute.
Sets the module reference to the new module, or NULL on any error (e.g. compile
Sets the module reference to the new module, or nullptr on any error (e.g. compile
error or file not found).
Returns true if anything was compiled (module or dependencies) and false otherwise.
*/
bool ModuleCache::evaluate(const std::string &filename, FileModule *&module)
{
FileModule *lib_mod = NULL;
module = nullptr;
FileModule *lib_mod = nullptr;
bool found = false;
if (this->entries.find(filename) != this->entries.end()) {
found = true;
@ -44,9 +46,8 @@ bool ModuleCache::evaluate(const std::string &filename, FileModule *&module)
if (lib_mod && lib_mod->isHandlingDependencies()) return false;
// Create cache ID
struct stat st;
memset(&st, 0, sizeof(struct stat));
bool valid = (stat(filename.c_str(), &st) == 0);
struct stat st{};
bool valid = (StatCache::stat(filename.c_str(), &st) == 0);
// If file isn't there, just return and let the cache retain the old module
if (!valid) return false;
@ -57,7 +58,7 @@ bool ModuleCache::evaluate(const std::string &filename, FileModule *&module)
cache_entry &entry = this->entries[filename];
// Initialize entry, if new
if (!found) {
entry.module = NULL;
entry.module = nullptr;
entry.cache_id = cache_id;
}
@ -68,7 +69,7 @@ bool ModuleCache::evaluate(const std::string &filename, FileModule *&module)
shouldCompile = false;
// Recompile if includes changed
if (lib_mod && lib_mod->includesChanged()) {
lib_mod = NULL;
lib_mod = nullptr;
shouldCompile = true;
}
}
@ -130,11 +131,10 @@ void ModuleCache::clear()
FileModule *ModuleCache::lookup(const std::string &filename)
{
return isCached(filename) ? this->entries[filename].module : NULL;
return isCached(filename) ? this->entries[filename].module : nullptr;
}
bool ModuleCache::isCached(const std::string &filename)
{
return this->entries.find(filename) != this->entries.end();
}

64
src/StatCache.cc Normal file
View file

@ -0,0 +1,64 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program 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; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "StatCache.h"
#include "printutils.h"
#include <sys/stat.h>
#include <string>
#include <unordered_map>
#include <ctime>
const float stale = 0.190; // Maximum lifetime of a cache entry chosen to be shorter than the automatic reload poll time
struct CacheEntry {
struct stat st; // result from stat
clock_t timestamp; // the time stat was called
};
typedef std::unordered_map<std::string, CacheEntry> StatMap;
static StatMap statMap;
int StatCache::stat(const char *path, struct stat *st)
{
StatMap::iterator iter = statMap.find(path);
if (iter != statMap.end()) { // Have we got an entry for this file?
clock_t age = clock() - iter->second.timestamp; // How old is it?
if(float(age) / CLOCKS_PER_SEC < stale) { // Not stale yet so return it
*st = iter->second.st;
return 0;
}
statMap.erase(iter); // Remove state entry
}
CacheEntry entry; // Make a new entry
if (int rv = ::stat(path, &entry.st)) return rv; // stat failed
entry.timestamp = clock(); // Add the current time
statMap[path] = entry;
*st = entry.st;
return 0;
}

32
src/StatCache.h Normal file
View file

@ -0,0 +1,32 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program 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; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#pragma once
class StatCache {
public:
static int stat(const char *, struct stat *);
};

View file

@ -89,7 +89,7 @@ fs::path boostfs_normalize(const fs::path &path)
* iterate path and base
* compare all elements so far of path and base
* whilst they are the same, no write to output
x2 * when they change, or one runs out:
* when they change, or one runs out:
* write to output, ../ times the number of remaining elements in base
* write to output, the remaining elements in path
*/

View file

@ -447,7 +447,7 @@ int cmdline(const char *deps_output_file, const std::string &filename, Camera &c
}
else {
fs::current_path(fparent); // Force exported filenames to be relative to document path
fstream << root_module->dump("") << "\n";
fstream << root_module->dump("");
fstream.close();
}
}

View file

@ -700,6 +700,7 @@ set(CORE_SOURCES
../src/Assignment.cc
../src/ModuleInstantiation.cc
../src/ModuleCache.cc
../src/StatCache.cc
../src/node.cc
../src/NodeVisitor.cc
../src/context.cc
@ -1149,15 +1150,24 @@ list(APPEND EXAMPLE_2D_FILES
list(APPEND EXAMPLE_FILES ${EXAMPLE_3D_FILES} ${EXAMPLE_2D_FILES})
list(APPEND ECHO_FILES ${FUNCTION_FILES}
list(APPEND MISC_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/assert-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/let-module-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/localfiles-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/localfiles_dir/localfiles-compatibility-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allexpressions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allfunctions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allmodules.scad)
list(APPEND ECHO_FILES ${FUNCTION_FILES} ${MISC_FILES}
${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/for-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/expression-evaluation-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/echo-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/assert-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/assert-fail1-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/assert-fail2-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/assert-fail3-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/parser-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/builtin-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/dim-all.scad
@ -1188,7 +1198,6 @@ list(APPEND ECHO_FILES ${FUNCTION_FILES}
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/nbsp-utf8-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/nbsp-latin1-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/concat-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-recursive-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/operators-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/issues/issue1472.scad
@ -1197,17 +1206,19 @@ list(APPEND ECHO_FILES ${FUNCTION_FILES}
${CMAKE_SOURCE_DIR}/../testdata/scad/issues/issue1528.scad
)
list(APPEND DUMPTEST_FILES ${FEATURES_2D_FILES} ${FEATURES_3D_FILES} ${DEPRECATED_3D_FILES})
list(APPEND DUMPTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/assert-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/let-module-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/localfiles-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/localfiles_dir/localfiles-compatibility-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allexpressions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allfunctions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allmodules.scad)
list(APPEND ASTDUMPTEST_FILES ${MISC_FILES}
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/assert-expression-fail1-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/assert-expression-fail2-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/assert-expression-fail3-test.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/assert-expression-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/echo-expression-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/let-test-single.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/let-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/list-comprehensions-experimental.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/functions/list-comprehensions.scad
)
list(APPEND DUMPTEST_FILES ${FEATURES_2D_FILES} ${FEATURES_3D_FILES} ${DEPRECATED_3D_FILES} ${MISC_FILES})
list(APPEND CGALPNGTEST_2D_FILES ${FEATURES_2D_FILES} ${SCAD_DXF_FILES} ${EXAMPLE_2D_FILES})
list(APPEND CGALPNGTEST_3D_FILES ${FEATURES_3D_FILES} ${SCAD_AMF_FILES} ${DEPRECATED_3D_FILES} ${ISSUES_3D_FILES} ${EXAMPLE_3D_FILES})
@ -1348,7 +1359,8 @@ disable_tests(csgpngtest_primitive-inf-tests
cgalpngtest_empty-shape-tests
csgpngtest_issue1258)
experimental_tests(echotest_list-comprehensions-experimental
experimental_tests(astdumptest_list-comprehensions-experimental
echotest_list-comprehensions-experimental
cgalpngtest_cube-with-hole
cgalpngtest_multi-volume-binary
cgalpngtest_sphere20face
@ -1370,6 +1382,7 @@ experimental_tests(echotest_list-comprehensions-experimental
throwntogethertest_split_pyramid
throwntogethertest_tetra_multicolor
dumptest_assert-tests
astdumptest_assert-tests
echotest_assert-tests
cgalpngtest_assert-tests
opencsgtest_assert-tests
@ -1382,7 +1395,12 @@ experimental_tests(echotest_list-comprehensions-experimental
echotest_assert-expression-tests
echotest_assert-expression-fail1-test
echotest_assert-expression-fail2-test
echotest_assert-expression-fail3-test)
echotest_assert-expression-fail3-test
astdumptest_echo-expression-tests
astdumptest_assert-expression-tests
astdumptest_assert-expression-fail1-test
astdumptest_assert-expression-fail2-test
astdumptest_assert-expression-fail3-test)
# Test config handling
@ -1584,11 +1602,7 @@ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake ${TMP})
# o dxfpngtest: Export to DXF, Re-import and render to PNG (--render=cgal)
#
add_cmdline_test(astdumptest EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX ast FILES
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/let-module-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allexpressions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allfunctions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allmodules.scad)
add_cmdline_test(astdumptest EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX ast FILES ${ASTDUMPTEST_FILES})
add_cmdline_test(csgtexttest SUFFIX txt FILES
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allexpressions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allfunctions.scad

View file

@ -35,4 +35,3 @@ ff = [for(a = [0, 1]) (if((a == 0)) ("A") else ("B"))];
gg = [each (["a", 0, false])];
hh = [for(a = [0 : 3]) (if((a < 2)) (if((a < 1)) (["+", a])) else (["-", a]))];
ii = [for(a = 0, b = 1;(a < 5);a = (a + 1), b = (b + 2)) [a, (b * b)]];

View file

@ -0,0 +1,2 @@
v = assert(false);
echo(v);

View file

@ -0,0 +1,4 @@
a = 10;
b = 20;
v = assert(((a < 20) && (b < 20)), "Test! <html>&</html>");
echo(v);

View file

@ -0,0 +1,5 @@
function f(x) = sin(x);
module m(angle) {
v = assert((f(angle) > 0)) 10;
}
m(270);

View file

@ -0,0 +1,22 @@
a = 3;
b = 6;
t0 = assert(true);
t1 = assert("t1");
t2 = assert((a * b));
t3 = assert(condition = (a * b));
t4 = (assert(true) a * b);
c = 2;
t5 = ((assert(condition = 2) a * b) * c);
d = (c + 9);
t6 = (((assert(condition = ((d + 5) > 15), message = str("value: ", (d + 5))) a * b) * c) * d);
t7 = assert(true) [a, b];
t8 = assert(true) [for(i = [1 : a]) ([i, b])];
echo(t0 = t0);
echo(t1 = t1);
echo(t2 = t2);
echo(t3 = t3);
echo(t4 = t4);
echo(t5 = t5);
echo(t6 = t6);
echo(t7 = t7);
echo(t8 = t8);

View file

@ -0,0 +1,12 @@
a = 3;
b = 6;
c = 2;
d = (c + 9);
assert(true);
assert("t1");
assert((a * b));
assert(condition = (a * b));
assert(true) cube(8, center = true);
translate([0, 20, 0]) assert(condition = 2) sphere(5);
assert(condition = ((d + 5) > 15), message = str("value: ", (d + 5))) translate([15, 0, 0]) cylinder(8, 5, center = true);
echo("assert-tests");

View file

@ -0,0 +1,28 @@
function f3(x, i = 0) = ((len(x) > i) ? let(a = (x[i] + f3(x, (i + 1)))) echo(a) a : 0);
function f2(x, i = 0) = ((echo(i) len(x) > i) ? (x[i] + f2(x, (i + 1))) : 0);
function f1(x) = [for(a = x) (echo(a = a) a)];
a = 3;
b = 6;
c = 8;
v = [2, 5, 7];
t0 = echo();
t1 = echo() undef;
t2 = echo("t2");
t3 = echo((a * b));
t4 = echo(c = (a * b));
t5 = (echo() a * b);
t6 = ((echo(c = 2) a * b) * c);
t7 = echo() [a, b];
t8 = echo() [for(i = [1 : a]) ([i, b])];
echo(t0 = t0);
echo(t1 = t1);
echo(t2 = t2);
echo(t3 = t3);
echo(t4 = t4);
echo(t5 = t5);
echo(t6 = t6);
echo(t7 = t7);
echo(t8 = t8);
echo("f1(v) = ", f1(v));
echo("f2(v) = ", f2(v));
echo("f3(v) = ", f3(v));

View file

@ -0,0 +1 @@
import(file = "B-\" C-\t D-\n E-'", layer = "A:\\ B:\" C:\t D:\n E:' F:\\\\");

View file

@ -0,0 +1,66 @@
function deg(angle) = ((360 * angle) / TAU);
module test1() {
test2();
translate([2, 0, 0]) test3();
translate([2, -2, 0]) test4();
translate([-2, 0, 0]) test5();
translate([-2, -2, 0]) test6();
translate([0, 2, 0]) test7();
translate([0, -2, 0]) sphere(test2_variable, $fn = 16);
translate([0, -4, 0]) cube([(TAU / 4), 0.5, 0.5], center = true);
translate([-2, -4, 0]) cube([(deg(0.5) / 20), 0.5, 0.5], center = true);
translate([2, -4, -0.5]) scale(0.05) alignds420([0, 0, 0], [0, 0, 0]);
}
module test_alignds420() {
alignds420(screws = 1);
}
module test7() {
cube([0.5, 0.5, 1], center = true);
}
module test2() {
cube(center = true);
}
module test6() {
difference() {
cube(center = true);
cylinder(r = 0.4, h = 2, center = true);
}
}
module alignds420(position, rotation, screws = 0, axle_lenght = 0) {
translate(position) rotate(rotation) {
union() {
translate([0, 0, 17]) {
cylinder(r = 6, h = 8, $fn = 30);
cylinder(r = 2.5, h = 10.5, $fn = 20);
}
translate([-6, -6, 0]) {
cube([12, 22.8, 19.5], false);
translate([0, -5, 17]) cube([12, 7, 2.5]);
translate([0, 20.8, 17]) cube([12, 7, 2.5]);
}
if((screws > 0)) {
translate([0, (-10.2 + 1.8), 11.5]) cylinder(r = (1.8 / 2), h = 6, $fn = 6);
translate([0, (21 - 1.8), 11.5]) cylinder(r = (1.8 / 2), h = 6, $fn = 6);
}
translate([-6, 0, 19]) rotate([90, 0, 90]) triangle(4, 18, 12);
translate([-6, -6, 19]) cube([12, 6.5, 4]);
}
if((axle_lenght > 0)) cylinder(r = 0.9, h = axle_lenght, center = true, $fn = 8);
}
}
module test5() {
sphere(r = 0.5, $fn = 8);
}
module test4() {
cylinder(r = 0.5, $fn = 10, center = true);
}
module test3() {
cylinder(r1 = 0.7, r2 = 0.2, center = true);
}
test2_variable = 0.7;
TAU = 6.28319;
PI = (TAU / 2);
mm_per_inch = 25.4;
echo("included.scad");
echo("included2.scad");
test1();

View file

@ -12,4 +12,3 @@ let(a = 5, b = (a + 8), c = (a + b)) {
}
}
}

View file

@ -0,0 +1,2 @@
c = let(c = 1) [c];
echo(c);

View file

@ -0,0 +1,16 @@
$a = 1;
b = 1;
echo(let() ($a * b));
echo(let($a = 2, b = 3) ($a * b));
echo(let(b = 2, $a = 3) ($a * b));
echo(let($a = 2) ($a * b));
echo(let(b = 3) ($a * b));
echo(let($a = 2, b = 3, $a = 4) ($a * b));
echo(let($a = 2, b = 3, b = 5) ($a * b));
echo(let($a = 2, b = 3, $a = 4, b = 5) ($a * b));
echo(let($a = 2, b = ($a * 3)) ($a * b));
echo(let($a = (2 * b), b = 3) ($a * b));
echo(let($a = (2 * b), b = ($a * 3)) ($a * b));
echo(let(b = ($a * 3), $a = (2 * b)) ($a * b));
echo(let(b = $a, $a = b) [$a, b]);
echo(let(b = (2 * $a), $a = b) [for(i = [1 : b]) ([i, $a])]);

View file

@ -0,0 +1,31 @@
y = 0;
z = 1;
a = [for(x = [0 : 3]) ([for(y = [10 : 13]) ([x, y])])];
echo([]);
echo([let(x = 2) 1]);
echo([let(x = 2) x]);
echo([let(x = 2) x]);
echo([if(y) (1)]);
echo([if(z) (1)]);
echo([for(x = [y, z]) (x)]);
echo([for(x = [y : z]) (x)]);
echo([for(x = [0 : -1 : 10]) (x)]);
echo([for(x = [10 : 1 : 0]) (x)]);
echo([for(x = [0 : 10]) (x)]);
echo([for(x = [0 : 3]) (for(y = [10 : 13]) ([x, y]))]);
echo([for(x = [0 : 3]) (for(y = [10 : 13]) ([x, y]))]);
echo([for(x = [0 : 3]) ([for(y = [10 : 13]) ([x, y])])]);
echo([for(x = [0 : 3]) (if((x == 1)) ([for(y = [10 : 13]) (if((y != 11)) ([x, y]))]))]);
echo(a);
echo([for(i = a) (for(j = i) (j))]);
echo([for(i = a) (for(j = i) (for(k = j) (k)))]);
echo([for(i = a) (for(j = i) (j))]);
echo([for(i = a) (for(j = i) (for(k = j) (k)))]);
echo([for(a = [0 : 1]) (a)]);
echo([for(a = [0 : 1]) (if(true) (a))]);
echo([for(a = [0 : 1]) (if(true) (if(true) (a)))]);
echo([for(a = [0 : 1]) (for(b = [a : 2]) ([b, a]))]);
echo([for(a = [0 : 1]) (if(true) (for(b = [a : 2]) ([b, a])))]);
echo([for(a = [0 : 1]) (if(true) (if(true) (for(b = [a : 2]) ([b, a]))))]);
echo([-1, for(a = [0 : 1 : 3]) (a), for(b = [3 : -1 : 0]) (b), -1]);
echo([for(a = [2 : 3]) ((a * 2)), for(a = [5 : 9]) (if(((a % 2) == 0)) ([a, (a + 1)])), -1]);

View file

@ -0,0 +1,10 @@
function f() = [for(a = [0 : 4]) (pow(2, a))];
echo([for(a = [0, 1, 2]) (if((a == 1)) ("-") else ("+"))]);
echo([for(a = [0, 1, 2]) (if((a > 0)) (if((a == 1)) ("A") else ("B")))]);
echo([for(a = [0, 1, 2]) (if((a > 0)) (if((a == 1)) ("A") else ("B")) else ("-"))]);
echo([for(a = [0 : 3]) (if((a < 2)) (if((a < 1)) (["+", a]) else (["-", a])))]);
echo([for(a = [0 : 3]) (if((a < 2)) (if((a < 1)) (["+", a])) else (["-", a]))]);
echo([for(a = [2 : 4]) (each ([a, (a * a)]))]);
echo([each (["a", "b"]), each ([-5 : -2 : -9]), each (f()), each ("c"), each (42), each (true)]);
echo([for(i = 2;(i <= 10);i = (i + 2)) i]);
echo([for(i = 1, n = 1;(i <= 4);i = (i + 1), n = ((n + i) * i)) [i, n]]);

View file

@ -0,0 +1 @@
localfiles_submodule();

View file

@ -0,0 +1 @@
localfiles_module();

View file

@ -0,0 +1,56 @@
function deg(angle) = ((360 * angle) / TAU);
module test1() {
test2();
translate([4, 0, 0]) test3();
translate([4, -2, 0]) test4();
translate([-2, 0, 0]) test5();
translate([-2, -2, 0]) test6();
translate([0, 2, 0]) test7();
translate([0, -2, 0]) sphere(test2_variable, $fn = 16);
translate([0, -4, 0]) teardrop(0.3, 1.5, 90);
translate([-2, -4, 0]) cube([(deg(0.5) / 20), 0.5, 0.5], center = true);
translate([2, -4, -0.5]) scale(0.05) alignds420([0, 0, 0], [0, 0, 0]);
}
module test_alignds420() {
alignds420(screws = 1);
}
module alignds420(position, rotation, screws = 0, axle_lenght = 0) {
translate(position) rotate(rotation) {
union() {
translate([0, 0, 17]) {
cylinder(r = 6, h = 8, $fn = 30);
cylinder(r = 2.5, h = 10.5, $fn = 20);
}
translate([-6, -6, 0]) {
cube([12, 22.8, 19.5], false);
translate([0, -5, 17]) cube([12, 7, 2.5]);
translate([0, 20.8, 17]) cube([12, 7, 2.5]);
}
if((screws > 0)) {
translate([0, (-10.2 + 1.8), 11.5]) cylinder(r = (1.8 / 2), h = 6, $fn = 6);
translate([0, (21 - 1.8), 11.5]) cylinder(r = (1.8 / 2), h = 6, $fn = 6);
}
translate([-6, 0, 19]) rotate([90, 0, 90]) triangle(4, 18, 12);
translate([-6, -6, 19]) cube([12, 6.5, 4]);
}
if((axle_lenght > 0)) cylinder(r = 0.9, h = axle_lenght, center = true, $fn = 8);
}
}
module test_teardrop() {
translate([0, -15, 0]) teardrop(5, 20, 90);
translate([0, 0, 0]) teardrop(5, 20, 60);
translate([0, 15, 0]) teardrop(5, 20, 45);
}
module teardrop(radius, length, angle) {
rotate([0, angle, 0]) union() {
linear_extrude(height = length, center = true, convexity = radius, twist = 0) circle(r = radius, center = true, $fn = 30);
linear_extrude(height = length, center = true, convexity = radius, twist = 0) projection(cut = false) rotate([0, -angle, 0]) translate([0, 0, ((radius * sin(45)) * 1.5)]) cylinder(h = (radius * sin(45)), r1 = (radius * sin(45)), r2 = 0, center = true, $fn = 30);
}
}
module test7() {
cube([0.5, 0.5, 1], center = true);
}
TAU = 6.28319;
PI = (TAU / 2);
mm_per_inch = 25.4;
test1();

View file

@ -117,8 +117,9 @@ stop()
if [ -e $LOCKFILE ]; then
rm $LOCKFILE
fi
cat virtualfb1.log
cat virtualfb2.log
# Very verbose debug output:
# cat virtualfb1.log
# cat virtualfb2.log
echo 'dump ~/.xession-errors:'
cat ~/.xsession-errors
echo 'end ~/.xession-errors'

View file

@ -119,12 +119,6 @@
E05FBE9817C30A05004F525B /* CsgInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsgInfo.h; sourceTree = "<group>"; };
E05FBE9917C30A05004F525B /* csgnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csgnode.h; sourceTree = "<group>"; };
E05FBE9A17C30A05004F525B /* csgops.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = csgops.cc; sourceTree = "<group>"; };
E05FBE9B17C30A05004F525B /* csgterm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = csgterm.cc; sourceTree = "<group>"; };
E05FBE9C17C30A05004F525B /* csgterm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csgterm.h; sourceTree = "<group>"; };
E05FBE9D17C30A05004F525B /* CSGTermEvaluator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSGTermEvaluator.cc; sourceTree = "<group>"; };
E05FBE9E17C30A06004F525B /* CSGTermEvaluator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSGTermEvaluator.h; sourceTree = "<group>"; };
E05FBE9F17C30A06004F525B /* csgtermnormalizer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = csgtermnormalizer.cc; sourceTree = "<group>"; };
E05FBEA017C30A06004F525B /* csgtermnormalizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csgtermnormalizer.h; sourceTree = "<group>"; };
E05FBEA117C30A06004F525B /* dxfdata.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dxfdata.cc; sourceTree = "<group>"; };
E05FBEA217C30A06004F525B /* dxfdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dxfdata.h; sourceTree = "<group>"; };
E05FBEA317C30A06004F525B /* dxfdim.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dxfdim.cc; sourceTree = "<group>"; };
@ -170,8 +164,6 @@
E05FBED017C30A06004F525B /* mainwin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mainwin.cc; sourceTree = "<group>"; };
E05FBED117C30A06004F525B /* MainWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainWindow.h; sourceTree = "<group>"; };
E05FBED217C30A06004F525B /* MainWindow.ui */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = MainWindow.ui; sourceTree = "<group>"; };
E05FBED317C30A06004F525B /* mathc99.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mathc99.cc; sourceTree = "<group>"; };
E05FBED417C30A06004F525B /* mathc99.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mathc99.h; sourceTree = "<group>"; };
E05FBED517C30A06004F525B /* memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = "<group>"; };
E05FBED617C30A06004F525B /* modcontext.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = modcontext.cc; sourceTree = "<group>"; };
E05FBED717C30A06004F525B /* modcontext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modcontext.h; sourceTree = "<group>"; };
@ -249,16 +241,12 @@
E05FBF2817C30A06004F525B /* ThrownTogetherRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThrownTogetherRenderer.h; sourceTree = "<group>"; };
E05FBF2A17C30A06004F525B /* transform.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transform.cc; sourceTree = "<group>"; };
E05FBF2B17C30A06004F525B /* transformnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transformnode.h; sourceTree = "<group>"; };
E05FBF2C17C30A06004F525B /* traverser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = traverser.cc; sourceTree = "<group>"; };
E05FBF2D17C30A06004F525B /* traverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = traverser.h; sourceTree = "<group>"; };
E05FBF2E17C30A06004F525B /* Tree.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tree.cc; sourceTree = "<group>"; };
E05FBF2F17C30A06004F525B /* Tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tree.h; sourceTree = "<group>"; };
E05FBF3017C30A06004F525B /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = "<group>"; };
E05FBF3117C30A06004F525B /* value.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value.cc; sourceTree = "<group>"; };
E05FBF3217C30A06004F525B /* value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value.h; sourceTree = "<group>"; };
E05FBF3317C30A06004F525B /* version_check.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = version_check.cc; sourceTree = "<group>"; };
E05FBF3417C30A06004F525B /* version_check.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version_check.h; sourceTree = "<group>"; };
E05FBF3517C30A06004F525B /* visitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = visitor.h; sourceTree = "<group>"; };
E08B63DC1955EEF40061A6E4 /* Camera.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Camera.cc; sourceTree = "<group>"; };
E091574819AA58C900D699E9 /* calc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = calc.cc; sourceTree = "<group>"; };
E091574919AA58C900D699E9 /* calc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = calc.h; sourceTree = "<group>"; };
@ -295,6 +283,83 @@
E09A1CB31A9DAE64000021A3 /* scintillaeditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scintillaeditor.h; sourceTree = "<group>"; };
E09A1CB41A9DAE64000021A3 /* settings.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = settings.cc; sourceTree = "<group>"; };
E09A1CB51A9DAE64000021A3 /* settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = settings.h; sourceTree = "<group>"; };
E0B9CA351E418FE400B90C7A /* annotation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = annotation.cc; sourceTree = "<group>"; };
E0B9CA361E418FE400B90C7A /* annotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = annotation.h; sourceTree = "<group>"; };
E0B9CA371E418FE400B90C7A /* assignment.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = assignment.cc; sourceTree = "<group>"; };
E0B9CA381E418FE400B90C7A /* Assignment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Assignment.h; sourceTree = "<group>"; };
E0B9CA391E418FE400B90C7A /* AST.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AST.cc; sourceTree = "<group>"; };
E0B9CA3A1E418FE400B90C7A /* AST.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AST.h; sourceTree = "<group>"; };
E0B9CA3B1E418FE400B90C7A /* BaseVisitable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseVisitable.h; sourceTree = "<group>"; };
E0B9CA3C1E418FE400B90C7A /* cgalutils-applyops.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "cgalutils-applyops.cc"; sourceTree = "<group>"; };
E0B9CA3D1E418FE400B90C7A /* cgalutils-project.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "cgalutils-project.cc"; sourceTree = "<group>"; };
E0B9CA3E1E418FE400B90C7A /* comment_lexer.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = comment_lexer.l; sourceTree = "<group>"; };
E0B9CA3F1E418FE400B90C7A /* comment_parser.y */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.yacc; path = comment_parser.y; sourceTree = "<group>"; };
E0B9CA401E418FE400B90C7A /* comment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = comment.cpp; sourceTree = "<group>"; };
E0B9CA411E418FF800B90C7A /* UserModule.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserModule.cc; sourceTree = "<group>"; };
E0B9CA421E418FF800B90C7A /* UserModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserModule.h; sourceTree = "<group>"; };
E0B9CA431E418FF800B90C7A /* WindowManager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WindowManager.cc; sourceTree = "<group>"; };
E0B9CA441E418FF800B90C7A /* WindowManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowManager.h; sourceTree = "<group>"; };
E0B9CA451E41902600B90C7A /* csgnode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = csgnode.cc; sourceTree = "<group>"; };
E0B9CA461E41902600B90C7A /* csgops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csgops.h; sourceTree = "<group>"; };
E0B9CA471E41902600B90C7A /* CSGTreeEvaluator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSGTreeEvaluator.cc; sourceTree = "<group>"; };
E0B9CA481E41902600B90C7A /* CSGTreeEvaluator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSGTreeEvaluator.h; sourceTree = "<group>"; };
E0B9CA491E41902600B90C7A /* CSGTreeNormalizer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSGTreeNormalizer.cc; sourceTree = "<group>"; };
E0B9CA4A1E41902600B90C7A /* CSGTreeNormalizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSGTreeNormalizer.h; sourceTree = "<group>"; };
E0B9CA4B1E41902600B90C7A /* export_amf.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = export_amf.cc; sourceTree = "<group>"; };
E0B9CA4C1E41902700B90C7A /* export_dxf.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = export_dxf.cc; sourceTree = "<group>"; };
E0B9CA4D1E41902700B90C7A /* export_nef.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = export_nef.cc; sourceTree = "<group>"; };
E0B9CA4E1E41902700B90C7A /* export_off.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = export_off.cc; sourceTree = "<group>"; };
E0B9CA4F1E41902700B90C7A /* export_stl.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = export_stl.cc; sourceTree = "<group>"; };
E0B9CA501E41902700B90C7A /* export_svg.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = export_svg.cc; sourceTree = "<group>"; };
E0B9CA511E41902700B90C7A /* FileModule.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileModule.cc; sourceTree = "<group>"; };
E0B9CA521E41902700B90C7A /* FileModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileModule.h; sourceTree = "<group>"; };
E0B9CA531E41902700B90C7A /* function.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cc; sourceTree = "<group>"; };
E0B9CA541E41902700B90C7A /* GroupModule.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GroupModule.cc; sourceTree = "<group>"; };
E0B9CA551E41902700B90C7A /* GroupModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupModule.h; sourceTree = "<group>"; };
E0B9CA561E41902700B90C7A /* hash.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hash.cc; sourceTree = "<group>"; };
E0B9CA571E41902700B90C7A /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hash.h; sourceTree = "<group>"; };
E0B9CA581E41902700B90C7A /* import_amf.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = import_amf.cc; sourceTree = "<group>"; };
E0B9CA591E41902700B90C7A /* import_nef.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = import_nef.cc; sourceTree = "<group>"; };
E0B9CA5A1E41902700B90C7A /* import_off.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = import_off.cc; sourceTree = "<group>"; };
E0B9CA5B1E41902700B90C7A /* import_stl.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = import_stl.cc; sourceTree = "<group>"; };
E0B9CA5C1E41902700B90C7A /* import_svg.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = import_svg.cc; sourceTree = "<group>"; };
E0B9CA5D1E41902700B90C7A /* import.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = import.h; sourceTree = "<group>"; };
E0B9CA5E1E41902700B90C7A /* ModuleInstantiation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModuleInstantiation.cc; sourceTree = "<group>"; };
E0B9CA5F1E41902700B90C7A /* ModuleInstantiation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModuleInstantiation.h; sourceTree = "<group>"; };
E0B9CA601E41902700B90C7A /* NodeVisitor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NodeVisitor.cc; sourceTree = "<group>"; };
E0B9CA611E41902700B90C7A /* NodeVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeVisitor.h; sourceTree = "<group>"; };
E0B9CA621E41902700B90C7A /* OpenSCADApp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenSCADApp.cc; sourceTree = "<group>"; };
E0B9CA631E41902700B90C7A /* OpenSCADApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenSCADApp.h; sourceTree = "<group>"; };
E0B9CA641E41902700B90C7A /* Package.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Package.h; sourceTree = "<group>"; };
E0B9CA651E41902700B90C7A /* polyset-gl.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "polyset-gl.cc"; sourceTree = "<group>"; };
E0B9CA661E41904400B90C7A /* groupwidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = groupwidget.cpp; path = parameter/groupwidget.cpp; sourceTree = "<group>"; };
E0B9CA671E41904400B90C7A /* groupwidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = groupwidget.h; path = parameter/groupwidget.h; sourceTree = "<group>"; };
E0B9CA681E41904400B90C7A /* parametercheckbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parametercheckbox.cpp; path = parameter/parametercheckbox.cpp; sourceTree = "<group>"; };
E0B9CA691E41904400B90C7A /* parametercheckbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parametercheckbox.h; path = parameter/parametercheckbox.h; sourceTree = "<group>"; };
E0B9CA6A1E41904400B90C7A /* parametercombobox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parametercombobox.cpp; path = parameter/parametercombobox.cpp; sourceTree = "<group>"; };
E0B9CA6B1E41904400B90C7A /* parametercombobox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parametercombobox.h; path = parameter/parametercombobox.h; sourceTree = "<group>"; };
E0B9CA6C1E41904400B90C7A /* ParameterEntryWidget.ui */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = ParameterEntryWidget.ui; path = parameter/ParameterEntryWidget.ui; sourceTree = "<group>"; };
E0B9CA6D1E41904400B90C7A /* parameterextractor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parameterextractor.cpp; path = parameter/parameterextractor.cpp; sourceTree = "<group>"; };
E0B9CA6E1E41904400B90C7A /* parameterextractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parameterextractor.h; path = parameter/parameterextractor.h; sourceTree = "<group>"; };
E0B9CA6F1E41904400B90C7A /* parameterobject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parameterobject.cpp; path = parameter/parameterobject.cpp; sourceTree = "<group>"; };
E0B9CA701E41904400B90C7A /* parameterobject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parameterobject.h; path = parameter/parameterobject.h; sourceTree = "<group>"; };
E0B9CA711E41904400B90C7A /* parameterset.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parameterset.cpp; path = parameter/parameterset.cpp; sourceTree = "<group>"; };
E0B9CA721E41904400B90C7A /* parameterset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parameterset.h; path = parameter/parameterset.h; sourceTree = "<group>"; };
E0B9CA731E41904400B90C7A /* parameterslider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parameterslider.cpp; path = parameter/parameterslider.cpp; sourceTree = "<group>"; };
E0B9CA741E41904400B90C7A /* parameterslider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parameterslider.h; path = parameter/parameterslider.h; sourceTree = "<group>"; };
E0B9CA751E41904400B90C7A /* parameterspinbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parameterspinbox.cpp; path = parameter/parameterspinbox.cpp; sourceTree = "<group>"; };
E0B9CA761E41904400B90C7A /* parameterspinbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parameterspinbox.h; path = parameter/parameterspinbox.h; sourceTree = "<group>"; };
E0B9CA771E41904400B90C7A /* parametertext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parametertext.cpp; path = parameter/parametertext.cpp; sourceTree = "<group>"; };
E0B9CA781E41904400B90C7A /* parametertext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parametertext.h; path = parameter/parametertext.h; sourceTree = "<group>"; };
E0B9CA791E41904400B90C7A /* parametervector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parametervector.cpp; path = parameter/parametervector.cpp; sourceTree = "<group>"; };
E0B9CA7A1E41904400B90C7A /* parametervector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parametervector.h; path = parameter/parametervector.h; sourceTree = "<group>"; };
E0B9CA7B1E41904400B90C7A /* parametervirtualwidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parametervirtualwidget.cpp; path = parameter/parametervirtualwidget.cpp; sourceTree = "<group>"; };
E0B9CA7C1E41904400B90C7A /* parametervirtualwidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = parametervirtualwidget.h; path = parameter/parametervirtualwidget.h; sourceTree = "<group>"; };
E0B9CA7D1E41904400B90C7A /* ParameterWidget.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ParameterWidget.cc; path = parameter/ParameterWidget.cc; sourceTree = "<group>"; };
E0B9CA7E1E41904400B90C7A /* ParameterWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ParameterWidget.h; path = parameter/ParameterWidget.h; sourceTree = "<group>"; };
E0B9CA7F1E41904400B90C7A /* ParameterWidget.ui */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = ParameterWidget.ui; path = parameter/ParameterWidget.ui; sourceTree = "<group>"; };
E0B9CA801E41904400B90C7A /* clipper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = clipper.cpp; path = polyclipping/clipper.cpp; sourceTree = "<group>"; };
E0B9CA811E41904400B90C7A /* clipper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = clipper.hpp; path = polyclipping/clipper.hpp; sourceTree = "<group>"; };
E0BD02071979C2D90020CC1B /* FontCache.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontCache.cc; sourceTree = "<group>"; };
E0BD02081979C2D90020CC1B /* FontCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontCache.h; sourceTree = "<group>"; };
E0BD02091979C2D90020CC1B /* FontListDialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontListDialog.cc; sourceTree = "<group>"; };
@ -382,10 +447,17 @@
E05FBE6B17C30A05004F525B /* AboutDialog.h */,
E05FBE6C17C30A05004F525B /* AboutDialog.html */,
E05FBE6D17C30A05004F525B /* AboutDialog.ui */,
E0B9CA351E418FE400B90C7A /* annotation.cc */,
E0B9CA361E418FE400B90C7A /* annotation.h */,
E05FBE6E17C30A05004F525B /* AppleEvents.cc */,
E05FBE6F17C30A05004F525B /* AppleEvents.h */,
E0B9CA371E418FE400B90C7A /* assignment.cc */,
E0B9CA381E418FE400B90C7A /* Assignment.h */,
E0B9CA391E418FE400B90C7A /* AST.cc */,
E0B9CA3A1E418FE400B90C7A /* AST.h */,
E05FBE7017C30A05004F525B /* AutoUpdater.cc */,
E05FBE7117C30A05004F525B /* AutoUpdater.h */,
E0B9CA3B1E418FE400B90C7A /* BaseVisitable.h */,
E05FBE7217C30A05004F525B /* boost-utils.cc */,
E05FBE7317C30A05004F525B /* boost-utils.h */,
E05FBE7417C30A05004F525B /* boosty.h */,
@ -409,7 +481,9 @@
E05FBE8717C30A05004F525B /* cgalfwd.h */,
E05FBE8817C30A05004F525B /* CGALRenderer.cc */,
E05FBE8917C30A05004F525B /* CGALRenderer.h */,
E0B9CA3C1E418FE400B90C7A /* cgalutils-applyops.cc */,
E0F8E5411A5B02AB004723C5 /* cgalutils-polyhedron.cc */,
E0B9CA3D1E418FE400B90C7A /* cgalutils-project.cc */,
E091574D19AA58C900D699E9 /* cgalutils-tess.cc */,
E05FBE8A17C30A05004F525B /* cgalutils.cc */,
E05FBE8B17C30A05004F525B /* cgalutils.h */,
@ -417,25 +491,30 @@
E05FBE8D17C30A05004F525B /* cgalworker.h */,
E0FCDD621A27B96C0024E633 /* clipper-utils.cc */,
E091574E19AA58C900D699E9 /* clipper-utils.h */,
E0B9CA801E41904400B90C7A /* clipper.cpp */,
E0B9CA811E41904400B90C7A /* clipper.hpp */,
E05FBE8E17C30A05004F525B /* CocoaUtils.h */,
E05FBE8F17C30A05004F525B /* CocoaUtils.mm */,
E05FBE9017C30A05004F525B /* color.cc */,
E091574F19AA58C900D699E9 /* colormap.cc */,
E05FBE9117C30A05004F525B /* colormap.h */,
E05FBE9217C30A05004F525B /* colornode.h */,
E0B9CA3E1E418FE400B90C7A /* comment_lexer.l */,
E0B9CA3F1E418FE400B90C7A /* comment_parser.y */,
E0B9CA401E418FE400B90C7A /* comment.cpp */,
E05FBE9317C30A05004F525B /* context.cc */,
E05FBE9517C30A05004F525B /* context.h */,
E05FBE9717C30A05004F525B /* control.cc */,
E001A3361AAD51F2001E2678 /* convex_hull_3_bugfix.h */,
E05FBE9817C30A05004F525B /* CsgInfo.h */,
E0B9CA451E41902600B90C7A /* csgnode.cc */,
E05FBE9917C30A05004F525B /* csgnode.h */,
E05FBE9A17C30A05004F525B /* csgops.cc */,
E05FBE9B17C30A05004F525B /* csgterm.cc */,
E05FBE9C17C30A05004F525B /* csgterm.h */,
E05FBE9D17C30A05004F525B /* CSGTermEvaluator.cc */,
E05FBE9E17C30A06004F525B /* CSGTermEvaluator.h */,
E05FBE9F17C30A06004F525B /* csgtermnormalizer.cc */,
E05FBEA017C30A06004F525B /* csgtermnormalizer.h */,
E0B9CA461E41902600B90C7A /* csgops.h */,
E0B9CA471E41902600B90C7A /* CSGTreeEvaluator.cc */,
E0B9CA481E41902600B90C7A /* CSGTreeEvaluator.h */,
E0B9CA491E41902600B90C7A /* CSGTreeNormalizer.cc */,
E0B9CA4A1E41902600B90C7A /* CSGTreeNormalizer.h */,
E001A3371AAD51F2001E2678 /* Dock.cc */,
E001A3381AAD51F2001E2678 /* Dock.h */,
E091575019AA58C900D699E9 /* DrawingCallback.cc */,
@ -451,7 +530,13 @@
E05FBEAC17C30A06004F525B /* evalcontext.h */,
E05FBEAD17C30A06004F525B /* EventFilter.h */,
E001A3391AAD51F2001E2678 /* exceptions.h */,
E0B9CA4B1E41902600B90C7A /* export_amf.cc */,
E0B9CA4C1E41902700B90C7A /* export_dxf.cc */,
E0B9CA4D1E41902700B90C7A /* export_nef.cc */,
E0B9CA4E1E41902700B90C7A /* export_off.cc */,
E05FBEB017C30A06004F525B /* export_png.cc */,
E0B9CA4F1E41902700B90C7A /* export_stl.cc */,
E0B9CA501E41902700B90C7A /* export_svg.cc */,
E05FBEAE17C30A06004F525B /* export.cc */,
E05FBEAF17C30A06004F525B /* export.h */,
E05FBEB117C30A06004F525B /* expr.cc */,
@ -460,6 +545,8 @@
E05FBEB417C30A06004F525B /* fbo.h */,
E091575319AA58C900D699E9 /* feature.cc */,
E091575419AA58C900D699E9 /* feature.h */,
E0B9CA511E41902700B90C7A /* FileModule.cc */,
E0B9CA521E41902700B90C7A /* FileModule.h */,
E05FBEB517C30A06004F525B /* fileutils.cc */,
E05FBEB617C30A06004F525B /* fileutils.h */,
E001A3511AAD5242001E2678 /* findversion.h */,
@ -473,6 +560,7 @@
E0BD020B1979C2D90020CC1B /* FreetypeRenderer.cc */,
E0BD020C1979C2D90020CC1B /* FreetypeRenderer.h */,
E05FBEB717C30A06004F525B /* func.cc */,
E0B9CA531E41902700B90C7A /* function.cc */,
E05FBEB817C30A06004F525B /* function.h */,
E0348EF3194E49B800CAB791 /* Geometry.cc */,
E0348EF4194E49B800CAB791 /* Geometry.h */,
@ -486,15 +574,27 @@
E05FBEBA17C30A06004F525B /* GLView.h */,
E001A33C1AAD51F2001E2678 /* grid.cc */,
E05FBEBB17C30A06004F525B /* grid.h */,
E0B9CA541E41902700B90C7A /* GroupModule.cc */,
E0B9CA551E41902700B90C7A /* GroupModule.h */,
E0B9CA661E41904400B90C7A /* groupwidget.cpp */,
E0B9CA671E41904400B90C7A /* groupwidget.h */,
E05FBEBC17C30A06004F525B /* handle_dep.cc */,
E05FBEBD17C30A06004F525B /* handle_dep.h */,
E0B9CA561E41902700B90C7A /* hash.cc */,
E0B9CA571E41902700B90C7A /* hash.h */,
E05FBEBE17C30A06004F525B /* highlighter.cc */,
E05FBEBF17C30A06004F525B /* highlighter.h */,
E05FBEC017C30A06004F525B /* imageutils-lodepng.cc */,
E05FBEC117C30A06004F525B /* imageutils-macosx.cc */,
E05FBEC217C30A06004F525B /* imageutils.cc */,
E05FBEC317C30A06004F525B /* imageutils.h */,
E0B9CA581E41902700B90C7A /* import_amf.cc */,
E0B9CA591E41902700B90C7A /* import_nef.cc */,
E0B9CA5A1E41902700B90C7A /* import_off.cc */,
E0B9CA5B1E41902700B90C7A /* import_stl.cc */,
E0B9CA5C1E41902700B90C7A /* import_svg.cc */,
E05FBEC417C30A06004F525B /* import.cc */,
E0B9CA5D1E41902700B90C7A /* import.h */,
E05FBEC517C30A06004F525B /* importnode.h */,
E0377C3E1A9CFE4E0016D52D /* launchingscreen.cc */,
E0377C3F1A9CFE4E0016D52D /* launchingscreen.h */,
@ -519,8 +619,6 @@
E05FBED017C30A06004F525B /* mainwin.cc */,
E05FBED117C30A06004F525B /* MainWindow.h */,
E05FBED217C30A06004F525B /* MainWindow.ui */,
E05FBED317C30A06004F525B /* mathc99.cc */,
E05FBED417C30A06004F525B /* mathc99.h */,
E05FBED517C30A06004F525B /* memory.h */,
E05FBED617C30A06004F525B /* modcontext.cc */,
E05FBED717C30A06004F525B /* modcontext.h */,
@ -528,12 +626,16 @@
E05FBED917C30A06004F525B /* module.h */,
E05FBEDA17C30A06004F525B /* ModuleCache.cc */,
E05FBEDB17C30A06004F525B /* ModuleCache.h */,
E0B9CA5E1E41902700B90C7A /* ModuleInstantiation.cc */,
E0B9CA5F1E41902700B90C7A /* ModuleInstantiation.h */,
E05FBEDC17C30A06004F525B /* namedcolors.cpp */,
E05FBEDD17C30A06004F525B /* node.cc */,
E05FBEDE17C30A06004F525B /* node.h */,
E05FBEDF17C30A06004F525B /* nodecache.h */,
E05FBEE017C30A06004F525B /* nodedumper.cc */,
E05FBEE117C30A06004F525B /* nodedumper.h */,
E0B9CA601E41902700B90C7A /* NodeVisitor.cc */,
E0B9CA611E41902700B90C7A /* NodeVisitor.h */,
E091575719AA58C900D699E9 /* NULLGL.cc */,
E05FBEE217C30A06004F525B /* OffscreenContext.h */,
E05FBEE317C30A06004F525B /* OffscreenContextAll.hpp */,
@ -554,6 +656,33 @@
E05FBEEE17C30A06004F525B /* OpenCSGWarningDialog.ui */,
E05FBEEF17C30A06004F525B /* openscad.cc */,
E05FBEF017C30A06004F525B /* openscad.h */,
E0B9CA621E41902700B90C7A /* OpenSCADApp.cc */,
E0B9CA631E41902700B90C7A /* OpenSCADApp.h */,
E0B9CA641E41902700B90C7A /* Package.h */,
E0B9CA681E41904400B90C7A /* parametercheckbox.cpp */,
E0B9CA691E41904400B90C7A /* parametercheckbox.h */,
E0B9CA6A1E41904400B90C7A /* parametercombobox.cpp */,
E0B9CA6B1E41904400B90C7A /* parametercombobox.h */,
E0B9CA6C1E41904400B90C7A /* ParameterEntryWidget.ui */,
E0B9CA6D1E41904400B90C7A /* parameterextractor.cpp */,
E0B9CA6E1E41904400B90C7A /* parameterextractor.h */,
E0B9CA6F1E41904400B90C7A /* parameterobject.cpp */,
E0B9CA701E41904400B90C7A /* parameterobject.h */,
E0B9CA711E41904400B90C7A /* parameterset.cpp */,
E0B9CA721E41904400B90C7A /* parameterset.h */,
E0B9CA731E41904400B90C7A /* parameterslider.cpp */,
E0B9CA741E41904400B90C7A /* parameterslider.h */,
E0B9CA751E41904400B90C7A /* parameterspinbox.cpp */,
E0B9CA761E41904400B90C7A /* parameterspinbox.h */,
E0B9CA771E41904400B90C7A /* parametertext.cpp */,
E0B9CA781E41904400B90C7A /* parametertext.h */,
E0B9CA791E41904400B90C7A /* parametervector.cpp */,
E0B9CA7A1E41904400B90C7A /* parametervector.h */,
E0B9CA7B1E41904400B90C7A /* parametervirtualwidget.cpp */,
E0B9CA7C1E41904400B90C7A /* parametervirtualwidget.h */,
E0B9CA7D1E41904400B90C7A /* ParameterWidget.cc */,
E0B9CA7E1E41904400B90C7A /* ParameterWidget.h */,
E0B9CA7F1E41904400B90C7A /* ParameterWidget.ui */,
E05FBEF217C30A06004F525B /* parser.y */,
E05FBEF317C30A06004F525B /* parser.y.new */,
E05FBEF617C30A06004F525B /* parsersettings.cc */,
@ -567,6 +696,7 @@
E091575D19AA58C900D699E9 /* Polygon2d-CGAL.h */,
E091575E19AA58C900D699E9 /* Polygon2d.cc */,
E091575F19AA58C900D699E9 /* Polygon2d.h */,
E0B9CA651E41902700B90C7A /* polyset-gl.cc */,
E091576019AA58C900D699E9 /* polyset-utils.cc */,
E091576119AA58C900D699E9 /* polyset-utils.h */,
E05FBEFD17C30A06004F525B /* polyset.cc */,
@ -621,18 +751,18 @@
E05FBF2817C30A06004F525B /* ThrownTogetherRenderer.h */,
E05FBF2A17C30A06004F525B /* transform.cc */,
E05FBF2B17C30A06004F525B /* transformnode.h */,
E05FBF2C17C30A06004F525B /* traverser.cc */,
E05FBF2D17C30A06004F525B /* traverser.h */,
E05FBF2E17C30A06004F525B /* Tree.cc */,
E05FBF2F17C30A06004F525B /* Tree.h */,
E05FBF3017C30A06004F525B /* typedefs.h */,
E001A3571AAD5242001E2678 /* UIUtils.cc */,
E001A3581AAD5242001E2678 /* UIUtils.h */,
E0B9CA411E418FF800B90C7A /* UserModule.cc */,
E0B9CA421E418FF800B90C7A /* UserModule.h */,
E05FBF3117C30A06004F525B /* value.cc */,
E05FBF3217C30A06004F525B /* value.h */,
E05FBF3317C30A06004F525B /* version_check.cc */,
E05FBF3417C30A06004F525B /* version_check.h */,
E05FBF3517C30A06004F525B /* visitor.h */,
E0B9CA431E418FF800B90C7A /* WindowManager.cc */,
E0B9CA441E418FF800B90C7A /* WindowManager.h */,
);
name = src;
path = ../src;