summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--bison.pri5
-rw-r--r--cgal.pri2
-rw-r--r--doc/openscad.110
-rw-r--r--doc/testing.txt32
-rw-r--r--openscad.appdata.xml16
-rw-r--r--scripts/LogicLib.nsh1
-rwxr-xr-xscripts/builder.sh4
-rwxr-xr-xscripts/googlecode_upload.py306
-rwxr-xr-xscripts/installer-linux.sh3
-rwxr-xr-xscripts/macosx-build-dependencies.sh4
-rwxr-xr-xscripts/release-common.sh2
-rw-r--r--scripts/setenv-unibuild.sh39
-rwxr-xr-xscripts/uni-build-dependencies.sh23
-rw-r--r--scripts/x64.nsh1
-rw-r--r--src/CGALEvaluator.cc9
-rw-r--r--src/Camera.h13
-rw-r--r--src/GLView.cc3
-rw-r--r--src/MainWindow.h4
-rw-r--r--src/OpenCSGRenderer.cc2
-rw-r--r--src/PlatformUtils.cc81
-rw-r--r--src/PlatformUtils.h2
-rw-r--r--src/QGLView.cc11
-rw-r--r--src/context.cc15
-rw-r--r--src/control.cc1
-rw-r--r--src/export.h1
-rw-r--r--src/export_png.cc44
-rw-r--r--src/imageutils-lodepng.cc7
-rw-r--r--src/import.cc4
-rw-r--r--src/mainwin.cc47
-rw-r--r--src/mathc99.cc6
-rw-r--r--src/mathc99.h1
-rw-r--r--src/module.cc4
-rw-r--r--src/openscad.cc707
-rw-r--r--src/parser.y666
-rw-r--r--src/parsersettings.cc1
-rw-r--r--src/svg.cc110
-rw-r--r--src/version_check.h3
-rw-r--r--testdata/scad/features/resize-2d-tests.scad8
-rw-r--r--testdata/scad/features/resize-tests.scad14
-rw-r--r--testdata/scad/misc/variable-scope-tests.scad29
-rw-r--r--tests/CMakeLists.txt196
-rw-r--r--tests/CTestCustom.template7
-rw-r--r--tests/FindBoost.cmake2
-rw-r--r--tests/csgtestcore.cc212
-rw-r--r--tests/csgtestcore.h12
-rwxr-xr-xtests/dumptest12
-rwxr-xr-xtests/echotest9
-rw-r--r--tests/regression/cgalpngtest/resize-2d-tests-expected.pngbin2436 -> 2451 bytes
-rw-r--r--tests/regression/cgalpngtest/resize-tests-expected.pngbin4422 -> 4786 bytes
-rw-r--r--tests/regression/dumptest/example005-expected.csg8
-rw-r--r--tests/regression/dumptest/example010-expected.csg2
-rw-r--r--tests/regression/dumptest/example014-expected.csg6
-rw-r--r--tests/regression/dumptest/example015-expected.csg4
-rw-r--r--tests/regression/dumptest/example017-expected.csg12
-rw-r--r--tests/regression/dumptest/example018-expected.csg24
-rw-r--r--tests/regression/dumptest/example020-expected.csg84
-rw-r--r--tests/regression/dumptest/example021-expected.csg36
-rw-r--r--tests/regression/dumptest/example023-expected.csg16
-rw-r--r--tests/regression/dumptest/example024-expected.csg434
-rw-r--r--tests/regression/dumptest/intersection_for-tests-expected.csg6
-rw-r--r--tests/regression/dumptest/module-recursion-expected.csg60
-rw-r--r--tests/regression/dumptest/projection-tests-expected.csg2
-rw-r--r--tests/regression/dumptest/resize-2d-tests-expected.csg50
-rw-r--r--tests/regression/dumptest/resize-tests-expected.csg44
-rw-r--r--tests/regression/dumptest/scale2D-tests-expected.csg4
-rw-r--r--tests/regression/dumptest/text-search-test-expected.csg24
-rw-r--r--tests/regression/dumptest/transform-tests-expected.csg4
-rw-r--r--tests/regression/dumptest/use-tests-expected.csg2
-rw-r--r--tests/regression/echotest/builtin-tests-expected.echo1
-rw-r--r--tests/regression/echotest/builtin-tests-expected.txt1
-rw-r--r--tests/regression/echotest/dim-all-expected.echo (renamed from tests/regression/echotest/dim-all-expected.txt)10
-rw-r--r--tests/regression/echotest/echo-expected.echo (renamed from tests/regression/echotest/echo-expected.txt)0
-rw-r--r--tests/regression/echotest/echo-tests-expected.echo (renamed from tests/regression/echotest/echo-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/escape-test-expected.echo (renamed from tests/regression/echotest/escape-test-expected.txt)0
-rw-r--r--tests/regression/echotest/expression-shortcircuit-tests-expected.echo (renamed from tests/regression/echotest/expression-shortcircuit-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/inf-tests-expected.echo (renamed from tests/regression/echotest/inf-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/len-tests-expected.echo (renamed from tests/regression/echotest/len-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/lookup-tests-expected.echo (renamed from tests/regression/echotest/lookup-tests-expected.txt)4
-rw-r--r--tests/regression/echotest/parser-tests-expected.echo (renamed from tests/regression/echotest/parser-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/rands-expected.echo3
-rw-r--r--tests/regression/echotest/recursion-tests-expected.echo (renamed from tests/regression/echotest/recursion-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/search-tests-expected.echo (renamed from tests/regression/echotest/search-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/string-indexing-expected.echo (renamed from tests/regression/echotest/string-indexing-expected.txt)0
-rw-r--r--tests/regression/echotest/string-test-expected.echo (renamed from tests/regression/echotest/string-test-expected.txt)0
-rw-r--r--tests/regression/echotest/value-reassignment-tests-expected.echo (renamed from tests/regression/echotest/value-reassignment-tests-expected.txt)0
-rw-r--r--tests/regression/echotest/value-reassignment-tests2-expected.echo (renamed from tests/regression/echotest/value-reassignment-tests2-expected.txt)0
-rw-r--r--tests/regression/echotest/variable-scope-tests-expected.echo (renamed from tests/regression/echotest/variable-scope-tests-expected.txt)9
-rw-r--r--tests/regression/echotest/vector-values-expected.echo (renamed from tests/regression/echotest/vector-values-expected.txt)0
-rw-r--r--tests/regression/opencsgtest/resize-2d-tests-expected.pngbin3317 -> 3429 bytes
-rw-r--r--tests/regression/opencsgtest/resize-tests-expected.pngbin5106 -> 5616 bytes
-rw-r--r--tests/regression/throwntogethertest/resize-2d-tests-expected.pngbin3277 -> 3432 bytes
-rw-r--r--tests/regression/throwntogethertest/resize-tests-expected.pngbin5116 -> 5616 bytes
-rwxr-xr-xtests/test_cmdline_tool.py1
-rw-r--r--tests/test_pretty_print.cc2
-rwxr-xr-xtests/test_upload.py307
-rw-r--r--tests/throwntogethertest.cc5
-rw-r--r--win.pri7
98 files changed, 1769 insertions, 2097 deletions
diff --git a/README.md b/README.md
index 73eea87..c22871a 100644
--- a/README.md
+++ b/README.md
@@ -119,8 +119,9 @@ Prerequisites:
Then after you've cloned this git repository, run the script that sets up the
environment variables.
- source setenv_mjau.sh
+ source setenv_mac-gcc.sh
+(or setenv_mac-clang.sh if you want to use the clang compiler instead of gcc).
Then run the script to compile all the prerequisite libraries above:
./scripts/macosx-build-dependencies.sh
diff --git a/bison.pri b/bison.pri
index f28c6e0..9dbe4bb 100644
--- a/bison.pri
+++ b/bison.pri
@@ -3,7 +3,7 @@
bison.input = BISONSOURCES
bison.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp
bison.commands = bison -d -p ${QMAKE_FILE_BASE} -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp ${QMAKE_FILE_IN}
- bison.commands += && if [ -e ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ]; then mv ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h ; fi
+ bison.commands += && if [[ -e ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ]] ; then mv ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h ; fi
bison.CONFIG += target_predeps
bison.variable_out = GENERATED_SOURCES
silent:bison.commands = @echo Bison ${QMAKE_FILE_IN} && $$bison.commands
@@ -40,3 +40,6 @@ netbsd* {
QMAKE_YACC = bison
}
}
+
+win32*msvc* {
+}
diff --git a/cgal.pri b/cgal.pri
index 241332a..e61b6de 100644
--- a/cgal.pri
+++ b/cgal.pri
@@ -19,7 +19,7 @@ cgal {
*-g++* {
QMAKE_CXXFLAGS += -frounding-math
}
- LIBS += $$CGAL_DIR/auxiliary/gmp/lib/libmpfr-4.lib -lCGAL-vc90-mt-s
+ LIBS += $$CGAL_DIR/auxiliary/gmp/lib/libmpfr-4.lib -lCGAL-vc110-mt-gd
} else {
LIBS += -lgmp -lmpfr -lCGAL
QMAKE_CXXFLAGS += -frounding-math
diff --git a/doc/openscad.1 b/doc/openscad.1
index 87806f2..bce2e98 100644
--- a/doc/openscad.1
+++ b/doc/openscad.1
@@ -48,9 +48,6 @@ variable's value is an expression, so if this mechanism is used to assign
strings, care has to be taken that the shell does not consume quotation marks.
More than one \fB-D\fP options can be given.
.TP
-.B \-v, \-\-version
-Show version of program.
-.TP
.B \-\-render
If exporting an image, use a full CGAL render. (Default is an OpenCSG compile)
.TP
@@ -72,6 +69,13 @@ If exporting an image, specify the pixel width and height
.B \-\-projection=[o|p]
If exporting an image, specify whether to use orthographic or perspective
projection
+.TP
+.B \-v, \-\-version
+Show version of program.
+.TP
+.B \-\-info
+Show which versions of libraries were used to compile the program, and which
+OpenGL details are discovered.
.SH COMMAND LINE EXAMPLES
.PP
diff --git a/doc/testing.txt b/doc/testing.txt
index 626bae5..ee560a5 100644
--- a/doc/testing.txt
+++ b/doc/testing.txt
@@ -3,8 +3,10 @@ Running regression tests:
Prerequisites: cmake, python, ImageMagick 6.5.9.3 or newer
-First, get a working qmake GUI build. It is used by the tests.
-Next, get MCAD installed by using 'git submodule update --init'
+First, get a working qmake GUI build of the main openscad binary. It is
+used by the tests. Next, get MCAD installed by using
+
+ 'git submodule update --init'
A) Building test environment
@@ -67,44 +69,20 @@ This is almost the same as adding a new regression test:
Migration away from dedicated regression tests:
-----------------------------------------------
-As the main OpenSCAD binary gained the capability to output PNG renderings,
-the necessity for dedicated test binaries went away; for many test, OpenSCAD
-is now directly called, resulting in better test coverage and less code to
-maintain.
-
-So far, the following tests have been fully converted to use the main binary:
-
-* moduledumptest
-* csgtermtest
-* cgalpngtest
-* opencsgtest
-
-Two tests still need an intermediate script that mangles away timestamps and
+This test still needs an intermediate script that mangles away timestamps and
near-zero floating point numbers:
-* dumptest
-* echotest
* cgalstlsanitytest
Some tests are yet to be converted:
* csgtexttest -- verify whether this is not redundant with dumptest
-* throwntogethertest -- should be a .png output mode
These look like tests, but are not actually in use:
* modulecachetest
* cgalcachetest
-In the course of migration, the possibilities of using the OPENSCAD_TESTING
-compile time flag go away; that flag used to strip timestamps out of files,
-to unify float output, and to tweak the file inclusion paths. With that flag
-unused, we get better coverage of the primary code paths, at the cost of
-having to do some normalization in the unit testing process (thus the dumptest
-and echo test scripts). Especially, having a nonstandard MCAD library in the
-user include path can now break things -- but so can having misbehaving
-programs in your PATH.
-
Troubleshooting:
------------------------------
diff --git a/openscad.appdata.xml b/openscad.appdata.xml
new file mode 100644
index 0000000..8334d37
--- /dev/null
+++ b/openscad.appdata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application>
+ <id type="desktop">openscad.desktop</id>
+ <licence>CC0</licence>
+ <summary>The Programmers Solid 3D CAD Modeller</summary>
+ <description>
+ <p>OpenSCAD is a software for creating solid 3D CAD models. Unlike most free software for creating 3D models (such as Blender) it does not focus on the artistic aspects of 3D modelling but instead on the CAD aspects. Thus it might be the application you are looking for when you are planning to create 3D models of machine parts but pretty sure is not what you are looking for when you are more interested in creating computer-animated movies.</p>
+ <p>OpenSCAD is not an interactive modeller. Instead it is something like a 3D-compiler that reads in a script file that describes the object and renders the 3D model from this script file. This gives you (the designer) full control over the modelling process and enables you to easily change any step in the modelling process or make designs that are defined by configurable parameters.</p>
+ <p>OpenSCAD provides two main modelling techniques: First there is constructive solid geometry (aka CSG) and second there is extrusion of 2D outlines. As data exchange format format for this 2D outlines Autocad DXF files are used. In addition to 2D paths for extrusion it is also possible to read design parameters from DXF files. Besides DXF files OpenSCAD can read and create 3D models in the STL and OFF file formats.</p>
+ </description>
+ <screenshots>
+ <screenshot type="default" width="800" height="437">http://www.openscad.org/images/appdata-screenshot-1.png</screenshot>
+ <screenshot type="default" width="800" height="465">http://www.openscad.org/images/appdata-screenshot-2.png</screenshot>
+ </screenshots>
+ <url type="homepage">http://www.openscad.org/</url>
+</application>
diff --git a/scripts/LogicLib.nsh b/scripts/LogicLib.nsh
index 2f8968c..618bde4 100644
--- a/scripts/LogicLib.nsh
+++ b/scripts/LogicLib.nsh
@@ -1,4 +1,5 @@
; NSIS LOGIC LIBRARY - LogicLib.nsh
+; see mingw-file-association.nshmingw-file-association.nsh for license info
; Version 2.6 - 08/12/2007
; By dselkirk@hotmail.com
; and eccles@users.sf.net
diff --git a/scripts/builder.sh b/scripts/builder.sh
index 38a235e..552d559 100755
--- a/scripts/builder.sh
+++ b/scripts/builder.sh
@@ -95,13 +95,9 @@ upload_win_generic()
opts="$opts -u $username"
opts="$opts $filename"
if [ $DRYRUN ]; then
- echo dry run, not uploading to googlecode
- echo google-code upload is disabled / deprecated
echo dry run, not uploading to files.openscad.org
echo scp -v $filename openscad@files.openscad.org:www/
else
- echo google-code upload is disabled / deprecated
- # python ./scripts/googlecode_upload.py -s "$summary" $opts
scp -v $filename openscad@files.openscad.org:www/
fi
}
diff --git a/scripts/googlecode_upload.py b/scripts/googlecode_upload.py
deleted file mode 100755
index c0fe4c9..0000000
--- a/scripts/googlecode_upload.py
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/usr/bin/env python
-# Google Code binary package uploader
-# with Insturctions for uploading packages for OpenSCAD
-#
-# OpenSCAD Usage:
-#
-# 1. get a google account, get it added to the Google Code OpenSCAD project
-# 2. go to https://code.google.com/hosting/settings for username & password
-# -----
-#
-# security note -
-#
-# it's not advisable to use a ~/.netrc file to store your password
-# keep your googlecode password secret
-# only upload from a secure machine
-# user's personal data can be at risk if your account
-# is compromised and a fake openscad were to be uploaded.
-# notify the OpenSCAD maintainer if your computer is stolen or
-# your google account is ever compromised.
-# -----
-# 4. if you are making a Stable Release, check 'docs/release_checklist.txt'
-# 5. create an OpenSCAD package (linux dev snapshot: ./scripts/release-common.sh)
-# 6. Run this to do the upload:
-# export SUMMARY="Linux x86-64 Snapshot" # replace as appropriate
-# export PACKAGEFILE=openscad-2013.01.10.x86-64.tar.gz # replace as appropriate
-# python ./scripts/googlecode_upload.py -s '$SUMMARY' -p openscad $PACKAGEFILE
-# 7. It will ask for username. Use user.name@gmail.com (include the @ mail address)
-# 8. It will ask for password. Copy/paste the password from the https google code settings page above
-# Don't use the big bold password, use the 'plain font' password from the 'machine' line
-# 9. Wait.... (there is no progress meter). It should say 'success' eventually.
-#
-# The rest of this file is original from Google with slight modifications by the
-# OpenSCAD team. Modifications licensed under the same license as the
-# original code from google - the Apache Software License 2.0:
-# http://www.apache.org/licenses/LICENSE-2.0
-
-
-#
-# Copyright 2006, 2007 Google Inc. All Rights Reserved.
-# Author: danderson@google.com (David Anderson)
-#
-# Script for uploading files to a Google Code project.
-#
-# This is intended to be both a useful script for people who want to
-# streamline project uploads and a reference implementation for
-# uploading files to Google Code projects.
-#
-# To upload a file to Google Code, you need to provide a path to the
-# file on your local machine, a small summary of what the file is, a
-# project name, and a valid account that is a member or owner of that
-# project. You can optionally provide a list of labels that apply to
-# the file. The file will be uploaded under the same name that it has
-# in your local filesystem (that is, the "basename" or last path
-# component). Run the script with '--help' to get the exact syntax
-# and available options.
-#
-# Note that the upload script requests that you enter your
-# googlecode.com password. This is NOT your Gmail account password!
-# This is the password you use on googlecode.com for committing to
-# Subversion and uploading files. You can find your password by going
-# to http://code.google.com/hosting/settings when logged in with your
-# Gmail account. If you have already committed to your project's
-# Subversion repository, the script will automatically retrieve your
-# credentials from there (unless disabled, see the output of '--help'
-# for details).
-#
-# If you are looking at this script as a reference for implementing
-# your own Google Code file uploader, then you should take a look at
-# the upload() function, which is the meat of the uploader. You
-# basically need to build a multipart/form-data POST request with the
-# right fields and send it to https://PROJECT.googlecode.com/files .
-# Authenticate the request using HTTP Basic authentication, as is
-# shown below.
-#
-# Licensed under the terms of the Apache Software License 2.0:
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Questions, comments, feature requests and patches are most welcome.
-# Please direct all of these to the Google Code users group:
-# http://groups.google.com/group/google-code-hosting
-
-"""Google Code file uploader script.
-"""
-
-__author__ = 'danderson@google.com (David Anderson)'
-
-import httplib
-import os.path
-import optparse
-import getpass
-import base64
-import sys
-
-
-def upload(file, project_name, user_name, password, summary, labels=None):
- """Upload a file to a Google Code project's file server.
-
- Args:
- file: The local path to the file.
- project_name: The name of your project on Google Code.
- user_name: Your Google account name.
- password: The googlecode.com password for your account.
- Note that this is NOT your global Google Account password!
- summary: A small description for the file.
- labels: an optional list of label strings with which to tag the file.
-
- Returns: a tuple:
- http_status: 201 if the upload succeeded, something else if an
- error occured.
- http_reason: The human-readable string associated with http_status
- file_url: If the upload succeeded, the URL of the file on Google
- Code, None otherwise.
- """
- # The login is the user part of user@gmail.com. If the login provided
- # is in the full user@domain form, strip it down.
- if user_name.endswith('@gmail.com'):
- user_name = user_name[:user_name.index('@gmail.com')]
-
- form_fields = [('summary', summary)]
- if labels is not None:
- form_fields.extend([('label', l.strip()) for l in labels])
-
- content_type, body = encode_upload_request(form_fields, file)
-
- upload_host = '%s.googlecode.com' % project_name
- upload_uri = '/files'
- auth_token = base64.b64encode('%s:%s'% (user_name, password))
- headers = {
- 'Authorization': 'Basic %s' % auth_token,
- 'User-Agent': 'Googlecode.com uploader v0.9.4',
- 'Content-Type': content_type,
- }
-
- server = httplib.HTTPSConnection(upload_host)
- server.request('POST', upload_uri, body, headers)
- resp = server.getresponse()
- server.close()
-
- if resp.status == 201:
- location = resp.getheader('Location', None)
- else:
- location = None
- return resp.status, resp.reason, location
-
-
-def encode_upload_request(fields, file_path):
- """Encode the given fields and file into a multipart form body.
-
- fields is a sequence of (name, value) pairs. file is the path of
- the file to upload. The file will be uploaded to Google Code with
- the same file name.
-
- Returns: (content_type, body) ready for httplib.HTTP instance
- """
- BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla'
- CRLF = '\r\n'
-
- body = []
-
- # Add the metadata about the upload first
- for key, value in fields:
- body.extend(
- ['--' + BOUNDARY,
- 'Content-Disposition: form-data; name="%s"' % key,
- '',
- value,
- ])
-
- # Now add the file itself
- file_name = os.path.basename(file_path)
- f = open(file_path, 'rb')
- file_content = f.read()
- f.close()
-
- body.extend(
- ['--' + BOUNDARY,
- 'Content-Disposition: form-data; name="filename"; filename="%s"'
- % file_name,
- # The upload server determines the mime-type, no need to set it.
- 'Content-Type: application/octet-stream',
- '',
- file_content,
- ])
-
- # Finalize the form body
- body.extend(['--' + BOUNDARY + '--', ''])
-
- return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body)
-
-
-def upload_find_auth(file_path, project_name, summary, labels=None,
- user_name=None, password=None, tries=1):
- """Find credentials and upload a file to a Google Code project's file server.
-
- file_path, project_name, summary, and labels are passed as-is to upload.
-
- Args:
- file_path: The local path to the file.
- project_name: The name of your project on Google Code.
- summary: A small description for the file.
- labels: an optional list of label strings with which to tag the file.
- config_dir: Path to Subversion configuration directory, 'none', or None.
- user_name: Your Google account name.
- tries: How many attempts to make.
- """
- print 'uploading. username: ', user_name
- print 'password detected:', password!=None
- if user_name is None or password is None:
- from netrc import netrc
- authenticators = None
- try:
- authenticators = netrc().authenticators("code.google.com")
- except:
- print "Error accessing netrc authenticator. Trying alternate method"
- if authenticators:
- if user_name is None:
- user_name = authenticators[0]
- if password is None:
- password = authenticators[2]
-
- while tries > 0:
- if user_name is None:
- # Read username if not specified or loaded from svn config, or on
- # subsequent tries.
- sys.stdout.write('Please enter your googlecode.com username: ')
- sys.stdout.flush()
- user_name = sys.stdin.readline().rstrip()
- if password is None:
- # Read password if not loaded from svn config, or on subsequent tries.
- print 'Please enter your googlecode.com password.'
- print '** Note that this is NOT your Gmail account password! **'
- print 'It is the password you use to access Subversion repositories,'
- print 'and can be found here: http://code.google.com/hosting/settings'
- password = getpass.getpass()
-
- status, reason, url = upload(file_path, project_name, user_name, password,
- summary, labels)
- # Returns 403 Forbidden instead of 401 Unauthorized for bad
- # credentials as of 2007-07-17.
- if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]:
- # Rest for another try.
- user_name = password = None
- tries = tries - 1
- else:
- # We're done.
- break
-
- return status, reason, url
-
-
-def main():
- parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY '
- '-p PROJECT [options] FILE')
- parser.add_option('-s', '--summary', dest='summary',
- help='Short description of the file')
- parser.add_option('-p', '--project', dest='project',
- help='Google Code project name')
- parser.add_option('-u', '--user', dest='user',
- help='Your Google Code username')
- #this is a massive security hole. anyone using 'ps' could steal p/w
- #parser.add_option('-w', '--password', dest='password',
- # help='Your Google Code password')
- parser.add_option('-l', '--labels', dest='labels',
- help='An optional list of comma-separated labels to attach '
- 'to the file')
-
- options, args = parser.parse_args()
-
- if os.environ.has_key('OSUPL_PASSWORD'):
- options.password=os.environ['OSUPL_PASSWORD']
- else:
- options.password=None
-
- if not options.summary:
- parser.error('File summary is missing.')
- elif not options.project:
- parser.error('Project name is missing.')
- elif len(args) < 1:
- parser.error('File to upload not provided.')
- elif len(args) > 1:
- parser.error('Only one file may be specified.')
-
- file_path = args[0]
-
- if options.labels:
- labels = options.labels.split(',')
- else:
- labels = None
-
- print 'read arguments'
- status, reason, url = upload_find_auth(file_path, options.project,
- options.summary, labels,
- options.user, options.password)
- if url:
- print 'The file was uploaded successfully.'
- print 'URL: %s' % url
- return 0
- else:
- print 'An error occurred. Your file was not uploaded.'
- print 'Google Code upload server said: %s (%s)' % (reason, status)
- return 1
-
-
-if __name__ == '__main__':
- print sys.argv
- sys.exit(main())
diff --git a/scripts/installer-linux.sh b/scripts/installer-linux.sh
index 8b3fc6d..c3b712b 100755
--- a/scripts/installer-linux.sh
+++ b/scripts/installer-linux.sh
@@ -42,4 +42,7 @@ cp -rv examples/. "$prefix"/share/openscad/examples/
echo "Copying libraries..."
cp -rv libraries/. "$prefix"/share/openscad/libraries/
+echo "Copying support files..."
+cp -rv share/. "$prefix"/share/
+
echo "Installation finished. Have a nice day."
diff --git a/scripts/macosx-build-dependencies.sh b/scripts/macosx-build-dependencies.sh
index de739b8..a257201 100755
--- a/scripts/macosx-build-dependencies.sh
+++ b/scripts/macosx-build-dependencies.sh
@@ -51,7 +51,7 @@ build_qt()
cd $BASEDIR/src
rm -rf qt-everywhere-opensource-src-$version
if [ ! -f qt-everywhere-opensource-src-$version.tar.gz ]; then
- curl -O http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-$version.tar.gz
+ curl -O -L http://download.qt-project.org/official_releases/qt/4.8/4.8.5/qt-everywhere-opensource-src-4.8.5.tar.gz
fi
tar xzf qt-everywhere-opensource-src-$version.tar.gz
cd qt-everywhere-opensource-src-$version
@@ -435,7 +435,7 @@ fi
echo "Using basedir:" $BASEDIR
mkdir -p $SRCDIR $DEPLOYDIR
-build_qt 4.8.4
+build_qt 4.8.5
# NB! For eigen, also update the path in the function
build_eigen 3.1.3
build_gmp 5.1.2
diff --git a/scripts/release-common.sh b/scripts/release-common.sh
index 8a1ed7c..e91c79f 100755
--- a/scripts/release-common.sh
+++ b/scripts/release-common.sh
@@ -332,6 +332,8 @@ case $OS in
-e '/lib(icu.*|stdc.*|audio|CGAL|GLEW|opencsg|png|gmp|gmpxx|mpfr)\.so/ { p; d; };' \
-e 'd;' | xargs cp -vt openscad-$VERSION/lib/openscad/
strip openscad-$VERSION/lib/openscad/*
+ mkdir -p openscad-$VERSION/share/appdata
+ cp openscad.appdata.xml openscad-$VERSION/share/appdata
cp scripts/installer-linux.sh openscad-$VERSION/install.sh
chmod 755 -R openscad-$VERSION/
PACKAGEFILE=openscad-$VERSION.x86-$ARCH.tar.gz
diff --git a/scripts/setenv-unibuild.sh b/scripts/setenv-unibuild.sh
index cb0b0a0..cfcf23d 100644
--- a/scripts/setenv-unibuild.sh
+++ b/scripts/setenv-unibuild.sh
@@ -43,14 +43,23 @@ setenv_common()
setenv_freebsd()
{
+ echo .... freebsd detected.
+ echo .... if you have freebsd >9, it is advisable to install
+ echo .... the clang compiler and re-run this script as
+ echo .... '. ./scripts/setenv-unibuild.sh clang'
setenv_common
QMAKESPEC=freebsd-g++
QTDIR=/usr/local/share/qt4
+ export QMAKESPEC
+ export QTDIR
}
setenv_netbsd()
{
setenv_common
+ echo --- netbsd build situation is complex. it comes with gcc4.5
+ echo --- which is incompatable with updated CGAL.
+ echo --- you may need to hack with newer gcc to make it work
QMAKESPEC=netbsd-g++
QTDIR=/usr/pkg/qt4
PATH=/usr/pkg/qt4/bin:$PATH
@@ -75,6 +84,30 @@ setenv_linux_clang()
echo QMAKESPEC has been modified: $QMAKESPEC
}
+setenv_freebsd_clang()
+{
+ export CC=clang
+ export CXX=clang++
+ export QMAKESPEC=freebsd-clang
+
+ echo CC has been modified: $CC
+ echo CXX has been modified: $CXX
+ echo QMAKESPEC has been modified: $QMAKESPEC
+}
+
+setenv_netbsd_clang()
+{
+ echo --------------------- this is not yet supported. netbsd 6 lacks
+ echo --------------------- certain things needed for clang support
+ export CC=clang
+ export CXX=clang++
+ export QMAKESPEC=./patches/mkspecs/netbsd-clang
+
+ echo CC has been modified: $CC
+ echo CXX has been modified: $CXX
+ echo QMAKESPEC has been modified: $QMAKESPEC
+}
+
clean_note()
{
if [ $QT5_SETUP ]; then
@@ -125,8 +158,14 @@ if [ "`uname | grep -i 'linux\|debian'`" ]; then
fi
elif [ "`uname | grep -i freebsd`" ]; then
setenv_freebsd
+ if [ "`echo $* | grep clang`" ]; then
+ setenv_freebsd_clang
+ fi
elif [ "`uname | grep -i netbsd`" ]; then
setenv_netbsd
+ if [ "`echo $* | grep clang`" ]; then
+ setenv_netbsd_clang
+ fi
else
# guess
setenv_common
diff --git a/scripts/uni-build-dependencies.sh b/scripts/uni-build-dependencies.sh
index 6596c8a..48f162a 100755
--- a/scripts/uni-build-dependencies.sh
+++ b/scripts/uni-build-dependencies.sh
@@ -53,6 +53,16 @@ printUsage()
echo
}
+detect_glu()
+{
+ detect_glu_result=
+ if [ -e $DEPLOYDIR/include/GL/glu.h ]; then detect_glu_result=1; fi
+ if [ -e /usr/include/GL/glu.h ]; then detect_glu_result=1; fi
+ if [ -e /usr/local/include/GL/glu.h ]; then detect_glu_result=1; fi
+ if [ -e /usr/pkg/X11R7/include/GL/glu.h ]; then detect_glu_result=1; fi
+ return
+}
+
build_glu()
{
version=$1
@@ -282,6 +292,7 @@ build_cgal()
echo "Building CGAL" $version "..."
cd $BASEDIR/src
rm -rf CGAL-$version
+ ver4_2="curl --insecure -O https://gforge.inria.fr/frs/download.php/32360/CGAL-4.2.tar.bz2"
ver4_1="curl --insecure -O https://gforge.inria.fr/frs/download.php/31640/CGAL-4.1.tar.bz2"
ver4_0_2="curl --insecure -O https://gforge.inria.fr/frs/download.php/31174/CGAL-4.0.2.tar.bz2"
ver4_0="curl --insecure -O https://gforge.inria.fr/frs/download.php/30387/CGAL-4.0.tar.gz"
@@ -289,7 +300,7 @@ build_cgal()
ver3_8="curl --insecure -O https://gforge.inria.fr/frs/download.php/28500/CGAL-3.8.tar.gz"
ver3_7="curl --insecure -O https://gforge.inria.fr/frs/download.php/27641/CGAL-3.7.tar.gz"
vernull="echo already downloaded..skipping"
- download_cmd=ver`echo $version | sed s/"\."/"_"/`
+ download_cmd=ver`echo $version | sed s/"\."/"_"/ | sed s/"\."/"_"/`
if [ -e CGAL-$version.tar.gz ]; then
download_cmd=vernull;
@@ -298,6 +309,7 @@ build_cgal()
download_cmd=vernull;
fi
+ eval echo "$"$download_cmd
`eval echo "$"$download_cmd`
zipper=gzip
@@ -436,7 +448,8 @@ build_opencsg()
cp src/Makefile src/Makefile.bak2
cat src/Makefile.bak2 | sed s@^LIBS.*@LIBS\ =\ -L$BASEDIR/lib\ -L/usr/X11R6/lib\ -lGLU\ -lGL@ > src/Makefile
tmp=$version
- build_glu 9.0.0 # todo - autodetect the need for glu
+ detect_glu
+ if [ ! $detect_glu_result ]; then build_glu 9.0.0 ; fi
version=$tmp
fi
@@ -563,7 +576,7 @@ if [ $1 ]; then
exit $?
fi
if [ $1 = "cgal" ]; then
- build_cgal 4.1 use-sys-libs
+ build_cgal 4.0.2 use-sys-libs
exit $?
fi
if [ $1 = "opencsg" ]; then
@@ -583,6 +596,8 @@ if [ $1 ]; then
fi
+# todo - cgal 4.02 for gcc<4.7, gcc 4.2 for above
+
#
# Main build of libraries
# edit version numbers here as needed.
@@ -592,7 +607,7 @@ build_gmp 5.0.5
build_mpfr 3.1.1
build_boost 1.53.0
# NB! For CGAL, also update the actual download URL in the function
-build_cgal 4.1
+build_cgal 4.0.2
build_glew 1.9.0
build_opencsg 1.3.2
diff --git a/scripts/x64.nsh b/scripts/x64.nsh
index e694c1e..9b69ff0 100644
--- a/scripts/x64.nsh
+++ b/scripts/x64.nsh
@@ -1,6 +1,7 @@
; ---------------------
; x64.nsh
; ---------------------
+; see mingw-file-association.nshmingw-file-association.nsh for license info
;
; A few simple macros to handle installations on x64 machines.
;
diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc
index adaec4a..ec01315 100644
--- a/src/CGALEvaluator.cc
+++ b/src/CGALEvaluator.cc
@@ -216,7 +216,7 @@ CGAL_Nef_polyhedron CGALEvaluator::applyResize(const CgaladvNode &node)
bbox_size.push_back( bb.ymax()-bb.ymin() );
bbox_size.push_back( bb.zmax()-bb.zmin() );
int newsizemax_index = 0;
- for (int i=0;i<3;i++) {
+ for (int i=0;i<N.dim;i++) {
if (node.newsize[i]) {
if (bbox_size[i]==NT3(0)) {
PRINT("WARNING: Resize in direction normal to flat object is not implemented");
@@ -229,8 +229,11 @@ CGAL_Nef_polyhedron CGALEvaluator::applyResize(const CgaladvNode &node)
newsizemax_index = i;
}
}
- NT3 autoscale = NT3( node.newsize[ newsizemax_index ] ) / bbox_size[ newsizemax_index ];
- for (int i=0;i<3;i++) {
+
+ NT3 autoscale = NT3( 1 );
+ if ( node.newsize[ newsizemax_index ] != 0 )
+ autoscale = NT3( node.newsize[ newsizemax_index ] ) / bbox_size[ newsizemax_index ];
+ for (int i=0;i<N.dim;i++) {
if (node.autosize[i] && node.newsize[i]==0)
scale[i] = autoscale;
}
diff --git a/src/Camera.h b/src/Camera.h
index dfc71f8..6079672 100644
--- a/src/Camera.h
+++ b/src/Camera.h
@@ -47,7 +47,8 @@ public:
projection = Camera::PERSPECTIVE;
}
- void setup( std::vector<double> params ) {
+ void setup( std::vector<double> params )
+ {
if ( params.size() == 7 ) {
type = Camera::GIMBAL;
object_trans << params[0], params[1], params[2];
@@ -62,6 +63,16 @@ public:
}
}
+ void gimbalDefaultTranslate()
+ { // match the GUI viewport numbers (historical reasons)
+ object_trans.x() *= -1;
+ object_trans.y() *= -1;
+ object_trans.z() *= -1;
+ object_rot.x() = fmodf(360 - object_rot.x() + 90, 360 );
+ object_rot.y() = fmodf(360 - object_rot.y(), 360);
+ object_rot.z() = fmodf(360 - object_rot.z(), 360);
+ }
+
// Vectorcam
Eigen::Vector3d eye;
Eigen::Vector3d center; // (aka 'target')
diff --git a/src/GLView.cc b/src/GLView.cc
index b4fb8d6..1cfe82c 100644
--- a/src/GLView.cc
+++ b/src/GLView.cc
@@ -2,6 +2,7 @@
#include "stdio.h"
#include "rendersettings.h"
+#include "mathc99.h"
#ifdef _WIN32
#include <GL/wglew.h>
@@ -459,7 +460,7 @@ void GLView::showAxes()
void GLView::showCrosshairs()
{
- // FIXME: this might not work with Vector camera
+ // FIXME: this might not work with Vector camera
// FIXME: Crosshairs and axes are lighted, this doesn't make sense and causes them
// to change color based on view orientation.
glLineWidth(3);
diff --git a/src/MainWindow.h b/src/MainWindow.h
index 79e2080..4f88fbf 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -54,6 +54,7 @@ public:
std::vector<shared_ptr<CSGTerm> > background_terms;
CSGChain *background_chain;
QString last_compiled_doc;
+ static QString qexamplesdir;
static const int maxRecentFiles = 10;
QAction *actionRecentFile[maxRecentFiles];
@@ -134,6 +135,7 @@ private slots:
void actionFlushCaches();
public:
+ static void setExamplesDir(const QString &dir) { MainWindow::qexamplesdir = dir; }
void viewModeActionsUncheck();
void setCurrentOutput();
void clearCurrentOutput();
@@ -201,7 +203,7 @@ public:
static void unlock() { gui_locked--; }
private:
- static unsigned int gui_locked;
+ static unsigned int gui_locked;
};
#endif
diff --git a/src/OpenCSGRenderer.cc b/src/OpenCSGRenderer.cc
index b4acf82..e65a259 100644
--- a/src/OpenCSGRenderer.cc
+++ b/src/OpenCSGRenderer.cc
@@ -77,8 +77,8 @@ void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo,
std::vector<OpenCSG::Primitive*> primitives;
size_t j = 0;
for (size_t i = 0;; i++) {
- const CSGChainObject &i_obj = chain->objects[i];
bool last = i == chain->objects.size();
+ const CSGChainObject &i_obj = last ? chain->objects[i-1] : chain->objects[i];
if (last || i_obj.type == CSGTerm::TYPE_UNION) {
if (j+1 != i) {
OpenCSG::render(primitives);
diff --git a/src/PlatformUtils.cc b/src/PlatformUtils.cc
index 5dd007d..5059b78 100644
--- a/src/PlatformUtils.cc
+++ b/src/PlatformUtils.cc
@@ -38,3 +38,84 @@ std::string PlatformUtils::libraryPath()
}
return boosty::stringy( path );
}
+
+#include "version_check.h"
+#define STRINGIFY(x) #x
+#define TOSTRING(x) STRINGIFY(x)
+
+#ifdef ENABLE_CGAL
+#include "cgal.h"
+#include <boost/algorithm/string.hpp>
+#if defined(__GNUG__)
+#define GCC_INT_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 )
+#if GCC_INT_VERSION > 40600 || defined(__clang__)
+#include <cxxabi.h>
+#define __openscad_info_demangle__ 1
+#endif // GCC_INT_VERSION
+#endif // GNUG
+#endif // ENABLE_CGAL
+
+std::string PlatformUtils::info()
+{
+ std::stringstream s;
+
+#if defined(__GNUG__) && !defined(__clang__)
+ std::string compiler_info( "GCC " + std::string(TOSTRING(__VERSION__)) );
+#elif defined(_MSC_VER)
+ std::string compiler_info( "MSVC " + std::string(TOSTRING(_MSC_FULL_VER)) );
+#elif defined(__clang__)
+ std::string compiler_info( "Clang " + std::string(TOSTRING(__clang_version__)) );
+#else
+ std::string compiler_info( "unknown compiler" );
+#endif
+
+#if defined( __MINGW64__ )
+ std::string mingwstatus("MingW64");
+#elif defined( __MINGW32__ )
+ std::string mingwstatus("MingW32");
+#else
+ std::string mingwstatus("No");
+#endif
+
+#ifndef OPENCSG_VERSION_STRING
+#define OPENCSG_VERSION_STRING "unknown, <1.3.2"
+#endif
+
+#ifdef QT_VERSION
+ std::string qtVersion = qVersion();
+#else
+ std::string qtVersion = "Qt disabled";
+#endif
+
+#ifdef ENABLE_CGAL
+ std::string cgal_3d_kernel = typeid(CGAL_Kernel3).name();
+ std::string cgal_2d_kernel = typeid(CGAL_Kernel2).name();
+ std::string cgal_2d_kernelEx = typeid(CGAL_ExactKernel2).name();
+#if defined(__openscad_info_demangle__)
+ int status;
+ cgal_3d_kernel = std::string( abi::__cxa_demangle( cgal_3d_kernel.c_str(), 0, 0, &status ) );
+ cgal_2d_kernel = std::string( abi::__cxa_demangle( cgal_2d_kernel.c_str(), 0, 0, &status ) );
+ cgal_2d_kernelEx = std::string( abi::__cxa_demangle( cgal_2d_kernelEx.c_str(), 0, 0, &status ) );
+#endif // demangle
+ boost::replace_all( cgal_3d_kernel, "CGAL::", "" );
+ boost::replace_all( cgal_2d_kernel, "CGAL::", "" );
+ boost::replace_all( cgal_2d_kernelEx, "CGAL::", "" );
+#else // ENABLE_CGAL
+ std::string cgal_3d_kernel = "";
+ std::string cgal_2d_kernel = "";
+ std::string cgal_2d_kernelEx = "";
+#endif // ENABLE_CGAL
+
+ s << "OpenSCAD Version: " << TOSTRING(OPENSCAD_VERSION)
+ << "\nCompiler, build date: " << compiler_info << ", " << __DATE__
+ << "\nBoost version: " << BOOST_LIB_VERSION
+ << "\nEigen version: " << EIGEN_WORLD_VERSION << "." << EIGEN_MAJOR_VERSION << "." << EIGEN_MINOR_VERSION
+ << "\nCGAL version, kernels: " << TOSTRING(CGAL_VERSION) << ", " << cgal_3d_kernel << ", " << cgal_2d_kernel << ", " << cgal_2d_kernelEx
+ << "\nOpenCSG version: " << OPENCSG_VERSION_STRING
+ << "\nQt version: " << qtVersion
+ << "\nMingW build: " << mingwstatus
+ << "\nOPENSCADPATH: " << getenv("OPENSCADPATH")
+ ;
+ return s.str();
+}
+
diff --git a/src/PlatformUtils.h b/src/PlatformUtils.h
index 089b3ca..18dd5fa 100644
--- a/src/PlatformUtils.h
+++ b/src/PlatformUtils.h
@@ -8,7 +8,7 @@ namespace PlatformUtils {
std::string documentsPath();
std::string libraryPath();
bool createLibraryPath();
-
+ std::string info();
}
#endif
diff --git a/src/QGLView.cc b/src/QGLView.cc
index b23ba8e..8aaeaf2 100644
--- a/src/QGLView.cc
+++ b/src/QGLView.cc
@@ -147,13 +147,18 @@ void QGLView::resizeGL(int w, int h)
void QGLView::paintGL()
{
- GLView::gimbalCamPaintGL();
+ GLView::gimbalCamPaintGL();
if (statusLabel) {
QString msg;
+
+ Camera nc( cam );
+ nc.gimbalDefaultTranslate();
msg.sprintf("Viewport: translate = [ %.2f %.2f %.2f ], rotate = [ %.2f %.2f %.2f ], distance = %.2f",
- -cam.object_trans.x(), -cam.object_trans.y(), -cam.object_trans.z(),
- fmodf(360 - cam.object_rot.x() + 90, 360), fmodf(360 - cam.object_rot.y(), 360), fmodf(360 - cam.object_rot.z(), 360), cam.viewer_distance);
+ nc.object_trans.x(), nc.object_trans.y(), nc.object_trans.z(),
+ nc.object_rot.x(), nc.object_rot.y(), nc.object_rot.z(),
+ nc.viewer_distance );
+
statusLabel->setText(msg);
}
diff --git a/src/context.cc b/src/context.cc
index a7273a4..b5420ff 100644
--- a/src/context.cc
+++ b/src/context.cc
@@ -38,6 +38,13 @@ namespace fs = boost::filesystem;
std::vector<const Context*> Context::ctx_stack;
+// $children is not a config_variable. config_variables have dynamic scope,
+// meaning they are passed down the call chain implicitly.
+// $children is simply misnamed and shouldn't have included the '$'.
+static bool is_config_variable(const std::string &name) {
+ return name[0] == '$' && name != "$children";
+}
+
/*!
Initializes this context. Optionally initializes a context for an external library
*/
@@ -80,10 +87,8 @@ void Context::setVariables(const AssignmentList &args,
void Context::set_variable(const std::string &name, const Value &value)
{
- if (name[0] == '$')
- this->config_variables[name] = value;
- else
- this->variables[name] = value;
+ if (is_config_variable(name)) this->config_variables[name] = value;
+ else this->variables[name] = value;
}
void Context::set_constant(const std::string &name, const Value &value)
@@ -98,7 +103,7 @@ void Context::set_constant(const std::string &name, const Value &value)
Value Context::lookup_variable(const std::string &name, bool silent) const
{
- if (name[0] == '$') {
+ if (is_config_variable(name)) {
for (int i = ctx_stack.size()-1; i >= 0; i--) {
const ValueMap &confvars = ctx_stack[i]->config_variables;
if (confvars.find(name) != confvars.end())
diff --git a/src/control.cc b/src/control.cc
index c5ad09b..50e5eae 100644
--- a/src/control.cc
+++ b/src/control.cc
@@ -31,6 +31,7 @@
#include "builtin.h"
#include "printutils.h"
#include <sstream>
+#include "mathc99.h"
enum control_type_e {
CHILD,
diff --git a/src/export.h b/src/export.h
index a565561..5dae7e0 100644
--- a/src/export.h
+++ b/src/export.h
@@ -12,6 +12,7 @@ void export_off(CGAL_Nef_polyhedron *root_N, std::ostream &output);
void export_dxf(CGAL_Nef_polyhedron *root_N, std::ostream &output);
void export_png_with_cgal(CGAL_Nef_polyhedron *root_N, Camera &c, std::ostream &output);
void export_png_with_opencsg(Tree &tree, Camera &c, std::ostream &output);
+void export_png_with_throwntogether(Tree &tree, Camera &c, std::ostream &output);
#endif
diff --git a/src/export_png.cc b/src/export_png.cc
index c6c191c..6d64d65 100644
--- a/src/export_png.cc
+++ b/src/export_png.cc
@@ -41,26 +41,25 @@ void export_png_with_cgal(CGAL_Nef_polyhedron *root_N, Camera &cam, std::ostream
cam.eye = cam.center - radius*2*cameradir;
}
- //std::cerr << center << "\n";
- //std::cerr << radius << "\n";
-
glview->setCamera( cam );
glview->setRenderer(&cgalRenderer);
glview->paintGL();
glview->save(output);
}
+enum Previewer { OPENCSG, THROWN } previewer;
+
#ifdef ENABLE_OPENCSG
#include "OpenCSGRenderer.h"
#include <opencsg.h>
#endif
+#include "ThrownTogetherRenderer.h"
-void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
+void export_png_preview_common( Tree &tree, Camera &cam, std::ostream &output, Previewer previewer = OPENCSG )
{
-#ifdef ENABLE_OPENCSG
- CsgInfo csgInfo = CsgInfo();
- if ( !csgInfo.compile_chains( tree ) ) {
- fprintf(stderr,"Couldn't initialize OpenCSG chains\n");
+ CsgInfo csgInfo = CsgInfo();
+ if ( !csgInfo.compile_chains( tree ) ) {
+ fprintf(stderr,"Couldn't initialize CSG chains\n");
return;
}
@@ -71,7 +70,10 @@ void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
return;
}
- OpenCSGRenderer opencsgRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain, csgInfo.glview->shaderinfo);
+#ifdef ENABLE_OPENCSG
+ OpenCSGRenderer openCSGRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain, csgInfo.glview->shaderinfo);
+#endif
+ ThrownTogetherRenderer thrownTogetherRenderer( csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain );
if (cam.type == Camera::NONE) {
cam.type = Camera::VECTOR;
@@ -86,15 +88,31 @@ void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
}
csgInfo.glview->setCamera( cam );
- csgInfo.glview->setRenderer(&opencsgRenderer);
- OpenCSG::setContext(0);
- OpenCSG::setOption(OpenCSG::OffscreenSetting, OpenCSG::FrameBufferObject);
+ if ( previewer == OPENCSG )
+ csgInfo.glview->setRenderer( &openCSGRenderer );
+ else
+ csgInfo.glview->setRenderer( &thrownTogetherRenderer );
+#ifdef ENABLE_OPENCSG
+ OpenCSG::setContext( 0 );
+ OpenCSG::setOption( OpenCSG::OffscreenSetting, OpenCSG::FrameBufferObject );
+#endif
csgInfo.glview->paintGL();
- csgInfo.glview->save(output);
+ csgInfo.glview->save( output );
+}
+
+void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
+{
+#ifdef ENABLE_OPENCSG
+ export_png_preview_common( tree, cam, output, OPENCSG );
#else
fprintf(stderr,"This openscad was built without OpenCSG support\n");
#endif
}
+void export_png_with_throwntogether(Tree &tree, Camera &cam, std::ostream &output)
+{
+ export_png_preview_common( tree, cam, output, THROWN );
+}
+
#endif // ENABLE_CGAL
diff --git a/src/imageutils-lodepng.cc b/src/imageutils-lodepng.cc
index cd104d6..a71a017 100644
--- a/src/imageutils-lodepng.cc
+++ b/src/imageutils-lodepng.cc
@@ -9,7 +9,12 @@
bool write_png(std::ostream &output, unsigned char *pixels, int width, int height)
{
std::vector<unsigned char> dataout;
- unsigned err = lodepng::encode(dataout, pixels, width, height, LCT_RGBA, 8);
+ lodepng::State state;
+ state.encoder.auto_convert = LAC_NO;
+ // some png renderers have different interpretations of alpha, so don't use it
+ state.info_png.color.colortype = LCT_RGB;
+ state.info_png.color.bitdepth = 8;
+ unsigned err = lodepng::encode(dataout, pixels, width, height, state);
if ( err ) return false;
output.write( reinterpret_cast<const char *>(&dataout[0]), dataout.size());
if ( output.bad() ) std::cerr << "Error writing to ostream\n";
diff --git a/src/import.cc b/src/import.cc
index b5d67d2..3897331 100644
--- a/src/import.cc
+++ b/src/import.cc
@@ -212,7 +212,9 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const
#ifdef BOOST_BIG_ENDIAN
uint32_byte_swap( facenum );
#endif
- if (file_size == 80 + 4 + 50*facenum) binary = true;
+ if (file_size == static_cast<std::streamoff>(80 + 4 + 50*facenum)) {
+ binary = true;
+ }
}
f.seekg(0);
diff --git a/src/mainwin.cc b/src/mainwin.cc
index 3d50d6f..65c511f 100644
--- a/src/mainwin.cc
+++ b/src/mainwin.cc
@@ -27,7 +27,6 @@
#include "PolySetCache.h"
#include "ModuleCache.h"
#include "MainWindow.h"
-#include "openscad.h" // examplesdir
#include "parsersettings.h"
#include "Preferences.h"
#include "printutils.h"
@@ -101,16 +100,11 @@
#endif // ENABLE_CGAL
-#ifndef OPENCSG_VERSION_STRING
-#define OPENCSG_VERSION_STRING "unknown, <1.3.2"
-#endif
-
#include "boosty.h"
-extern QString examplesdir;
-
// Global application state
unsigned int GuiLocker::gui_locked = 0;
+QString MainWindow::qexamplesdir;
#define QUOTE(x__) # x__
#define QUOTED(x__) QUOTE(x__)
@@ -257,10 +251,9 @@ MainWindow::MainWindow(const QString &filename)
this->menuOpenRecent->addAction(this->fileActionClearRecent);
connect(this->fileActionClearRecent, SIGNAL(triggered()),
this, SLOT(clearRecentFiles()));
-
- if (!examplesdir.isEmpty()) {
+ if (!qexamplesdir.isEmpty()) {
bool found_example = false;
- QStringList examples = QDir(examplesdir).entryList(QStringList("*.scad"),
+ QStringList examples = QDir(qexamplesdir).entryList(QStringList("*.scad"),
QDir::Files | QDir::Readable, QDir::Name);
foreach (const QString &ex, examples) {
this->menuExamples->addAction(ex, this, SLOT(actionOpenExample()));
@@ -636,7 +629,9 @@ void MainWindow::compile(bool reload, bool forcedone)
// if we haven't yet compiled the current text.
else {
QString current_doc = editor->toPlainText();
- if (current_doc != last_compiled_doc) shouldcompiletoplevel = true;
+ if (current_doc != last_compiled_doc && last_compiled_doc.size() == 0) {
+ shouldcompiletoplevel = true;
+ }
}
}
else {
@@ -987,7 +982,7 @@ void MainWindow::actionOpenExample()
{
QAction *action = qobject_cast<QAction *>(sender());
if (action) {
- openFile(examplesdir + QDir::separator() + action->text());
+ openFile(qexamplesdir + QDir::separator() + action->text());
}
}
@@ -1828,34 +1823,16 @@ MainWindow::helpManual()
QDesktopServices::openUrl(QUrl("http://www.openscad.org/documentation.html"));
}
-#define STRINGIFY(x) #x
-#define TOSTRING(x) STRINGIFY(x)
void MainWindow::helpLibrary()
{
- QString libinfo;
- libinfo.sprintf("Boost version: %s\n"
- "Eigen version: %d.%d.%d\n"
- "CGAL version: %s\n"
- "OpenCSG version: %s\n"
- "Qt version: %s\n\n",
- BOOST_LIB_VERSION,
- EIGEN_WORLD_VERSION, EIGEN_MAJOR_VERSION, EIGEN_MINOR_VERSION,
- TOSTRING(CGAL_VERSION),
- OPENCSG_VERSION_STRING,
- qVersion());
-
-#if defined( __MINGW64__ )
- libinfo += QString("Compiled for MingW64\n\n");
-#elif defined( __MINGW32__ )
- libinfo += QString("Compiled for MingW32\n\n");
-#endif
-
+ QString info( PlatformUtils::info().c_str() );
+ info += QString( qglview->getRendererInfo().c_str() );
if (!this->openglbox) {
- this->openglbox = new QMessageBox(QMessageBox::Information,
- "OpenGL Info", "OpenSCAD Detailed Library Info ",
+ this->openglbox = new QMessageBox(QMessageBox::Information,
+ "OpenGL Info", "OpenSCAD Detailed Library and Build Information",
QMessageBox::Ok, this);
}
- this->openglbox->setDetailedText(libinfo + QString(qglview->getRendererInfo().c_str()));
+ this->openglbox->setDetailedText( info );
this->openglbox->show();
}
diff --git a/src/mathc99.cc b/src/mathc99.cc
index 335446e..13f4c64 100644
--- a/src/mathc99.cc
+++ b/src/mathc99.cc
@@ -3,8 +3,12 @@
#ifdef WIN32
#include <algorithm>
+double trunc(double a) {
+ return (a >= 0) ? floor(a) : ceil(a);
+}
+
double round(double a) {
- return a > 0 ? floor(a+0.5) : ceil(a-0.5);
+ return a < 0 ? ceil(a - 0.5f) : floor(a + 0.5f);
}
float fmin(float a, float b) {
diff --git a/src/mathc99.h b/src/mathc99.h
index ebc2d66..ae31a22 100644
--- a/src/mathc99.h
+++ b/src/mathc99.h
@@ -5,6 +5,7 @@
#include <cmath>
//for native win32 builds we need to provide C99 math functions by ourselves
+double trunc(double a);
double round(double a);
float fmin(float a, float b);
float fmax(float a, float b);
diff --git a/src/module.cc b/src/module.cc
index 9c3541f..e3a992b 100644
--- a/src/module.cc
+++ b/src/module.cc
@@ -182,10 +182,12 @@ AbstractNode *Module::instantiate(const Context *ctx, const ModuleInstantiation
}
ModuleContext c(ctx, evalctx);
+ // set $children first since we might have variables depending on it
+ c.set_variable("$children", Value(double(inst->scope.children.size())));
c.initializeModule(*this);
module_stack.push_back(inst->name());
c.set_variable("$parent_modules", Value(double(module_stack.size())));
- c.set_variable("$children", Value(double(inst->scope.children.size())));
+ c.initializeModule(*this);
// FIXME: Set document path to the path of the module
#if 0 && DEBUG
c.dump(this, inst);
diff --git a/src/openscad.cc b/src/openscad.cc
index e657cb0..f4f4014 100644
--- a/src/openscad.cc
+++ b/src/openscad.cc
@@ -25,18 +25,18 @@
*/
#include "openscad.h"
-#include "MainWindow.h"
#include "node.h"
#include "module.h"
#include "modcontext.h"
#include "value.h"
#include "export.h"
#include "builtin.h"
-#include "nodedumper.h"
#include "printutils.h"
#include "handle_dep.h"
#include "parsersettings.h"
#include "rendersettings.h"
+#include "PlatformUtils.h"
+#include "nodedumper.h"
#include <string>
#include <vector>
@@ -50,14 +50,11 @@
#include "csgterm.h"
#include "CSGTermEvaluator.h"
+#include "CsgInfo.h"
-#include <QApplication>
-#include <QString>
-#include <QDir>
#include <sstream>
-#ifdef Q_WS_MAC
-#include "EventFilter.h"
+#ifdef __APPLE__
#include "AppleEvents.h"
#ifdef OPENSCAD_DEPLOY
#include "SparkleAutoUpdater.h"
@@ -77,17 +74,40 @@
namespace po = boost::program_options;
namespace fs = boost::filesystem;
+namespace Render { enum type { CGAL, OPENCSG, THROWNTOGETHER }; };
+std::string commandline_commands;
+std::string currentdir;
+using std::string;
+using std::vector;
+using boost::lexical_cast;
+using boost::is_any_of;
+
+class Echostream : public std::ofstream
+{
+public:
+ Echostream( const char * filename ) : std::ofstream( filename ) {
+ set_output_handler( &Echostream::output, this );
+ }
+ static void output( const std::string &msg, void *userdata ) {
+ Echostream *thisp = static_cast<Echostream*>(userdata);
+ *thisp << msg << "\n";
+ }
+ ~Echostream() {
+ this->close();
+ }
+};
static void help(const char *progname)
{
int tab = int(strlen(progname))+8;
fprintf(stderr,"Usage: %s [ -o output_file [ -d deps_file ] ]\\\n"
- "%*s[ -m make_command ] [ -D var=val [..] ] [ --render ] \\\n"
+ "%*s[ -m make_command ] [ -D var=val [..] ] \\\n"
"%*s[ --camera=translatex,y,z,rotx,y,z,dist | \\\n"
"%*s --camera=eyex,y,z,centerx,y,z ] \\\n"
"%*s[ --imgsize=width,height ] [ --projection=(o)rtho|(p)ersp] \\\n"
+ "%*s[ --render | --preview[=throwntogether] ] \\\n"
"%*sfilename\n",
- progname, tab, "", tab, "", tab, "", tab, "", tab, "");
+ progname, tab, "", tab, "", tab, "", tab, "", tab, "", tab, "");
exit(1);
}
@@ -99,14 +119,22 @@ static void version()
exit(1);
}
-std::string commandline_commands;
-std::string currentdir;
-QString examplesdir;
+static void info()
+{
+ std::cout << PlatformUtils::info() << "\n\n";
-using std::string;
-using std::vector;
-using boost::lexical_cast;
-using boost::is_any_of;
+ CsgInfo csgInfo = CsgInfo();
+ try {
+ csgInfo.glview = new OffscreenView(512,512);
+ } catch (int error) {
+ fprintf(stderr,"Can't create OpenGL OffscreenView. Code: %i. Exiting.\n", error);
+ exit(1);
+ }
+
+ std::cout << csgInfo.glview->getRendererInfo() << "\n";
+
+ exit(0);
+}
Camera get_camera( po::variables_map vm )
{
@@ -127,6 +155,10 @@ Camera get_camera( po::variables_map vm )
}
}
+ if (camera.type == Camera::GIMBAL) {
+ camera.gimbalDefaultTranslate();
+ }
+
if (vm.count("projection")) {
string proj = vm["projection"].as<string>();
if (proj=="o" || proj=="ortho" || proj=="orthogonal")
@@ -158,17 +190,257 @@ Camera get_camera( po::variables_map vm )
return camera;
}
-int main(int argc, char **argv)
+int cmdline(const char *deps_output_file, const std::string &filename, Camera &camera, const char *output_file, const fs::path &original_path, Render::type renderer, char ** argv )
{
- int rc = 0;
+ parser_init(boosty::stringy(boost::filesystem::path( argv[0] ).parent_path()));
+ Tree tree;
+#ifdef ENABLE_CGAL
+ CGALEvaluator cgalevaluator(tree);
+ PolySetCGALEvaluator psevaluator(cgalevaluator);
+#endif
+ const char *stl_output_file = NULL;
+ const char *off_output_file = NULL;
+ const char *dxf_output_file = NULL;
+ const char *csg_output_file = NULL;
+ const char *png_output_file = NULL;
+ const char *ast_output_file = NULL;
+ const char *term_output_file = NULL;
+ const char *echo_output_file = NULL;
+
+ std::string suffix = boosty::extension_str( output_file );
+ boost::algorithm::to_lower( suffix );
+
+ if (suffix == ".stl") stl_output_file = output_file;
+ else if (suffix == ".off") off_output_file = output_file;
+ else if (suffix == ".dxf") dxf_output_file = output_file;
+ else if (suffix == ".csg") csg_output_file = output_file;
+ else if (suffix == ".png") png_output_file = output_file;
+ else if (suffix == ".ast") ast_output_file = output_file;
+ else if (suffix == ".term") term_output_file = output_file;
+ else if (suffix == ".echo") echo_output_file = output_file;
+ else {
+ fprintf(stderr, "Unknown suffix for output file %s\n", output_file);
+ return 1;
+ }
+
+ // Top context - this context only holds builtins
+ ModuleContext top_ctx;
+ top_ctx.registerBuiltin();
+#if 0 && DEBUG
+ top_ctx.dump(NULL, NULL);
+#endif
+ shared_ptr<Echostream> echostream;
+ if (echo_output_file)
+ echostream.reset( new Echostream( echo_output_file ) );
+
+ FileModule *root_module;
+ ModuleInstantiation root_inst("group");
+ AbstractNode *root_node;
+ AbstractNode *absolute_root_node;
+ CGAL_Nef_polyhedron root_N;
+
+ handle_dep(filename.c_str());
+
+ std::ifstream ifs(filename.c_str());
+ if (!ifs.is_open()) {
+ fprintf(stderr, "Can't open input file '%s'!\n", filename.c_str());
+ return 1;
+ }
+ std::string text((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
+ text += "\n" + commandline_commands;
+ fs::path abspath = boosty::absolute(filename);
+ std::string parentpath = boosty::stringy(abspath.parent_path());
+ root_module = parse(text.c_str(), parentpath.c_str(), false);
+ if (!root_module) {
+ fprintf(stderr, "Can't parse file '%s'!\n", filename.c_str());
+ return 1;
+ }
+ root_module->handleDependencies();
+
+ fs::path fpath = boosty::absolute(fs::path(filename));
+ fs::path fparent = fpath.parent_path();
+ fs::current_path(fparent);
+ top_ctx.setDocumentPath(fparent.string());
+
+ AbstractNode::resetIndexCounter();
+ absolute_root_node = root_module->instantiate(&top_ctx, &root_inst, NULL);
+
+ // Do we have an explicit root node (! modifier)?
+ if (!(root_node = find_root_tag(absolute_root_node)))
+ root_node = absolute_root_node;
+ tree.setRoot(root_node);
+
+ if (csg_output_file) {
+ fs::current_path(original_path);
+ std::ofstream fstream(csg_output_file);
+ if (!fstream.is_open()) {
+ PRINTB("Can't open file \"%s\" for export", csg_output_file);
+ }
+ else {
+ fs::current_path(fparent); // Force exported filenames to be relative to document path
+ fstream << tree.getString(*root_node) << "\n";
+ fstream.close();
+ }
+ }
+ else if (ast_output_file) {
+ fs::current_path(original_path);
+ std::ofstream fstream(ast_output_file);
+ if (!fstream.is_open()) {
+ PRINTB("Can't open file \"%s\" for export", ast_output_file);
+ }
+ else {
+ fs::current_path(fparent); // Force exported filenames to be relative to document path
+ fstream << root_module->dump("", "") << "\n";
+ fstream.close();
+ }
+ }
+ else if (term_output_file) {
+ std::vector<shared_ptr<CSGTerm> > highlight_terms;
+ std::vector<shared_ptr<CSGTerm> > background_terms;
+
+ CSGTermEvaluator csgRenderer(tree, &psevaluator);
+ shared_ptr<CSGTerm> root_raw_term = csgRenderer.evaluateCSGTerm(*root_node, highlight_terms, background_terms);
+
+ fs::current_path(original_path);
+ std::ofstream fstream(term_output_file);
+ if (!fstream.is_open()) {
+ PRINTB("Can't open file \"%s\" for export", term_output_file);
+ }
+ else {
+ if (!root_raw_term)
+ fstream << "No top-level CSG object\n";
+ else {
+ fstream << root_raw_term->dump() << "\n";
+ }
+ fstream.close();
+ }
+ }
+ else {
#ifdef ENABLE_CGAL
- // Causes CGAL errors to abort directly instead of throwing exceptions
- // (which we don't catch). This gives us stack traces without rerunning in gdb.
- CGAL::set_error_behaviour(CGAL::ABORT);
+ if ((echo_output_file || png_output_file) && !(renderer==Render::CGAL)) {
+ // echo or OpenCSG png -> don't necessarily need CGALMesh evaluation
+ } else {
+ root_N = cgalevaluator.evaluateCGALMesh(*tree.root());
+ }
+
+ fs::current_path(original_path);
+
+ if (deps_output_file) {
+ std::string deps_out( deps_output_file );
+ std::string geom_out;
+ if ( stl_output_file ) geom_out = std::string(stl_output_file);
+ else if ( off_output_file ) geom_out = std::string(off_output_file);
+ else if ( dxf_output_file ) geom_out = std::string(dxf_output_file);
+ else if ( png_output_file ) geom_out = std::string(png_output_file);
+ else {
+ PRINTB("Output file:%s\n",output_file);
+ PRINT("Sorry, don't know how to write deps for that file type. Exiting\n");
+ return 1;
+ }
+ int result = write_deps( deps_out, geom_out );
+ if ( !result ) {
+ PRINT("error writing deps");
+ return 1;
+ }
+ }
+
+ if (stl_output_file) {
+ if (root_N.dim != 3) {
+ fprintf(stderr, "Current top level object is not a 3D object.\n");
+ return 1;
+ }
+ if (!root_N.p3->is_simple()) {
+ fprintf(stderr, "Object isn't a valid 2-manifold! Modify your design.\n");
+ return 1;
+ }
+ std::ofstream fstream(stl_output_file);
+ if (!fstream.is_open()) {
+ PRINTB("Can't open file \"%s\" for export", stl_output_file);
+ }
+ else {
+ export_stl(&root_N, fstream);
+ fstream.close();
+ }
+ }
+
+ if (off_output_file) {
+ if (root_N.dim != 3) {
+ fprintf(stderr, "Current top level object is not a 3D object.\n");
+ return 1;
+ }
+ if (!root_N.p3->is_simple()) {
+ fprintf(stderr, "Object isn't a valid 2-manifold! Modify your design.\n");
+ return 1;
+ }
+ std::ofstream fstream(off_output_file);
+ if (!fstream.is_open()) {
+ PRINTB("Can't open file \"%s\" for export", off_output_file);
+ }
+ else {
+ export_off(&root_N, fstream);
+ fstream.close();
+ }
+ }
+
+ if (dxf_output_file) {
+ if (root_N.dim != 2) {
+ fprintf(stderr, "Current top level object is not a 2D object.\n");
+ return 1;
+ }
+ std::ofstream fstream(dxf_output_file);
+ if (!fstream.is_open()) {
+ PRINTB("Can't open file \"%s\" for export", dxf_output_file);
+ }
+ else {
+ export_dxf(&root_N, fstream);
+ fstream.close();
+ }
+ }
+
+ if (png_output_file) {
+ std::ofstream fstream(png_output_file,std::ios::out|std::ios::binary);
+ if (!fstream.is_open()) {
+ PRINTB("Can't open file \"%s\" for export", png_output_file);
+ }
+ else {
+ if (renderer==Render::CGAL) {
+ export_png_with_cgal(&root_N, camera, fstream);
+ } else if (renderer==Render::THROWNTOGETHER) {
+ export_png_with_throwntogether(tree, camera, fstream);
+ } else {
+ export_png_with_opencsg(tree, camera, fstream);
+ }
+ fstream.close();
+ }
+ }
+#else
+ fprintf(stderr, "OpenSCAD has been compiled without CGAL support!\n");
+ return 1;
#endif
- Builtins::instance()->initialize();
+ }
+ delete root_node;
+ return 0;
+}
+
+#ifdef OPENSCAD_TESTING
+#undef OPENSCAD_QTGUI
+#else
+#define OPENSCAD_QTGUI 1
+#endif
+
+
+#ifdef OPENSCAD_QTGUI
+#include "MainWindow.h"
+ #ifdef __APPLE__
+ #include "EventFilter.h"
+ #endif
+#include <QApplication>
+#include <QString>
+#include <QDir>
+bool QtUseGUI()
+{
#ifdef Q_WS_X11
// see <http://qt.nokia.com/doc/4.5/qapplication.html#QApplication-2>:
// On X11, the window system is initialized if GUIenabled is true. If GUIenabled
@@ -179,18 +451,95 @@ int main(int argc, char **argv)
#else
bool useGUI = true;
#endif
- QApplication app(argc, argv, useGUI);
+ return useGUI;
+}
+
+int gui(vector<string> &inputFiles, const fs::path &original_path, int argc, char ** argv)
+{
+ QApplication app(argc, argv, true); //useGUI);
#ifdef Q_WS_MAC
app.installEventFilter(new EventFilter(&app));
#endif
- fs::path original_path = fs::current_path();
-
// set up groups for QSettings
QCoreApplication::setOrganizationName("OpenSCAD");
QCoreApplication::setOrganizationDomain("openscad.org");
QCoreApplication::setApplicationName("OpenSCAD");
QCoreApplication::setApplicationVersion(TOSTRING(OPENSCAD_VERSION));
+ QDir exdir(QApplication::instance()->applicationDirPath());
+ QString qexamplesdir;
+#ifdef Q_WS_MAC
+ exdir.cd("../Resources"); // Examples can be bundled
+ if (!exdir.exists("examples")) exdir.cd("../../..");
+#elif defined(Q_OS_UNIX)
+ if (exdir.cd("../share/openscad/examples")) {
+ qexamplesdir = exdir.path();
+ } else
+ if (exdir.cd("../../share/openscad/examples")) {
+ qexamplesdir = exdir.path();
+ } else
+ if (exdir.cd("../../examples")) {
+ qexamplesdir = exdir.path();
+ } else
+#endif
+ if (exdir.cd("examples")) {
+ qexamplesdir = exdir.path();
+ }
+ MainWindow::setExamplesDir(qexamplesdir);
+
+ parser_init(QApplication::instance()->applicationDirPath().toLocal8Bit().constData());
+
+#ifdef Q_WS_MAC
+ installAppleEventHandlers();
+#endif
+
+#if defined(OPENSCAD_DEPLOY) && defined(Q_WS_MAC)
+ AutoUpdater *updater = new SparkleAutoUpdater;
+ AutoUpdater::setUpdater(updater);
+ if (updater->automaticallyChecksForUpdates()) updater->checkForUpdates();
+#endif
+
+#if 0 /*** disabled by clifford wolf: adds rendering artefacts with OpenCSG ***/
+ // turn on anti-aliasing
+ QGLFormat f;
+ f.setSampleBuffers(true);
+ f.setSamples(4);
+ QGLFormat::setDefaultFormat(f);
+#endif
+ if (!inputFiles.size()) inputFiles.push_back("");
+#ifdef ENABLE_MDI
+ BOOST_FOREACH(const string &infile, inputFiles) {
+ new MainWindow(QString::fromLocal8Bit(boosty::stringy(original_path / infile).c_str()));
+ }
+ app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
+#else
+ MainWindow *m = new MainWindow(QString::fromLocal8Bit(boosty::stringy(original_path / inputFiles[0]).c_str()));
+ app.connect(m, SIGNAL(destroyed()), &app, SLOT(quit()));
+#endif
+ return app.exec();
+}
+#else // OPENSCAD_QTGUI
+bool QtUseGUI() { return false; }
+int gui(const vector<string> &inputFiles, const fs::path &original_path, int argc, char ** argv)
+{
+ fprintf(stderr,"Error: compiled without QT, but trying to run GUI\n");
+ return 1;
+}
+#endif // OPENSCAD_QTGUI
+
+int main(int argc, char **argv)
+{
+ int rc = 0;
+
+#ifdef ENABLE_CGAL
+ // Causes CGAL errors to abort directly instead of throwing exceptions
+ // (which we don't catch). This gives us stack traces without rerunning in gdb.
+ CGAL::set_error_behaviour(CGAL::ABORT);
+#endif
+ Builtins::instance()->initialize();
+
+ fs::path original_path = fs::current_path();
+
const char *filename = NULL;
const char *output_file = NULL;
const char *deps_output_file = NULL;
@@ -199,7 +548,9 @@ int main(int argc, char **argv)
desc.add_options()
("help,h", "help message")
("version,v", "print the version")
+ ("info", "print information about the building process")
("render", "if exporting a png image, do a full CGAL render")
+ ("preview", po::value<string>(), "if exporting a png image, do an OpenCSG(default) or ThrownTogether preview")
("camera", po::value<string>(), "parameters for camera when exporting png")
("imgsize", po::value<string>(), "=width,height for exporting png")
("projection", po::value<string>(), "(o)rtho or (p)erspective when exporting png")
@@ -231,6 +582,14 @@ int main(int argc, char **argv)
if (vm.count("help")) help(argv[0]);
if (vm.count("version")) version();
+ if (vm.count("info")) info();
+
+ Render::type renderer = Render::OPENCSG;
+ if (vm.count("render"))
+ renderer = Render::CGAL;
+ if (vm.count("preview"))
+ if (vm["preview"].as<string>() == "throwntogether")
+ renderer = Render::THROWNTOGETHER;
if (vm.count("o")) {
// FIXME: Allow for multiple output files?
@@ -264,13 +623,12 @@ int main(int argc, char **argv)
commandline_commands += ";\n";
}
}
-
- if (vm.count("input-file")) {
- filename = vm["input-file"].as< vector<string> >().begin()->c_str();
+ vector<string> inputFiles;
+ if (vm.count("input-file")) {
+ inputFiles = vm["input-file"].as<vector<string> >();
}
-
#ifndef ENABLE_MDI
- if (vm.count("input-file") > 1) {
+ if (inputFiles.size() > 1) {
help(argv[0]);
}
#endif
@@ -279,295 +637,20 @@ int main(int argc, char **argv)
Camera camera = get_camera( vm );
- QDir exdir(QApplication::instance()->applicationDirPath());
-#ifdef Q_WS_MAC
- exdir.cd("../Resources"); // Examples can be bundled
- if (!exdir.exists("examples")) exdir.cd("../../..");
-#elif defined(Q_OS_UNIX)
- if (exdir.cd("../share/openscad/examples")) {
- examplesdir = exdir.path();
- } else
- if (exdir.cd("../../share/openscad/examples")) {
- examplesdir = exdir.path();
- } else
- if (exdir.cd("../../examples")) {
- examplesdir = exdir.path();
- } else
-#endif
- if (exdir.cd("examples")) {
- examplesdir = exdir.path();
- }
-
- parser_init(QApplication::instance()->applicationDirPath().toLocal8Bit().constData());
-
// Initialize global visitors
NodeCache nodecache;
NodeDumper dumper(nodecache);
- Tree tree;
-#ifdef ENABLE_CGAL
- CGALEvaluator cgalevaluator(tree);
- PolySetCGALEvaluator psevaluator(cgalevaluator);
-#endif
-
- if (output_file)
- {
- const char *stl_output_file = NULL;
- const char *off_output_file = NULL;
- const char *dxf_output_file = NULL;
- const char *csg_output_file = NULL;
- const char *png_output_file = NULL;
- const char *ast_output_file = NULL;
- const char *term_output_file = NULL;
- bool null_output = false;
-
- QString suffix = QFileInfo(output_file).suffix().toLower();
- if (suffix == "stl") stl_output_file = output_file;
- else if (suffix == "off") off_output_file = output_file;
- else if (suffix == "dxf") dxf_output_file = output_file;
- else if (suffix == "csg") csg_output_file = output_file;
- else if (suffix == "png") png_output_file = output_file;
- else if (suffix == "ast") ast_output_file = output_file;
- else if (suffix == "term") term_output_file = output_file;
- else if (strcmp(output_file, "null") == 0) null_output = true;
- else {
- fprintf(stderr, "Unknown suffix for output file %s\n", output_file);
- exit(1);
- }
-
- if (!filename) help(argv[0]);
-
- // Top context - this context only holds builtins
- ModuleContext top_ctx;
- top_ctx.registerBuiltin();
-#if 0 && DEBUG
- top_ctx.dump(NULL, NULL);
-#endif
-
- FileModule *root_module;
- ModuleInstantiation root_inst("group");
- AbstractNode *root_node;
- AbstractNode *absolute_root_node;
- CGAL_Nef_polyhedron root_N;
-
- handle_dep(filename);
-
- std::ifstream ifs(filename);
- if (!ifs.is_open()) {
- fprintf(stderr, "Can't open input file '%s'!\n", filename);
- exit(1);
- }
- std::string text((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
- text += "\n" + commandline_commands;
- fs::path abspath = boosty::absolute(filename);
- std::string parentpath = boosty::stringy(abspath.parent_path());
- root_module = parse(text.c_str(), parentpath.c_str(), false);
- if (!root_module) exit(1);
- root_module->handleDependencies();
-
- fs::path fpath = boosty::absolute(fs::path(filename));
- fs::path fparent = fpath.parent_path();
- fs::current_path(fparent);
- top_ctx.setDocumentPath(fparent.string());
-
- AbstractNode::resetIndexCounter();
- absolute_root_node = root_module->instantiate(&top_ctx, &root_inst, NULL);
-
- // Do we have an explicit root node (! modifier)?
- if (!(root_node = find_root_tag(absolute_root_node)))
- root_node = absolute_root_node;
-
- tree.setRoot(root_node);
-
- if (csg_output_file) {
- fs::current_path(original_path);
- std::ofstream fstream(csg_output_file);
- if (!fstream.is_open()) {
- PRINTB("Can't open file \"%s\" for export", csg_output_file);
- }
- else {
- fs::current_path(fparent); // Force exported filenames to be relative to document path
- fstream << tree.getString(*root_node) << "\n";
- fstream.close();
- }
- }
- else if (ast_output_file) {
- fs::current_path(original_path);
- std::ofstream fstream(ast_output_file);
- if (!fstream.is_open()) {
- PRINTB("Can't open file \"%s\" for export", ast_output_file);
- }
- else {
- fs::current_path(fparent); // Force exported filenames to be relative to document path
- fstream << root_module->dump("", "") << "\n";
- fstream.close();
- }
- }
- else if (term_output_file) {
- std::vector<shared_ptr<CSGTerm> > highlight_terms;
- std::vector<shared_ptr<CSGTerm> > background_terms;
- CSGTermEvaluator csgrenderer(tree, &psevaluator);
- shared_ptr<CSGTerm> root_raw_term = csgrenderer.evaluateCSGTerm(*root_node, highlight_terms, background_terms);
-
- fs::current_path(original_path);
- std::ofstream fstream(term_output_file);
- if (!fstream.is_open()) {
- PRINTB("Can't open file \"%s\" for export", term_output_file);
- }
- else {
- if (!root_raw_term)
- fstream << "No top-level CSG object\n";
- else {
- fstream << root_raw_term->dump() << "\n";
- }
- fstream.close();
- }
- }
- else {
-#ifdef ENABLE_CGAL
- if ((null_output || png_output_file) && !vm.count("render")) {
- // null output or OpenCSG png -> don't necessarily need CGALMesh evaluation
- } else {
- root_N = cgalevaluator.evaluateCGALMesh(*tree.root());
- }
-
- fs::current_path(original_path);
-
- if (deps_output_file) {
- std::string deps_out( deps_output_file );
- std::string geom_out;
- if ( stl_output_file ) geom_out = std::string(stl_output_file);
- else if ( off_output_file ) geom_out = std::string(off_output_file);
- else if ( dxf_output_file ) geom_out = std::string(dxf_output_file);
- else if ( png_output_file ) geom_out = std::string(png_output_file);
- else {
- PRINTB("Output file:%s\n",output_file);
- PRINT("Sorry, don't know how to write deps for that file type. Exiting\n");
- exit(1);
- }
- int result = write_deps( deps_out, geom_out );
- if ( !result ) {
- PRINT("error writing deps");
- exit(1);
- }
- }
-
- if (stl_output_file) {
- if (root_N.dim != 3) {
- fprintf(stderr, "Current top level object is not a 3D object.\n");
- exit(1);
- }
- if (!root_N.p3->is_simple()) {
- fprintf(stderr, "Object isn't a valid 2-manifold! Modify your design.\n");
- exit(1);
- }
- std::ofstream fstream(stl_output_file);
- if (!fstream.is_open()) {
- PRINTB("Can't open file \"%s\" for export", stl_output_file);
- }
- else {
- export_stl(&root_N, fstream);
- fstream.close();
- }
- }
-
- if (off_output_file) {
- if (root_N.dim != 3) {
- fprintf(stderr, "Current top level object is not a 3D object.\n");
- exit(1);
- }
- if (!root_N.p3->is_simple()) {
- fprintf(stderr, "Object isn't a valid 2-manifold! Modify your design.\n");
- exit(1);
- }
- std::ofstream fstream(off_output_file);
- if (!fstream.is_open()) {
- PRINTB("Can't open file \"%s\" for export", off_output_file);
- }
- else {
- export_off(&root_N, fstream);
- fstream.close();
- }
- }
-
- if (dxf_output_file) {
- if (root_N.dim != 2) {
- fprintf(stderr, "Current top level object is not a 2D object.\n");
- exit(1);
- }
- std::ofstream fstream(dxf_output_file);
- if (!fstream.is_open()) {
- PRINTB("Can't open file \"%s\" for export", dxf_output_file);
- }
- else {
- export_dxf(&root_N, fstream);
- fstream.close();
- }
- }
-
- if (png_output_file) {
- std::ofstream fstream(png_output_file,std::ios::out|std::ios::binary);
- if (!fstream.is_open()) {
- PRINTB("Can't open file \"%s\" for export", png_output_file);
- }
- else {
- if (vm.count("render")) {
- export_png_with_cgal(&root_N, camera, fstream);
- } else {
- export_png_with_opencsg(tree, camera, fstream);
- }
- fstream.close();
- }
- }
-#else
- fprintf(stderr, "OpenSCAD has been compiled without CGAL support!\n");
- exit(1);
-#endif
- }
- delete root_node;
+ if (output_file) {
+ if (!inputFiles.size()) help(argv[0]);
+ rc = cmdline(deps_output_file, inputFiles[0], camera, output_file, original_path, renderer, argv);
}
- else if (useGUI)
- {
-#ifdef Q_WS_MAC
- installAppleEventHandlers();
-#endif
-
-#if defined(OPENSCAD_DEPLOY) && defined(Q_WS_MAC)
- AutoUpdater *updater = new SparkleAutoUpdater;
- AutoUpdater::setUpdater(updater);
- if (updater->automaticallyChecksForUpdates()) updater->checkForUpdates();
-#endif
-
- QString qfilename;
- if (filename) qfilename = QString::fromLocal8Bit(boosty::stringy(boosty::absolute(filename)).c_str());
-
-#if 0 /*** disabled by clifford wolf: adds rendering artefacts with OpenCSG ***/
- // turn on anti-aliasing
- QGLFormat f;
- f.setSampleBuffers(true);
- f.setSamples(4);
- QGLFormat::setDefaultFormat(f);
-#endif
-#ifdef ENABLE_MDI
- new MainWindow(qfilename);
- vector<string> inputFiles;
- if (vm.count("input-file")) {
- inputFiles = vm["input-file"].as<vector<string> >();
- for (vector<string>::const_iterator infile = inputFiles.begin()+1; infile != inputFiles.end(); infile++) {
- new MainWindow(QString::fromLocal8Bit(boosty::stringy(original_path / *infile).c_str()));
- }
- }
- app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
-#else
- MainWindow *m = new MainWindow(qfilename);
- app.connect(m, SIGNAL(destroyed()), &app, SLOT(quit()));
-#endif
- rc = app.exec();
+ else if (QtUseGUI()) {
+ rc = gui(inputFiles, original_path, argc, argv);
}
- else
- {
+ else {
fprintf(stderr, "Requested GUI mode but can't open display!\n");
- exit(1);
+ help(argv[0]);
}
Builtins::instance(true);
diff --git a/src/parser.y b/src/parser.y
index 5b3d019..5645104 100644
--- a/src/parser.y
+++ b/src/parser.y
@@ -44,28 +44,30 @@
#include <boost/foreach.hpp>
#include <boost/filesystem.hpp>
- namespace fs = boost::filesystem;
+namespace fs = boost::filesystem;
+#define foreach BOOST_FOREACH
+
#include "boosty.h"
- int parser_error_pos = -1;
+int parser_error_pos = -1;
- int parserlex(void);
- void yyerror(char const *s);
+int parserlex(void);
+void yyerror(char const *s);
- int lexerget_lineno(void);
- int lexerlex_destroy(void);
- int lexerlex(void);
+int lexerget_lineno(void);
+int lexerlex_destroy(void);
+int lexerlex(void);
- std::stack<LocalScope *> scope_stack;
- FileModule *rootmodule;
+std::stack<LocalScope *> scope_stack;
+FileModule *rootmodule;
- extern void lexerdestroy();
- extern FILE *lexerin;
- extern const char *parser_input_buffer;
- const char *parser_input_buffer;
- std::string parser_source_path;
+extern void lexerdestroy();
+extern FILE *lexerin;
+extern const char *parser_input_buffer;
+const char *parser_input_buffer;
+std::string parser_source_path;
- %}
+%}
%union {
char *text;
@@ -125,112 +127,149 @@
%%
-input:
-/* empty */ |
-TOK_USE { rootmodule->usedlibs.insert($1); } input |
-statement input ;
+input: /* empty */
+ | TOK_USE
+ { rootmodule->usedlibs.insert($1); }
+ input
+ | statement input
+ ;
-inner_input:
-/* empty */ |
-statement inner_input ;
+statement:
+ ';'
+ | '{' inner_input '}'
+ | module_instantiation
+ {
+ if ($1) scope_stack.top()->addChild($1);
+ }
+ | assignment
+ | TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')'
+ {
+ Module *newmodule = new Module();
+ newmodule->definition_arguments = *$4;
+ scope_stack.top()->modules[$2] = newmodule;
+ scope_stack.push(&newmodule->scope);
+ free($2);
+ delete $4;
+ }
+ statement
+ {
+ scope_stack.pop();
+ }
+ | TOK_FUNCTION TOK_ID '(' arguments_decl optional_commas ')' '=' expr
+ {
+ Function *func = new Function();
+ func->definition_arguments = *$4;
+ func->expr = $8;
+ scope_stack.top()->functions[$2] = func;
+ free($2);
+ delete $4;
+ }
+ ';'
+ ;
+
+inner_input:
+ /* empty */
+ | statement inner_input
+ ;
assignment:
-TOK_ID '=' expr ';' {
- bool found = false;
- for (AssignmentList::iterator iter = scope_stack.top()->assignments.begin();
- iter != scope_stack.top()->assignments.end();
- iter++) {
- if (iter->first == $1) {
- iter->second = $3;
- found = true;
- break;
- }
- }
- if (!found) scope_stack.top()->assignments.push_back(Assignment($1, $3));
-} ;
-
-statement:
-';' |
-'{' inner_input '}' |
-module_instantiation {
- if ($1) scope_stack.top()->addChild($1);
-} |
-assignment |
-TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')' {
- Module *newmodule = new Module();
- newmodule->definition_arguments = *$4;
- scope_stack.top()->modules[$2] = newmodule;
- scope_stack.push(&newmodule->scope);
- free($2);
- delete $4;
-} statement {
- scope_stack.pop();
- } |
- TOK_FUNCTION TOK_ID '(' arguments_decl optional_commas ')' '=' expr {
- Function *func = new Function();
- func->definition_arguments = *$4;
- func->expr = $8;
- scope_stack.top()->functions[$2] = func;
- free($2);
- delete $4;
- } ';' ;
+ TOK_ID '=' expr ';'
+ {
+ bool found = false;
+ foreach (Assignment& iter, scope_stack.top()->assignments) {
+ if (iter.first == $1) {
+ iter.second = $3;
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ scope_stack.top()->assignments.push_back(Assignment($1, $3));
+ }
+ }
+ ;
-if_statement:
-TOK_IF '(' expr ')' {
- $<ifelse>$ = new IfElseModuleInstantiation();
- $<ifelse>$->arguments.push_back(Assignment("", $3));
- $<ifelse>$->setPath(parser_source_path);
- scope_stack.push(&$<ifelse>$->scope);
-} child_statement {
- scope_stack.pop();
- $$ = $<ifelse>5;
- } ;
+module_instantiation:
+ '!' module_instantiation
+ {
+ $$ = $2;
+ if ($$) $$->tag_root = true;
+ }
+ | '#' module_instantiation
+ {
+ $$ = $2;
+ if ($$) $$->tag_highlight = true;
+ }
+ | '%' module_instantiation
+ {
+ $$ = $2;
+ if ($$) $$->tag_background = true;
+ }
+ | '*' module_instantiation
+ {
+ delete $2;
+ $$ = NULL;
+ }
+ | single_module_instantiation
+ {
+ $<inst>$ = $1;
+ scope_stack.push(&$1->scope);
+ }
+ child_statement
+ {
+ scope_stack.pop();
+ $$ = $<inst>2;
+ }
+ | ifelse_statement
+ {
+ $$ = $1;
+ }
+ ;
ifelse_statement:
-if_statement {
- $$ = $1;
-} |
-if_statement TOK_ELSE {
- scope_stack.push(&$1->else_scope);
-} child_statement {
- scope_stack.pop();
- $$ = $1;
- } ;
+ if_statement
+ {
+ $$ = $1;
+ }
+ | if_statement TOK_ELSE
+ {
+ scope_stack.push(&$1->else_scope);
+ }
+ child_statement
+ {
+ scope_stack.pop();
+ $$ = $1;
+ }
+ ;
-module_instantiation:
-'!' module_instantiation {
- $$ = $2;
- if ($$) $$->tag_root = true;
-} |
-'#' module_instantiation {
- $$ = $2;
- if ($$) $$->tag_highlight = true;
-} |
-'%' module_instantiation {
- $$ = $2;
- if ($$) $$->tag_background = true;
-} |
-'*' module_instantiation {
- delete $2;
- $$ = NULL;
-} |
-single_module_instantiation {
- $<inst>$ = $1;
- scope_stack.push(&$1->scope);
-} child_statement {
- scope_stack.pop();
- $$ = $<inst>2;
- } |
- ifelse_statement {
- $$ = $1;
- } ;
+if_statement:
+ TOK_IF '(' expr ')'
+ {
+ $<ifelse>$ = new IfElseModuleInstantiation();
+ $<ifelse>$->arguments.push_back(Assignment("", $3));
+ $<ifelse>$->setPath(parser_source_path);
+ scope_stack.push(&$<ifelse>$->scope);
+ }
+ child_statement
+ {
+ scope_stack.pop();
+ $$ = $<ifelse>5;
+ }
+ ;
+
+child_statements:
+ /* empty */
+ | child_statements child_statement
+ ;
child_statement:
-';' |
-'{' child_statements '}' |
-module_instantiation {
- if ($1) scope_stack.top()->addChild($1);
-} ;
+ ';'
+ | '{' child_statements '}'
+ | module_instantiation
+ {
+ if ($1) scope_stack.top()->addChild($1);
+ }
+ ;
/*
FIXME: This allows for variable declaration in child blocks, not activated yet
@@ -238,198 +277,247 @@ module_instantiation {
assignment ;
*/
-child_statements:
-/* empty */ |
-child_statements child_statement ;
-
single_module_instantiation:
-TOK_ID '(' arguments_call ')' {
- $$ = new ModuleInstantiation($1);
- $$->arguments = *$3;
- $$->setPath(parser_source_path);
- free($1);
- delete $3;
-}
+ TOK_ID '(' arguments_call ')'
+ {
+ $$ = new ModuleInstantiation($1);
+ $$->arguments = *$3;
+ $$->setPath(parser_source_path);
+ free($1);
+ delete $3;
+ }
+ ;
expr:
-TOK_TRUE {
- $$ = new Expression(Value(true));
-} |
-TOK_FALSE {
- $$ = new Expression(Value(false));
-} |
-TOK_UNDEF {
- $$ = new Expression(Value::undefined);
-} |
-TOK_ID {
- $$ = new Expression();
- $$->type = "L";
- $$->var_name = $1;
- free($1);
-} |
-expr '.' TOK_ID {
- $$ = new Expression("N", $1);
- $$->var_name = $3;
- free($3);
-} |
-TOK_STRING {
- $$ = new Expression(Value(std::string($1)));
- free($1);
-} |
-TOK_NUMBER {
- $$ = new Expression(Value($1));
-} |
-'[' expr ':' expr ']' {
- Expression *e_one = new Expression(Value(1.0));
- $$ = new Expression();
- $$->type = "R";
- $$->children.push_back($2);
- $$->children.push_back(e_one);
- $$->children.push_back($4);
-} |
-'[' expr ':' expr ':' expr ']' {
- $$ = new Expression();
- $$->type = "R";
- $$->children.push_back($2);
- $$->children.push_back($4);
- $$->children.push_back($6);
-} |
-'[' optional_commas ']' {
- $$ = new Expression(Value(Value::VectorType()));
-} |
-'[' vector_expr optional_commas ']' {
- $$ = $2;
-} |
-expr '*' expr {
- $$ = new Expression("*", $1, $3);
-} |
-expr '/' expr {
- $$ = new Expression("/", $1, $3);
-} |
-expr '%' expr {
- $$ = new Expression("%", $1, $3);
-} |
-expr '+' expr {
- $$ = new Expression("+", $1, $3);
-} |
-expr '-' expr {
- $$ = new Expression("-", $1, $3);
-} |
-expr '<' expr {
- $$ = new Expression("<", $1, $3);
-} |
-expr LE expr {
- $$ = new Expression("<=", $1, $3);
-} |
-expr EQ expr {
- $$ = new Expression("==", $1, $3);
-} |
-expr NE expr {
- $$ = new Expression("!=", $1, $3);
-} |
-expr GE expr {
- $$ = new Expression(">=", $1, $3);
-} |
-expr '>' expr {
- $$ = new Expression(">", $1, $3);
-} |
-expr AND expr {
- $$ = new Expression("&&", $1, $3);
-} |
-expr OR expr {
- $$ = new Expression("||", $1, $3);
-} |
-'+' expr {
- $$ = $2;
-} |
-'-' expr {
- $$ = new Expression("I", $2);
-} |
-'!' expr {
- $$ = new Expression("!", $2);
-} |
-'(' expr ')' {
- $$ = $2;
-} |
-expr '?' expr ':' expr {
- $$ = new Expression();
- $$->type = "?:";
- $$->children.push_back($1);
- $$->children.push_back($3);
- $$->children.push_back($5);
-} |
-expr '[' expr ']' {
- $$ = new Expression("[]", $1, $3);
-} |
-TOK_ID '(' arguments_call ')' {
- $$ = new Expression();
- $$->type = "F";
- $$->call_funcname = $1;
- $$->call_arguments = *$3;
- free($1);
- delete $3;
-} ;
+ TOK_TRUE
+ {
+ $$ = new Expression(Value(true));
+ }
+ | TOK_FALSE
+ {
+ $$ = new Expression(Value(false));
+ }
+ | TOK_UNDEF
+ {
+ $$ = new Expression(Value::undefined);
+ }
+ | TOK_ID
+ {
+ $$ = new Expression();
+ $$->type = "L";
+ $$->var_name = $1;
+ free($1);
+ }
+ | expr '.' TOK_ID
+ {
+ $$ = new Expression("N", $1);
+ $$->var_name = $3;
+ free($3);
+ }
+ | TOK_STRING
+ {
+ $$ = new Expression(Value(std::string($1)));
+ free($1);
+ }
+ | TOK_NUMBER
+ {
+ $$ = new Expression(Value($1));
+ }
+ | '[' expr ':' expr ']'
+ {
+ Expression *e_one = new Expression(Value(1.0));
+ $$ = new Expression();
+ $$->type = "R";
+ $$->children.push_back($2);
+ $$->children.push_back(e_one);
+ $$->children.push_back($4);
+ }
+ | '[' expr ':' expr ':' expr ']'
+ {
+ $$ = new Expression();
+ $$->type = "R";
+ $$->children.push_back($2);
+ $$->children.push_back($4);
+ $$->children.push_back($6);
+ }
+ | '[' optional_commas ']'
+ {
+ $$ = new Expression(Value(Value::VectorType()));
+ }
+ | '[' vector_expr optional_commas ']'
+ {
+ $$ = $2;
+ }
+ | expr '*' expr
+ {
+ $$ = new Expression("*", $1, $3);
+ }
+ | expr '/' expr
+ {
+ $$ = new Expression("/", $1, $3);
+ }
+ | expr '%' expr
+ {
+ $$ = new Expression("%", $1, $3);
+ }
+ | expr '+' expr
+ {
+ $$ = new Expression("+", $1, $3);
+ }
+ | expr '-' expr
+ {
+ $$ = new Expression("-", $1, $3);
+ }
+ | expr '<' expr
+ {
+ $$ = new Expression("<", $1, $3);
+ }
+ | expr LE expr
+ {
+ $$ = new Expression("<=", $1, $3);
+ }
+ | expr EQ expr
+ {
+ $$ = new Expression("==", $1, $3);
+ }
+ | expr NE expr
+ {
+ $$ = new Expression("!=", $1, $3);
+ }
+ | expr GE expr
+ {
+ $$ = new Expression(">=", $1, $3);
+ }
+ | expr '>' expr
+ {
+ $$ = new Expression(">", $1, $3);
+ }
+ | expr AND expr
+ {
+ $$ = new Expression("&&", $1, $3);
+ }
+ | expr OR expr
+ {
+ $$ = new Expression("||", $1, $3);
+ }
+ | '+' expr
+ {
+ $$ = $2;
+ }
+ | '-' expr
+ {
+ $$ = new Expression("I", $2);
+ }
+ | '!' expr
+ {
+ $$ = new Expression("!", $2);
+ }
+ | '(' expr ')'
+ {
+ $$ = $2;
+ }
+ | expr '?' expr ':' expr
+ {
+ $$ = new Expression();
+ $$->type = "?:";
+ $$->children.push_back($1);
+ $$->children.push_back($3);
+ $$->children.push_back($5);
+ }
+ | expr '[' expr ']'
+ {
+ $$ = new Expression("[]", $1, $3);
+ }
+ | TOK_ID '(' arguments_call ')'
+ {
+ $$ = new Expression();
+ $$->type = "F";
+ $$->call_funcname = $1;
+ $$->call_arguments = *$3;
+ free($1);
+ delete $3;
+ }
+ ;
optional_commas:
-',' optional_commas | ;
+ ',' optional_commas
+ | /* empty */
+ ;
vector_expr:
-expr {
- $$ = new Expression("V", $1);
-} |
-vector_expr ',' optional_commas expr {
- $$ = $1;
- $$->children.push_back($4);
-} ;
+ expr
+ {
+ $$ = new Expression("V", $1);
+ }
+ | vector_expr ',' optional_commas expr
+ {
+ $$ = $1;
+ $$->children.push_back($4);
+ }
+ ;
arguments_decl:
-/* empty */ {
- $$ = new AssignmentList();
-} |
-argument_decl {
- $$ = new AssignmentList();
- $$->push_back(*$1);
- delete $1;
-} |
-arguments_decl ',' optional_commas argument_decl {
- $$ = $1;
- $$->push_back(*$4);
- delete $4;
-} ;
+ /* empty */
+ {
+ $$ = new AssignmentList();
+ }
+ | argument_decl
+ {
+ $$ = new AssignmentList();
+ $$->push_back(*$1);
+ delete $1;
+ }
+ | arguments_decl ',' optional_commas argument_decl
+ {
+ $$ = $1;
+ $$->push_back(*$4);
+ delete $4;
+ }
+ ;
argument_decl:
-TOK_ID {
- $$ = new Assignment($1, NULL);
- free($1);
-} |
-TOK_ID '=' expr {
- $$ = new Assignment($1, $3);
- free($1);
-} ;
+ TOK_ID
+ {
+ $$ = new Assignment($1, NULL);
+ free($1);
+ }
+ | TOK_ID '=' expr
+ {
+ $$ = new Assignment($1, $3);
+ free($1);
+ }
+ ;
arguments_call:
-/* empty */ {
- $$ = new AssignmentList();
-} |
-argument_call {
- $$ = new AssignmentList();
- $$->push_back(*$1);
- delete $1;
-} |
-arguments_call ',' optional_commas argument_call {
- $$ = $1;
- $$->push_back(*$4);
- delete $4;
-} ;
+ /* empty */
+ {
+ $$ = new AssignmentList();
+ }
+ | argument_call
+ {
+ $$ = new AssignmentList();
+ $$->push_back(*$1);
+ delete $1;
+ }
+ | arguments_call ',' optional_commas argument_call
+ {
+ $$ = $1;
+ $$->push_back(*$4);
+ delete $4;
+ }
+ ;
argument_call:
-expr {
- $$ = new Assignment("", $1);
-} |
-TOK_ID '=' expr {
- $$ = new Assignment($1, $3);
- free($1);
-} ;
+ expr
+ {
+ $$ = new Assignment("", $1);
+ }
+ | TOK_ID '=' expr
+ {
+ $$ = new Assignment($1, $3);
+ free($1);
+ }
+ ;
%%
diff --git a/src/parsersettings.cc b/src/parsersettings.cc
index 5ad30e1..63a7713 100644
--- a/src/parsersettings.cc
+++ b/src/parsersettings.cc
@@ -130,5 +130,6 @@ void parser_init(const std::string &applicationpath)
if (is_directory(tmpdir = libdir / "libraries")) {
librarydir = boosty::stringy(tmpdir);
}
+
if (!librarydir.empty()) add_librarydir(librarydir);
}
diff --git a/src/svg.cc b/src/svg.cc
index a21e844..b3a7afa 100644
--- a/src/svg.cc
+++ b/src/svg.cc
@@ -32,16 +32,16 @@ std::string svg_styleblock(std::string strokewidth)
std::stringstream out;
// halfedge: f1/f0 = face mark, b1/b0 = body or hole, m1/m0 = halfedge mark
out << "\
- <style type='text/css'>\n\
- .halfedge_f0_b1_m0 { stroke: gold; stroke-width: __STROKEW__px } \n\
- .halfedge_f0_b1_m1 { stroke: gold; stroke-width: __STROKEW__px } \n\
- .halfedge_f0_b0_m0 { stroke: green; stroke-width: __STROKEW__px } \n\
- .halfedge_f0_b0_m1 { stroke: green; stroke-width: __STROKEW__px } \n\
- .halfedge_f1_b1_m0 { stroke: gold; stroke-width: __STROKEW__px } \n\
- .halfedge_f1_b1_m1 { stroke: gold; stroke-width: __STROKEW__px } \n\
- .halfedge_f1_b0_m0 { stroke: green; stroke-width: __STROKEW__px } \n\
- .halfedge_f1_b0_m1 { stroke: green; stroke-width: __STROKEW__px } \n\
- </style>";
+ <style type='text/css'>\n\
+ .halfedge_f0_b1_m0 { stroke: gold; stroke-width: __STROKEW__px } \n\
+ .halfedge_f0_b1_m1 { stroke: gold; stroke-width: __STROKEW__px } \n\
+ .halfedge_f0_b0_m0 { stroke: green; stroke-width: __STROKEW__px } \n\
+ .halfedge_f0_b0_m1 { stroke: green; stroke-width: __STROKEW__px } \n\
+ .halfedge_f1_b1_m0 { stroke: gold; stroke-width: __STROKEW__px } \n\
+ .halfedge_f1_b1_m1 { stroke: gold; stroke-width: __STROKEW__px } \n\
+ .halfedge_f1_b0_m0 { stroke: green; stroke-width: __STROKEW__px } \n\
+ .halfedge_f1_b0_m1 { stroke: green; stroke-width: __STROKEW__px } \n\
+ </style>";
std::string tmp = out.str();
boost::replace_all( tmp, "__STROKEW__", strokewidth );
return tmp;
@@ -119,14 +119,14 @@ std::string dump_cgal_nef_polyhedron2_face_svg(
style << "halfedge_f" << facemark << "_b" << body << "_m";
std::string styleclass = style.str();
- std::stringstream out;
+ std::stringstream out;
CGAL_For_all(c1, c2) {
if ( explorer.is_standard( explorer.target(c1) ) ) {
-CGAL_Nef_polyhedron2::Explorer::Point source = explorer.point( explorer.source( c1 ) );
+ CGAL_Nef_polyhedron2::Explorer::Point source = explorer.point( explorer.source( c1 ) );
CGAL_Point_2e target = explorer.point( explorer.target( c1 ) );
out << " <!-- Halfedge. Mark: " << c1->mark() << " -->\n";
std::string he_mark = boost::lexical_cast<std::string>(c1->mark());
- out << " <line"
+ out << " <line"
<< " x1='" << CGAL::to_double(source.x()) << "'"
<< " y1='" << CGAL::to_double(source.y()) << "'"
<< " x2='" << CGAL::to_double(target.x()) << "'"
@@ -141,10 +141,10 @@ CGAL_Nef_polyhedron2::Explorer::Point source = explorer.point( explorer.source(
std::string dump_svg( const CGAL_Nef_polyhedron2 &N )
{
- std::stringstream out;
- CGAL_Nef_polyhedron2::Explorer explorer = N.explorer();
+ std::stringstream out;
+ CGAL_Nef_polyhedron2::Explorer explorer = N.explorer();
CGAL_Iso_rectangle_2e bbox = bounding_box( N );
- CGAL_Nef_polyhedron2::Explorer::Face_const_iterator i;
+ CGAL_Nef_polyhedron2::Explorer::Face_const_iterator i;
std::string linewidth = "0.05";
@@ -152,23 +152,23 @@ std::string dump_svg( const CGAL_Nef_polyhedron2 &N )
out << svg_header() << "\n" << svg_styleblock( linewidth ) << "\n";
for ( i = explorer.faces_begin(); i!= explorer.faces_end(); ++i ) {
- out << " <!-- face begin. mark: " << i->mark() << " -->\n";
- out << " <!-- body begin -->\n";
- CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c1
- = explorer.face_cycle( i ), c2 ( c1 );
- out << dump_cgal_nef_polyhedron2_face_svg( c1, c2, explorer, i->mark(), true );
- out << " <!-- body end -->\n";
+ out << " <!-- face begin. mark: " << i->mark() << " -->\n";
+ out << " <!-- body begin -->\n";
+ CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c1
+ = explorer.face_cycle( i ), c2 ( c1 );
+ out << dump_cgal_nef_polyhedron2_face_svg( c1, c2, explorer, i->mark(), true );
+ out << " <!-- body end -->\n";
- CGAL_Nef_polyhedron2::Explorer::Hole_const_iterator j;
- for ( j = explorer.holes_begin( i ); j!= explorer.holes_end( i ); ++j ) {
- out << " <!-- hole begin. mark: " << j->mark() << " -->\n";
- CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c3( j ), c4 ( c3 );
- out << dump_cgal_nef_polyhedron2_face_svg( c3, c4, explorer, "green", j->mark() );
- out << " <!-- hole end -->\n";
- }
- out << " <!-- face end -->\n";
- }
- out << "</svg>";
+ CGAL_Nef_polyhedron2::Explorer::Hole_const_iterator j;
+ for ( j = explorer.holes_begin( i ); j!= explorer.holes_end( i ); ++j ) {
+ out << " <!-- hole begin. mark: " << j->mark() << " -->\n";
+ CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c3( j ), c4 ( c3 );
+ out << dump_cgal_nef_polyhedron2_face_svg( c3, c4, explorer, "green", j->mark() );
+ out << " <!-- hole end -->\n";
+ }
+ out << " <!-- face end -->\n";
+ }
+ out << "</svg>";
std::string tmp = out.str();
boost::replace_all( tmp, "'", "\"" );
return tmp;
@@ -212,14 +212,14 @@ public:
CGAL_Point_3 target = c1->source()->target()->point();
CGAL_Point_2e tp1 = project_svg_3to2 ( source, bbox );
CGAL_Point_2e tp2 = project_svg_3to2 ( target, bbox );
- out << " <!-- " << CGAL::to_double(source.x()) << ","
- << CGAL::to_double(source.y()) << ","
- << CGAL::to_double(source.z()) << " -->\n";
+ out << " <!-- " << CGAL::to_double(source.x()) << ","
+ << CGAL::to_double(source.y()) << ","
+ << CGAL::to_double(source.z()) << " -->\n";
out << " <line "
- << "x1='" << CGAL::to_double(tp1.x()) << "' "
- << "y1='" << CGAL::to_double(tp1.y()) << "' "
- << "x2='" << CGAL::to_double(tp2.x()) << "' "
- << "y2='" << CGAL::to_double(tp2.y()) << "' "
+ << "x1='" << CGAL::to_double(tp1.x()) << "' "
+ << "y1='" << CGAL::to_double(tp1.y()) << "' "
+ << "x2='" << CGAL::to_double(tp2.x()) << "' "
+ << "y2='" << CGAL::to_double(tp2.y()) << "' "
<< " stroke='" << color << "'";
if (!(*hfacet).mark()) out << " stroke-dasharray='4 4' />\n";
else out << " />\n";
@@ -234,31 +234,31 @@ public:
std::string dump_svg( const CGAL_Nef_polyhedron3 &N )
{
- std::stringstream out;
+ std::stringstream out;
std::string linewidth = "0.05";
out << "<!--CGAL_Nef_polyhedron3 dump begin-->\n";
out << svg_header() << "\n" << svg_border() << "\n";
out << svg_styleblock( linewidth ) << "\n" << svg_axes() << "\n";
- CGAL_Nef_polyhedron3::Volume_const_iterator c;
- CGAL_forall_volumes(c,N) {
- out << " <!--Volume begin-->\n";
- out << " <!--Mark: " << (*c).mark() << "-->\n";
- CGAL_Nef_polyhedron3::Shell_entry_const_iterator it;
- CGAL_forall_shells_of(it,c) {
- out << " <!--Shell begin-->\n";
- NefPoly3_dumper_svg dumper_svg(N);
- N.visit_shell_objects(CGAL_Nef_polyhedron3::SFace_const_handle(it), dumper_svg );
+ CGAL_Nef_polyhedron3::Volume_const_iterator c;
+ CGAL_forall_volumes(c,N) {
+ out << " <!--Volume begin-->\n";
+ out << " <!--Mark: " << (*c).mark() << "-->\n";
+ CGAL_Nef_polyhedron3::Shell_entry_const_iterator it;
+ CGAL_forall_shells_of(it,c) {
+ out << " <!--Shell begin-->\n";
+ NefPoly3_dumper_svg dumper_svg(N);
+ N.visit_shell_objects(CGAL_Nef_polyhedron3::SFace_const_handle(it), dumper_svg );
out << dumper_svg.out.str();
- out << " <!--Shell end-->\n";
- }
- out << " <!--Volume end-->\n";
- }
- out << "<!--CGAL_Nef_polyhedron3 dump end-->\n";
+ out << " <!--Shell end-->\n";
+ }
+ out << " <!--Volume end-->\n";
+ }
+ out << "<!--CGAL_Nef_polyhedron3 dump end-->\n";
out << "</svg>";
std::string tmp = out.str();
boost::replace_all( tmp, "'", "\"" );
- return tmp;
+ return tmp;
}
} // namespace
diff --git a/src/version_check.h b/src/version_check.h
index db17962..6e07208 100644
--- a/src/version_check.h
+++ b/src/version_check.h
@@ -87,11 +87,12 @@ a time, to avoid confusion.
#else
#endif // ENABLE_OPENCSG
+#ifndef OPENSCAD_TESTING
#include <QtCore/qglobal.h>
#if QT_VERSION < 0x040400
#error QT library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check
#endif // QT
-
+#endif
#ifdef ENABLE_OPENCSG
#endif // OpenCSG
diff --git a/testdata/scad/features/resize-2d-tests.scad b/testdata/scad/features/resize-2d-tests.scad
index 911a4cd..3b6fe9d 100644
--- a/testdata/scad/features/resize-2d-tests.scad
+++ b/testdata/scad/features/resize-2d-tests.scad
@@ -53,3 +53,11 @@ translate([32,16]) resize([0,0,15],auto=true) shape2();
translate([32,32]) resize([0,0,15]) shape3();
}
+color("blue"){
+translate([-16,-16]) resize([10,8],auto=[false,true])
+ scale([0.5,100,20]) shape();
+translate([0,-16]) resize([8,10,15],auto=true)
+ scale([1000,0.5]) shape2();
+translate([16,-16]) resize([10,8,15])
+ scale([200,200]) shape3();
+}
diff --git a/testdata/scad/features/resize-tests.scad b/testdata/scad/features/resize-tests.scad
index 3150e86..5e78f06 100644
--- a/testdata/scad/features/resize-tests.scad
+++ b/testdata/scad/features/resize-tests.scad
@@ -73,13 +73,13 @@ translate([10,90,10]) resize([0,0,7],auto=[true,true,false]) cube();
}
color("pink"){
-translate([0 , 0,-10]) resize([4,4,4]) resize([5000,100,1000]) cube();
-translate([10,0,-10]) resize([-5,0,0]) cube();
-translate([20,0,-10]) resize([-5,0,0],auto=3) cube();
-translate([30,0,-10]) resize(-5,0,0,auto=3) cube();
-translate([40,0,-10]) resize(5,0,0) cube();
-translate([50,0,-10]) resize([0.5,0,7]) cube([0.5,1,1000]);
-translate([60,0,-10]) resize([0,0,0.5]) cube([6,6,10000000000]);
+translate([10 , 0,-10]) resize([4,4,4]) resize([5000,100,1000]) cube();
+translate([20,0,-10]) resize([-5,0,0]) cube();
+translate([30,0,-10]) resize([-5,0,0],auto=3) cube();
+translate([40,0,-10]) resize(-5,0,0,auto=3) cube();
+translate([50,0,-10]) resize(5,0,0) cube();
+translate([60,0,-10]) resize([0.5,0,7]) cube([0.5,1,1000]);
+translate([70,0,-10]) resize([0,0,0.5]) cube([6,6,10000000000]);
}
color("lime"){
diff --git a/testdata/scad/misc/variable-scope-tests.scad b/testdata/scad/misc/variable-scope-tests.scad
index 104d1a4..2a65d0d 100644
--- a/testdata/scad/misc/variable-scope-tests.scad
+++ b/testdata/scad/misc/variable-scope-tests.scad
@@ -11,6 +11,35 @@ module special_module2(b) {
special_module(23, $fn=5);
+echo("$children scope");
+module child_module_2() {
+ echo("$children should be 4: ", $children);
+ for(i=[0:$children-1]) child(i);
+}
+
+module child_module_1() {
+ echo("$children should be 1: ", $children);
+ child_module_2() {
+ echo("$children should be 1: ", $children);
+ child(0);
+ echo("child_module_2 child 0");
+ echo("child_module_2 child 1");
+ }
+}
+
+child_module_1() echo("child_module_1 child");
+
+echo("copy $children");
+module copy_children_module() {
+ kids = $children;
+ echo("copy_children_module: ", kids, $children);
+}
+
+copy_children_module() {
+ cube();
+ sphere();
+}
+
echo("inner variables shadows parameter");
module inner_variables(a, b) {
b = 24;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 6a50130..ab94e64 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,5 +1,7 @@
# instructions - see ../doc/testing.txt
+# set(DEBUG_OSCD 1) # print debug info during cmake
+
cmake_minimum_required(VERSION 2.8)
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_GREATER 2.8.3)
# Explicitly use new include policy to avoid globally shadowing included modules
@@ -38,8 +40,17 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
# Build debug build as default
if(NOT CMAKE_BUILD_TYPE)
-# set(CMAKE_BUILD_TYPE RelWithDebInfo)
- set(CMAKE_BUILD_TYPE Release)
+ # set(CMAKE_BUILD_TYPE Release)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
+ if (GCC_VERSION VERSION_GREATER 4.6)
+ set(CMAKE_BUILD_TYPE RelWithDebInfo)
+ else()
+ set(CMAKE_BUILD_TYPE Debug)
+ endif()
+ else()
+ set(CMAKE_BUILD_TYPE RelWithDebInfo)
+ endif()
endif()
if(CMAKE_COMPILER_IS_GNUCXX)
@@ -115,12 +126,15 @@ endif()
#
function(inclusion user_set_path found_paths)
- # If user_set_path indicates an env. variable was specifically
- # set by the user, then found_paths become an include priority (prepend);
- # otherwise found_paths are stuck on the end of the include flags (append).
-
- # message(STATUS "inclusion ${user_set_path} ${found_paths}")
- # message(STATUS "inclusion ${${user_set_path}} ${${found_paths}}")
+ # Set up compiler include paths with prepend/append rules. Input is
+ # a path and a set of paths. If user_set_path matches anything in found_paths
+ # then we prepend the found_paths because we assume the user wants
+ # their set_paths to be a priority.
+
+ if (DEBUG_OSCD)
+ message(STATUS "inclusion ${user_set_path} ${found_paths}")
+ message(STATUS "inclusion ${${user_set_path}} ${${found_paths}}")
+ endif()
set( inclusion_match 0 )
foreach( found_path ${${found_paths}} )
if (${found_path} MATCHES ${${user_set_path}}.*)
@@ -129,10 +143,14 @@ function(inclusion user_set_path found_paths)
endforeach()
if (user_set_path AND inclusion_match)
include_directories(BEFORE ${${found_paths}})
- # message(STATUS "inclusion prepend ${${found_paths}} for ${user_set_path}")
+ if (DEBUG_OSCD)
+ message(STATUS "inclusion prepend ${${found_paths}} for ${user_set_path}")
+ endif()
else()
include_directories(AFTER ${${found_paths}})
- # message(STATUS "inclusion append ${${found_paths}} for ${user_set_path}")
+ if (DEBUG_OSCD)
+ message(STATUS "inclusion append ${${found_paths}} for ${user_set_path}")
+ endif()
endif()
set( inclusion_match 0 )
endfunction()
@@ -330,6 +348,13 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
set(FLEX_EXECUTABLE /usr/local/bin/flex)
endif()
+# prepend the dir where deps were built
+if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "")
+ set(OSCAD_DEPS "")
+ set(OSCAD_DEPS_PATHS $ENV{OPENSCAD_LIBRARIES}/include)
+ inclusion(OSCAD_DEPS OSCAD_DEPS_PATHS)
+endif()
+
if(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
include_directories( /usr/pkg/include /usr/X11R7/include )
set(FLEX_EXECUTABLE /usr/pkg/bin/flex)
@@ -412,6 +437,25 @@ include_directories(../src)
add_definitions(-DOPENSCAD_VERSION=test -DOPENSCAD_YEAR=2011 -DOPENSCAD_MONTH=10)
add_definitions(-DOPENSCAD_TESTING)
+# Platform specific settings
+
+if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ message(STATUS "Offscreen OpenGL Context - using Apple CGL")
+ set(OFFSCREEN_CTX_SOURCE "OffscreenContextCGL.mm" CACHE TYPE STRING)
+ set(OFFSCREEN_IMGUTILS_SOURCE "imageutils-macosx.cc" CACHE TYPE STRING)
+ set(PLATFORMUTILS_SOURCE "PlatformUtils-mac.mm" CACHE TYPE STRING)
+elseif(UNIX)
+ message(STATUS "Offscreen OpenGL Context - using Unix GLX")
+ set(OFFSCREEN_CTX_SOURCE "OffscreenContextGLX.cc" CACHE TYPE STRING)
+ set(OFFSCREEN_IMGUTILS_SOURCE "imageutils-lodepng.cc" CACHE TYPE STRING)
+ set(PLATFORMUTILS_SOURCE "PlatformUtils-posix.cc" CACHE TYPE STRING)
+elseif(WIN32)
+ message(STATUS "Offscreen OpenGL Context - using Microsoft WGL")
+ set(OFFSCREEN_CTX_SOURCE "OffscreenContextWGL.cc" CACHE TYPE STRING)
+ set(OFFSCREEN_IMGUTILS_SOURCE "imageutils-lodepng.cc" CACHE TYPE STRING)
+ set(PLATFORMUTILS_SOURCE "PlatformUtils-win.cc" CACHE TYPE STRING)
+endif()
+
set(CORE_SOURCES
tests-common.cc
../src/parsersettings.cc
@@ -440,6 +484,7 @@ set(CORE_SOURCES
../src/surface.cc
../src/control.cc
../src/render.cc
+ ../src/rendersettings.cc
../src/dxfdata.cc
../src/dxfdim.cc
../src/linearextrude.cc
@@ -455,11 +500,11 @@ set(NOCGAL_SOURCES
../src/builtin.cc
../src/dxftess.cc
../src/import.cc
- ../src/export.cc)
+ ../src/export.cc)
set(CGAL_SOURCES
${NOCGAL_SOURCES}
- ../src/CSGTermEvaluator.cc
+ ../src/CSGTermEvaluator.cc
../src/CGAL_Nef_polyhedron.cc
../src/cgalutils.cc
../src/CGALEvaluator.cc
@@ -480,19 +525,6 @@ set(COMMON_SOURCES
#
# Offscreen OpenGL context source code
#
-if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- message(STATUS "Offscreen OpenGL Context - using Apple CGL")
- set(OFFSCREEN_CTX_SOURCE "OffscreenContextCGL.mm" CACHE TYPE STRING)
- set(OFFSCREEN_IMGUTILS_SOURCE "imageutils-macosx.cc" CACHE TYPE STRING)
-elseif(UNIX)
- message(STATUS "Offscreen OpenGL Context - using Unix GLX")
- set(OFFSCREEN_CTX_SOURCE "OffscreenContextGLX.cc" CACHE TYPE STRING)
- set(OFFSCREEN_IMGUTILS_SOURCE "imageutils-lodepng.cc" CACHE TYPE STRING)
-elseif(WIN32)
- message(STATUS "Offscreen OpenGL Context - using Microsoft WGL")
- set(OFFSCREEN_CTX_SOURCE "OffscreenContextWGL.cc" CACHE TYPE STRING)
- set(OFFSCREEN_IMGUTILS_SOURCE "imageutils-lodepng.cc" CACHE TYPE STRING)
-endif()
set(OFFSCREEN_SOURCES
../src/GLView.cc
@@ -501,7 +533,15 @@ set(OFFSCREEN_SOURCES
../src/${OFFSCREEN_IMGUTILS_SOURCE}
../src/imageutils.cc
../src/fbo.cc
- ../src/system-gl.cc)
+ ../src/system-gl.cc
+ ../src/export_png.cc
+ ../src/CGALRenderer.cc
+ ../src/ThrownTogetherRenderer.cc
+ ../src/renderer.cc
+ ../src/render.cc
+ ../src/PlatformUtils.cc
+ ../src/${PLATFORMUTILS_SOURCE}
+ ../src/OpenCSGRenderer.cc)
add_library(tests-core STATIC ${CORE_SOURCES})
target_link_libraries(tests-core ${OPENGL_LIBRARIES})
@@ -518,14 +558,14 @@ set(TESTS-CGAL-LIBRARIES ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${GMP_LIBRA
add_library(tests-nocgal STATIC ${NOCGAL_SOURCES})
target_link_libraries(tests-nocgal tests-common)
add_library(tests-offscreen STATIC ${OFFSCREEN_SOURCES})
-# set_target_properties(tests-offscreen PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}")
+set_target_properties(tests-offscreen PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}")
set(TESTS-NOCGAL-LIBRARIES ${TESTS-CORE-LIBRARIES})
#
# modulecachetest
#
add_executable(modulecachetest modulecachetest.cc)
-target_link_libraries(modulecachetest tests-nocgal ${TESTS-NOCGAL-LIBRARIES})
+target_link_libraries(modulecachetest tests-nocgal ${TESTS-NOCGAL-LIBRARIES} ${Boost_LIBRARIES})
#
# csgtexttest
@@ -541,35 +581,40 @@ set_target_properties(cgalcachetest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CG
target_link_libraries(cgalcachetest tests-cgal ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY})
#
-# throwntogethertest
+# openscad no-qt
#
-
-add_executable(throwntogethertest throwntogethertest.cc csgtestcore.cc ../src/OpenCSGRenderer.cc ../src/ThrownTogetherRenderer.cc ../src/renderer.cc ../src/rendersettings.cc)
-set_target_properties(throwntogethertest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}")
-target_link_libraries(throwntogethertest tests-offscreen tests-cgal ${OPENCSG_LIBRARY} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY})
+add_executable(openscad_nogui ../src/openscad.cc)
+set_target_properties(openscad_nogui PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing -DEIGEN_DONT_ALIGN -DENABLE_CGAL -DENABLE_OPENCSG ${CGAL_CXX_FLAGS_INIT}")
+target_link_libraries(openscad_nogui tests-offscreen tests-cgal tests-nocgal ${TESTS-CORE-LIBRARIES} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${Boost_LIBRARIES} ${OPENCSG_LIBRARY} ${COCOA_LIBRARY} )
#
# GUI binary tests
#
-if(APPLE)
- set(GUI_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../OpenSCAD.app/Contents/MacOS/OpenSCAD")
-elseif (MINGW_CROSS_ENV_DIR)
- set(GUI_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../mingw32/release/openscad.exe")
-elseif(WIN32)
- set(GUI_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../Release/openscad.exe")
-else()
- set(GUI_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../openscad")
-endif()
-
-if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/openscad")
- set(GUI_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad")
-endif()
-
-if(EXISTS "${GUI_BINPATH}")
- message(STATUS "Found OpenSCAD GUI binary: ${GUI_BINPATH}")
+#if(APPLE)
+# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../OpenSCAD.app/Contents/MacOS/OpenSCAD")
+#elseif (MINGW_CROSS_ENV_DIR)
+# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../mingw32/release/openscad.exe")
+#elseif(WIN32)
+# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../Release/openscad.exe")
+#else()
+# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_SOURCE_DIR}/../openscad")
+#endif()
+
+#if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/openscad")
+# set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad")
+#endif()
+
+#if(EXISTS "${OPENSCAD_BINPATH}")
+# message(STATUS "Found OpenSCAD binary: ${OPENSCAD_BINPATH}")
+#else()
+# message(STATUS "Couldn't find the OpenSCAD binary: ${OPENSCAD_BINPATH}")
+# message(FATAL_ERROR "Please build the OpenSCAD binary and place it here: ${OPENSCAD_BINPATH}" )
+#endif()
+
+if(WIN32)
+ set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad_nogui.exe")
else()
- message(STATUS "Couldn't find the OpenSCAD GUI binary: ${GUI_BINPATH}")
- message(FATAL_ERROR "Please build the OpenSCAD GUI binary and place it here: ${GUI_BINPATH}" )
+ set(OPENSCAD_BINPATH "${CMAKE_CURRENT_BINARY_DIR}/openscad_nogui")
endif()
#
@@ -836,6 +881,7 @@ string(REPLACE __cmake_current_source_dir__ ${CMAKE_CURRENT_SOURCE_DIR} TMP ${TM
string(REPLACE __python__ ${PYTHON_EXECUTABLE} TMP ${TMP})
string(REPLACE __header__ "Generated by cmake from ${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.template" TMP ${TMP})
string(REPLACE __cmake_system_name__ ${CMAKE_SYSTEM_NAME} TMP ${TMP})
+string(REPLACE __openscad_binpath__ ${OPENSCAD_BINPATH} TMP ${TMP})
if (MINGW_CROSS_ENV_DIR)
string(REPLACE __wine__ wine TMP ${TMP})
@@ -848,9 +894,7 @@ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake ${TMP})
# Add tests
-add_cmdline_test(echotest SUFFIX txt ARGS ${GUI_BINPATH} FILES ${ECHO_FILES})
-add_cmdline_test(dumptest SUFFIX csg ARGS ${GUI_BINPATH} FILES ${DUMPTEST_FILES})
-add_cmdline_test(moduledumptest EXE ${GUI_BINPATH} ARGS -o SUFFIX ast FILES
+add_cmdline_test(moduledumptest EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX ast FILES
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allmodules.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allfunctions.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/misc/allexpressions.scad)
@@ -858,67 +902,69 @@ add_cmdline_test(csgtexttest SUFFIX txt FILES
${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(csgtermtest EXE ${GUI_BINPATH} ARGS -o SUFFIX term FILES
+add_cmdline_test(csgtermtest EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX term FILES
${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(cgalpngtest EXE ${GUI_BINPATH} ARGS --render -o SUFFIX png FILES ${CGALPNGTEST_FILES})
-add_cmdline_test(opencsgtest EXE ${GUI_BINPATH} ARGS -o SUFFIX png FILES ${OPENCSGTEST_FILES})
-add_cmdline_test(throwntogethertest SUFFIX png FILES ${THROWNTOGETHERTEST_FILES})
+add_cmdline_test(echotest EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX echo FILES ${ECHO_FILES})
+add_cmdline_test(dumptest EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX csg FILES ${DUMPTEST_FILES})
+add_cmdline_test(cgalpngtest EXE ${OPENSCAD_BINPATH} ARGS --render -o SUFFIX png FILES ${CGALPNGTEST_FILES})
+add_cmdline_test(opencsgtest EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX png FILES ${OPENCSGTEST_FILES})
+add_cmdline_test(throwntogethertest EXE ${OPENSCAD_BINPATH} ARGS --preview=throwntogether -o SUFFIX png FILES ${THROWNTOGETHERTEST_FILES})
# FIXME: We don't actually need to compare the output of cgalstlsanitytest
# with anything. It's self-contained and returns != 0 on error
-add_cmdline_test(cgalstlsanitytest SUFFIX txt ARGS ${GUI_BINPATH} FILES ${CGALSTLSANITYTEST_FILES})
+add_cmdline_test(cgalstlsanitytest EXE ${CMAKE_SOURCE_DIR}/cgalstlsanitytest SUFFIX txt ARGS ${OPENSCAD_BINPATH} FILES ${CGALSTLSANITYTEST_FILES})
# Tests using the actual OpenSCAD binary
# non-ASCII filenames
-add_cmdline_test(openscad-nonascii EXE ${GUI_BINPATH} ARGS -o
+add_cmdline_test(openscad-nonascii EXE ${OPENSCAD_BINPATH} ARGS -o
SUFFIX csg
FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/sfære.scad)
# Image output
-add_cmdline_test(openscad-imgsize EXE ${GUI_BINPATH}
+add_cmdline_test(openscad-imgsize EXE ${OPENSCAD_BINPATH}
ARGS --imgsize 100,100 -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-imgstretch EXE ${GUI_BINPATH}
+add_cmdline_test(openscad-imgstretch EXE ${OPENSCAD_BINPATH}
ARGS --imgsize 500,100 -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-imgstretch2 EXE ${GUI_BINPATH}
+add_cmdline_test(openscad-imgstretch2 EXE ${OPENSCAD_BINPATH}
ARGS --imgsize 100,500 -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-camdist EXE ${GUI_BINPATH}
- ARGS --imgsize=500,500 --camera=0,0,0,0,0,0,300 examples/example001.scad -o
+add_cmdline_test(openscad-camdist EXE ${OPENSCAD_BINPATH}
+ ARGS --imgsize=500,500 --camera=0,0,0,90,0,90,300 examples/example001.scad -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-camrot EXE ${GUI_BINPATH}
- ARGS --imgsize=500,500 --camera=0,0,0,10,22.5,45,300 examples/example001.scad -o
+add_cmdline_test(openscad-camrot EXE ${OPENSCAD_BINPATH}
+ ARGS --imgsize=500,500 --camera=0,0,0,440,337.5,315,300 examples/example001.scad -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-camtrans EXE ${GUI_BINPATH}
- ARGS --imgsize=500,500 --camera=20,100,10,0,0,0,300 examples/example001.scad -o
+add_cmdline_test(openscad-camtrans EXE ${OPENSCAD_BINPATH}
+ ARGS --imgsize=500,500 --camera=100,-20,-10,90,0,90,300 examples/example001.scad -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-camortho EXE ${GUI_BINPATH}
- ARGS --imgsize=500,500 --camera=20,100,10,0,0,0,300 examples/example001.scad --projection=o -o
+add_cmdline_test(openscad-camortho EXE ${OPENSCAD_BINPATH}
+ ARGS --imgsize=500,500 --camera=100,-20,-10,90,0,90,300 examples/example001.scad --projection=o -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-cameye EXE ${GUI_BINPATH}
+add_cmdline_test(openscad-cameye EXE ${OPENSCAD_BINPATH}
ARGS --imgsize=500,500 --camera=60,40,30,0,0,0 examples/example001.scad -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-cameye2 EXE ${GUI_BINPATH}
+add_cmdline_test(openscad-cameye2 EXE ${OPENSCAD_BINPATH}
ARGS --imgsize=500,500 --camera=160,140,130,0,0,0 examples/example001.scad -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-cameyeortho EXE ${GUI_BINPATH}
+add_cmdline_test(openscad-cameyeortho EXE ${OPENSCAD_BINPATH}
ARGS --imgsize=500,500 --camera=160,140,130,0,0,0 examples/example001.scad --projection=o -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
-add_cmdline_test(openscad-camcenter EXE ${GUI_BINPATH}
+add_cmdline_test(openscad-camcenter EXE ${OPENSCAD_BINPATH}
ARGS --imgsize=500,500 --camera=60,40,30,20,10,30 -o
SUFFIX png
FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad)
diff --git a/tests/CTestCustom.template b/tests/CTestCustom.template
index fd6ba8b..3f82d73 100644
--- a/tests/CTestCustom.template
+++ b/tests/CTestCustom.template
@@ -51,6 +51,9 @@ if( __cmake_system_name__ MATCHES "Linux|BSD")
# in the build directory).
set(ENV{DISPLAY} "${VFB_DISPLAY}")
+ # this line is for MCAD
+ set(ENV{OPENSCADPATH} "__cmake_current_source_dir__/../libraries")
+
set(CTEST_CUSTOM_POST_TEST "__cmake_current_source_dir__/virtualfb.sh")
endif()
endif()
@@ -58,8 +61,8 @@ endif()
# Part 1. Pretty Printing
-message("running 'opencsgtest --info' to generate sysinfo.txt")
-execute_process(COMMAND __wine__ __cmake_current_binary_dir__/opencsgtest --info OUTPUT_FILE sysinfo.txt)
+message("running '__openscad_binpath__ --info' to generate sysinfo.txt")
+execute_process(COMMAND __wine__ __openscad_binpath__ --info OUTPUT_FILE sysinfo.txt)
set(CTEST_CUSTOM_POST_TEST ${CTEST_CUSTOM_POST_TEST} "__cmake_current_binary_dir__/test_pretty_print")
if ( ${debug_openscad_template} )
diff --git a/tests/FindBoost.cmake b/tests/FindBoost.cmake
index ea60354..681cb57 100644
--- a/tests/FindBoost.cmake
+++ b/tests/FindBoost.cmake
@@ -887,6 +887,8 @@ else(_boost_IN_CACHE)
"$ENV{ProgramFiles}/boost/lib"
"$ENV{ProgramFiles}/boost"
/sw/local/lib
+ /opt/local/lib
+ /usr/local/lib
)
set(_boost_LIBRARY_SEARCH_DIRS ${_boost_LIBRARY_SEARCH_DIRS_ALWAYS})
if( Boost_NO_SYSTEM_PATHS )
diff --git a/tests/csgtestcore.cc b/tests/csgtestcore.cc
deleted file mode 100644
index 7b9dbab..0000000
--- a/tests/csgtestcore.cc
+++ /dev/null
@@ -1,212 +0,0 @@
-// csg test core, used by throwntegether test and opencsg test
-#include "csgtestcore.h"
-
-#include "tests-common.h"
-#include "system-gl.h"
-#include "openscad.h"
-#include "parsersettings.h"
-#include "builtin.h"
-#include "modcontext.h"
-#include "node.h"
-#include "module.h"
-#include "polyset.h"
-#include "Tree.h"
-#include "CSGTermEvaluator.h"
-#include "CGALEvaluator.h"
-#include "PolySetCGALEvaluator.h"
-
-#include <opencsg.h>
-#include "OpenCSGRenderer.h"
-#include "ThrownTogetherRenderer.h"
-
-#include "csgterm.h"
-#include "csgtermnormalizer.h"
-#include "OffscreenView.h"
-
-#include <sstream>
-#include <vector>
-
-#include <boost/program_options.hpp>
-#include <boost/filesystem.hpp>
-
-#include "CsgInfo.h"
-
-namespace po = boost::program_options;
-namespace fs = boost::filesystem;
-#include "boosty.h"
-
-using std::string;
-using std::vector;
-using std::cerr;
-using std::cout;
-
-std::string commandline_commands;
-
-//#define DEBUG
-
-string info_dump(OffscreenView *glview)
-{
- assert(glview);
-
-#ifdef __GNUG__
-#define compiler_info "GCC " << __VERSION__
-#elif defined(_MSC_VER)
-#define compiler_info "MSVC " << _MSC_FULL_VER
-#else
-#define compiler_info "unknown compiler"
-#endif
-
-#ifndef OPENCSG_VERSION_STRING
-#define OPENCSG_VERSION_STRING "unknown, <1.3.2"
-#endif
-
- std::stringstream out;
-#define STRINGIFY(x) #x
-#define TOSTRING(x) STRINGIFY(x)
- out << "\nOpenSCAD Version: " << TOSTRING(OPENSCAD_VERSION)
- << "\nCompiled by: " << compiler_info
- << "\nCompile date: " << __DATE__
- << "\nBoost version: " << BOOST_LIB_VERSION
- << "\nEigen version: " << EIGEN_WORLD_VERSION << "."
- << EIGEN_MAJOR_VERSION << "." << EIGEN_MINOR_VERSION
- << "\nCGAL version: " << TOSTRING(CGAL_VERSION)
- << "\nOpenCSG version: " << OPENCSG_VERSION_STRING
- << "\n" << glview->getRendererInfo()
- << "\n";
-
- return out.str();
-}
-
-po::variables_map parse_options(int argc, char *argv[])
-{
- po::options_description desc("Allowed options");
- desc.add_options()
- ("help,h", "help message")//;
- ("info,i", "information on GLEW, OpenGL, OpenSCAD, and OS")//;
-
-// po::options_description hidden("Hidden options");
-// hidden.add_options()
- ("input-file", po::value< vector<string> >(), "input file")
- ("output-file", po::value< vector<string> >(), "output file");
-
- po::positional_options_description p;
- p.add("input-file", 1).add("output-file", 1);
-
- po::options_description all_options;
- all_options.add(desc); // .add(hidden);
-
- po::variables_map vm;
- po::store(po::command_line_parser(argc, argv).options(all_options).positional(p).run(), vm);
- po::notify(vm);
-
- return vm;
-}
-
-int csgtestcore(int argc, char *argv[], test_type_e test_type)
-{
- bool sysinfo_dump = false;
- const char *filename, *outfilename = NULL;
- po::variables_map vm;
- try {
- vm = parse_options(argc, argv);
- } catch ( po::error e ) {
- cerr << "error parsing options\n";
- }
- if (vm.count("info")) sysinfo_dump = true;
- if (vm.count("input-file"))
- filename = vm["input-file"].as< vector<string> >().begin()->c_str();
- if (vm.count("output-file"))
- outfilename = vm["output-file"].as< vector<string> >().begin()->c_str();
-
- if ((!filename || !outfilename) && !sysinfo_dump) {
- cerr << "Usage: " << argv[0] << " <file.scad> <output.png>\n";
- exit(1);
- }
-
- Builtins::instance()->initialize();
-
- fs::path original_path = fs::current_path();
-
- std::string currentdir = boosty::stringy( fs::current_path() );
-
- parser_init(boosty::stringy(fs::path(argv[0]).branch_path()));
- add_librarydir(boosty::stringy(fs::path(argv[0]).branch_path() / "../libraries"));
-
- ModuleContext top_ctx;
- top_ctx.registerBuiltin();
-
- FileModule *root_module;
- ModuleInstantiation root_inst("group");
-
- if (sysinfo_dump)
- root_module = parse("sphere();","",false);
- else
- root_module = parsefile(filename);
-
- if (!root_module) {
- exit(1);
- }
-
- if (!sysinfo_dump) {
- fs::path fpath = boosty::absolute(fs::path(filename));
- fs::path fparent = fpath.parent_path();
- fs::current_path(fparent);
- top_ctx.setDocumentPath(fparent.string());
- }
-
- AbstractNode::resetIndexCounter();
- AbstractNode *absolute_root_node = root_module->instantiate(&top_ctx, &root_inst);
- AbstractNode *root_node;
- // Do we have an explicit root node (! modifier)?
- if (!(root_node = find_root_tag(absolute_root_node))) root_node = absolute_root_node;
-
- Tree tree(root_node);
-
- CsgInfo csgInfo = CsgInfo();
- if ( !csgInfo.compile_chains( tree ) ) return 1;
-
- fs::current_path(original_path);
-
- try {
- csgInfo.glview = new OffscreenView(512,512);
- } catch (int error) {
- fprintf(stderr,"Can't create OpenGL OffscreenView. Code: %i. Exiting.\n", error);
- exit(1);
- }
-
- if (sysinfo_dump) cout << info_dump(csgInfo.glview);
- Camera camera(Camera::VECTOR);
- camera.center << 0,0,0;
- double radius = 1.0;
-
- if (csgInfo.root_chain) {
- BoundingBox bbox = csgInfo.root_chain->getBoundingBox();
- camera.center = (bbox.min() + bbox.max()) / 2;
- radius = (bbox.max() - bbox.min()).norm() / 2;
- }
- Vector3d cameradir(1, 1, -0.5);
- camera.eye = camera.center - radius*1.8*cameradir;
- csgInfo.glview->setCamera(camera);
-
- OpenCSGRenderer opencsgRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain, csgInfo.glview->shaderinfo);
- ThrownTogetherRenderer thrownTogetherRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain);
-
- if (test_type == TEST_THROWNTOGETHER)
- csgInfo.glview->setRenderer(&thrownTogetherRenderer);
- else
- csgInfo.glview->setRenderer(&opencsgRenderer);
-
- OpenCSG::setContext(0);
- OpenCSG::setOption(OpenCSG::OffscreenSetting, OpenCSG::FrameBufferObject);
-
- csgInfo.glview->paintGL();
-
- if (outfilename) csgInfo.glview->save(outfilename);
-
- delete root_node;
- delete root_module;
-
- Builtins::instance(true);
-
- return 0;
-}
diff --git a/tests/csgtestcore.h b/tests/csgtestcore.h
deleted file mode 100644
index 330c894..0000000
--- a/tests/csgtestcore.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef CSGTESTCORE_H_
-#define CSGTESTCORE_H_
-
-enum test_type_e {
- TEST_THROWNTOGETHER,
- TEST_OPENCSG
-};
-
-int csgtestcore(int argc, char *argv[], test_type_e test_type);
-
-#endif
-
diff --git a/tests/dumptest b/tests/dumptest
deleted file mode 100755
index f9247c7..0000000
--- a/tests/dumptest
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env python
-
-import re, sys, subprocess
-
-subprocess.check_call([sys.argv[2], sys.argv[1], '-o', sys.argv[3]])
-
-result = open(sys.argv[3]).read()
-
-result = re.sub(r', timestamp = [0-9]*', '', result)
-result = re.sub(r'-?[0-9].[0-9]*e-[0-9]{2,}', '0', result)
-
-open(sys.argv[3], 'w').write(result)
diff --git a/tests/echotest b/tests/echotest
deleted file mode 100755
index bad382c..0000000
--- a/tests/echotest
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env python
-
-import re, sys, subprocess
-
-result = subprocess.check_output([sys.argv[2], sys.argv[1], '-o', 'null'], stderr=subprocess.STDOUT)
-
-result = re.sub(r'-?[0-9].[0-9]*e-[0-9]{2,}', '0', result)
-
-open(sys.argv[3], 'w').write(result)
diff --git a/tests/regression/cgalpngtest/resize-2d-tests-expected.png b/tests/regression/cgalpngtest/resize-2d-tests-expected.png
index 44e9598..e764ac3 100644
--- a/tests/regression/cgalpngtest/resize-2d-tests-expected.png
+++ b/tests/regression/cgalpngtest/resize-2d-tests-expected.png
Binary files differ
diff --git a/tests/regression/cgalpngtest/resize-tests-expected.png b/tests/regression/cgalpngtest/resize-tests-expected.png
index 8f994bf..6a5bb32 100644
--- a/tests/regression/cgalpngtest/resize-tests-expected.png
+++ b/tests/regression/cgalpngtest/resize-tests-expected.png
Binary files differ
diff --git a/tests/regression/dumptest/example005-expected.csg b/tests/regression/dumptest/example005-expected.csg
index dc5203f..653fb71 100644
--- a/tests/regression/dumptest/example005-expected.csg
+++ b/tests/regression/dumptest/example005-expected.csg
@@ -16,11 +16,11 @@ group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
group();
- multmatrix([[1, 0, 0, 69.282], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 69.28203230275], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
group();
- multmatrix([[1, 0, 0, 69.282], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 69.28203230275], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
group();
@@ -28,11 +28,11 @@ group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
group();
- multmatrix([[1, 0, 0, -69.282], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -69.28203230275], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
group();
- multmatrix([[1, 0, 0, -69.282], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -69.28203230275], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
}
diff --git a/tests/regression/dumptest/example010-expected.csg b/tests/regression/dumptest/example010-expected.csg
index b8b49ce..7d9c107 100644
--- a/tests/regression/dumptest/example010-expected.csg
+++ b/tests/regression/dumptest/example010-expected.csg
@@ -1,7 +1,7 @@
group() {
intersection() {
surface(file = "example010.dat", center = true);
- multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
surface(file = "example010.dat", center = true);
}
}
diff --git a/tests/regression/dumptest/example014-expected.csg b/tests/regression/dumptest/example014-expected.csg
index 46f7d67..ae43ad2 100644
--- a/tests/regression/dumptest/example014-expected.csg
+++ b/tests/regression/dumptest/example014-expected.csg
@@ -3,13 +3,13 @@ group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
- multmatrix([[0.469846, 0.882564, 0.0180283, 0], [-0.813798, 0.44097, -0.378522, 0], [-0.34202, 0.163176, 0.925417, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.46984631039, 0.88256411925, 0.01802831123, 0], [-0.81379768134, 0.44096961053, -0.37852230637, 0], [-0.34202014332, 0.16317591116, 0.92541657839, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
- multmatrix([[0.417218, 0.668356, -0.615817, 0], [0.642459, -0.696172, -0.320299, 0], [-0.642788, -0.262003, -0.719846, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.41721770627, 0.66835566162, -0.61581660836, 0], [0.64245892818, -0.69617191219, -0.32029860173, 0], [-0.64278760968, -0.26200263022, -0.71984631039, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
- multmatrix([[0.0190076, -0.601928, 0.798324, 0], [0.0292692, 0.798461, 0.601335, 0], [-0.999391, 0.0119363, 0.0327948, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.0190076282, -0.60192849838, 0.7983237394, 0], [0.02926918072, 0.79846077351, 0.60133493846, 0], [-0.99939082701, 0.01193633086, 0.03279479952, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
}
diff --git a/tests/regression/dumptest/example015-expected.csg b/tests/regression/dumptest/example015-expected.csg
index b1da238..4eec6a2 100644
--- a/tests/regression/dumptest/example015-expected.csg
+++ b/tests/regression/dumptest/example015-expected.csg
@@ -12,14 +12,14 @@ group() {
square(size = [15, 15], center = true);
}
}
- multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [100, 30], center = false);
}
}
}
}
- multmatrix([[0.707107, 0.707107, 0, 0], [-0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, 0.70710678118, 0, 0], [-0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0.7, 0, 0, 0], [0, 1.3, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 5);
}
diff --git a/tests/regression/dumptest/example017-expected.csg b/tests/regression/dumptest/example017-expected.csg
index fea49e8..86bd2a0 100644
--- a/tests/regression/dumptest/example017-expected.csg
+++ b/tests/regression/dumptest/example017-expected.csg
@@ -14,12 +14,12 @@ group() {
square(size = [6, 10], center = true);
}
}
- multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, -0.86602540378, 0, 0], [0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 10], center = true);
}
}
- multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, 0.86602540378, 0, 0], [-0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 10], center = true);
}
@@ -40,12 +40,12 @@ group() {
square(size = [6, 15], center = true);
}
}
- multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, -0.86602540378, 0, 0], [0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 15], center = true);
}
}
- multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, 0.86602540378, 0, 0], [-0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 15], center = true);
}
@@ -100,7 +100,7 @@ group() {
}
}
}
- multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, -0.86602540378, 0, 0], [0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 102], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, 0, -1, 0], [-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
@@ -143,7 +143,7 @@ group() {
}
}
}
- multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, 0.86602540378, 0, 0], [-0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 102], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, 0, -1, 0], [-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
diff --git a/tests/regression/dumptest/example018-expected.csg b/tests/regression/dumptest/example018-expected.csg
index bf23c87..7f13f40 100644
--- a/tests/regression/dumptest/example018-expected.csg
+++ b/tests/regression/dumptest/example018-expected.csg
@@ -12,13 +12,13 @@ group() {
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
union() {
cube(size = [45, 45, 45], center = true);
- multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, 0, 0.70710678118, 0], [0, 1, 0, 0], [-0.70710678118, 0, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
}
@@ -38,13 +38,13 @@ group() {
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
union() {
cube(size = [45, 45, 45], center = true);
- multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, 0, 0.70710678118, 0], [0, 1, 0, 0], [-0.70710678118, 0, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
}
@@ -64,13 +64,13 @@ group() {
multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
union() {
cube(size = [45, 45, 45], center = true);
- multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, 0, 0.70710678118, 0], [0, 1, 0, 0], [-0.70710678118, 0, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
}
@@ -102,13 +102,13 @@ group() {
multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
union() {
cube(size = [45, 45, 45], center = true);
- multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, 0, 0.70710678118, 0], [0, 1, 0, 0], [-0.70710678118, 0, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
- multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
}
diff --git a/tests/regression/dumptest/example020-expected.csg b/tests/regression/dumptest/example020-expected.csg
index df70577..e232ba6 100644
--- a/tests/regression/dumptest/example020-expected.csg
+++ b/tests/regression/dumptest/example020-expected.csg
@@ -8,43 +8,43 @@ group() {
group();
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[40, 0], [20, 0], [14.6239, 3.33781], [13.5145, 6.50826], [15.6366, 12.4698], [31.2733, 24.9396]], paths = undef, convexity = 1);
+ polygon(points = [[40, 0], [20, 0], [14.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[0.62349, -0.781831, 0, 0], [0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[40, 0], [20, 0], [14.6239, 3.33781], [13.5145, 6.50826], [15.6366, 12.4698], [31.2733, 24.9396]], paths = undef, convexity = 1);
+ multmatrix([[0.62348980185, -0.78183148246, 0, 0], [0.78183148246, 0.62348980185, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[40, 0], [20, 0], [14.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.222521, -0.974928, 0, 0], [0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[40, 0], [20, 0], [14.6239, 3.33781], [13.5145, 6.50826], [15.6366, 12.4698], [31.2733, 24.9396]], paths = undef, convexity = 1);
+ multmatrix([[-0.22252093395, -0.97492791218, 0, 0], [0.97492791218, -0.22252093395, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[40, 0], [20, 0], [14.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.900969, -0.433884, 0, 0], [0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[40, 0], [20, 0], [14.6239, 3.33781], [13.5145, 6.50826], [15.6366, 12.4698], [31.2733, 24.9396]], paths = undef, convexity = 1);
+ multmatrix([[-0.9009688679, -0.43388373911, 0, 0], [0.43388373911, -0.9009688679, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[40, 0], [20, 0], [14.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.900969, 0.433884, 0, 0], [-0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[40, 0], [20, 0], [14.6239, 3.33781], [13.5145, 6.50826], [15.6366, 12.4698], [31.2733, 24.9396]], paths = undef, convexity = 1);
+ multmatrix([[-0.9009688679, 0.43388373911, 0, 0], [-0.43388373911, -0.9009688679, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[40, 0], [20, 0], [14.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.222521, 0.974928, 0, 0], [-0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[40, 0], [20, 0], [14.6239, 3.33781], [13.5145, 6.50826], [15.6366, 12.4698], [31.2733, 24.9396]], paths = undef, convexity = 1);
+ multmatrix([[-0.22252093395, 0.97492791218, 0, 0], [-0.97492791218, -0.22252093395, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[40, 0], [20, 0], [14.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[0.62349, 0.781831, 0, 0], [-0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[40, 0], [20, 0], [14.6239, 3.33781], [13.5145, 6.50826], [15.6366, 12.4698], [31.2733, 24.9396]], paths = undef, convexity = 1);
+ multmatrix([[0.62348980185, 0.78183148246, 0, 0], [-0.78183148246, 0.62348980185, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[40, 0], [20, 0], [14.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
}
}
@@ -65,43 +65,43 @@ group() {
group();
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[42, 0], [21, 0], [15.5988, 3.56033], [14.4155, 6.94214], [16.4185, 13.0933], [32.8369, 26.1866]], paths = undef, convexity = 1);
+ polygon(points = [[42, 0], [21, 0], [15.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[0.62349, -0.781831, 0, 0], [0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[42, 0], [21, 0], [15.5988, 3.56033], [14.4155, 6.94214], [16.4185, 13.0933], [32.8369, 26.1866]], paths = undef, convexity = 1);
+ multmatrix([[0.62348980185, -0.78183148246, 0, 0], [0.78183148246, 0.62348980185, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[42, 0], [21, 0], [15.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.222521, -0.974928, 0, 0], [0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[42, 0], [21, 0], [15.5988, 3.56033], [14.4155, 6.94214], [16.4185, 13.0933], [32.8369, 26.1866]], paths = undef, convexity = 1);
+ multmatrix([[-0.22252093395, -0.97492791218, 0, 0], [0.97492791218, -0.22252093395, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[42, 0], [21, 0], [15.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.900969, -0.433884, 0, 0], [0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[42, 0], [21, 0], [15.5988, 3.56033], [14.4155, 6.94214], [16.4185, 13.0933], [32.8369, 26.1866]], paths = undef, convexity = 1);
+ multmatrix([[-0.9009688679, -0.43388373911, 0, 0], [0.43388373911, -0.9009688679, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[42, 0], [21, 0], [15.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.900969, 0.433884, 0, 0], [-0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[42, 0], [21, 0], [15.5988, 3.56033], [14.4155, 6.94214], [16.4185, 13.0933], [32.8369, 26.1866]], paths = undef, convexity = 1);
+ multmatrix([[-0.9009688679, 0.43388373911, 0, 0], [-0.43388373911, -0.9009688679, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[42, 0], [21, 0], [15.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[-0.222521, 0.974928, 0, 0], [-0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[42, 0], [21, 0], [15.5988, 3.56033], [14.4155, 6.94214], [16.4185, 13.0933], [32.8369, 26.1866]], paths = undef, convexity = 1);
+ multmatrix([[-0.22252093395, 0.97492791218, 0, 0], [-0.97492791218, -0.22252093395, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[42, 0], [21, 0], [15.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
}
group();
group() {
- multmatrix([[0.62349, 0.781831, 0, 0], [-0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- polygon(points = [[42, 0], [21, 0], [15.5988, 3.56033], [14.4155, 6.94214], [16.4185, 13.0933], [32.8369, 26.1866]], paths = undef, convexity = 1);
+ multmatrix([[0.62348980185, 0.78183148246, 0, 0], [-0.78183148246, 0.62348980185, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ polygon(points = [[42, 0], [21, 0], [15.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
}
}
@@ -117,7 +117,7 @@ group() {
group() {
group() {
group() {
- polygon(points = [[100, 0], [90.1087, 30.5878], [99.2773, 33.7001]], paths = undef, convexity = 1);
+ polygon(points = [[100, 0], [90.10870717256, 30.5877844104], [99.27731872645, 33.70010865023]], paths = undef, convexity = 1);
}
group();
group();
@@ -126,104 +126,104 @@ group() {
group();
group();
group() {
- polygon(points = [[99.2773, 33.7001], [90.1087, 30.5878], [74.0878, 56.8496], [84.5829, 64.9027]], paths = undef, convexity = 1);
+ polygon(points = [[99.27731872645, 33.70010865023], [90.10870717256, 30.5877844104], [74.08779492859, 56.84956452855], [84.58287312965, 64.90272127318]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[84.5829, 64.9027], [74.0878, 56.8496], [51.2201, 76.6563], [59.8939, 89.6376]], paths = undef, convexity = 1);
+ polygon(points = [[84.58287312965, 64.90272127318], [74.08779492859, 56.84956452855], [51.22010456048, 76.65630364955], [59.89394204343, 89.63761881095]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[59.8939, 89.6376], [51.2201, 76.6563], [23.6405, 88.2274], [28.1233, 104.958]], paths = undef, convexity = 1);
+ polygon(points = [[59.89394204343, 89.63761881095], [51.22010456048, 76.65630364955], [23.64046582983, 88.22741959152], [28.12334319067, 104.95774566628]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[28.1233, 104.958], [23.6405, 88.2274], [-5.93401, 90.5355], [-7.14662, 109.036]], paths = undef, convexity = 1);
+ polygon(points = [[28.12334319067, 104.95774566628], [23.64046582983, 88.22741959152], [-5.93400968795, 90.53549252778], [-7.14661615807, 109.03629211993]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-7.14662, 109.036], [-5.93401, 90.5355], [-34.563, 83.4425], [-41.9737, 101.333]], paths = undef, convexity = 1);
+ polygon(points = [[-7.14661615807, 109.03629211993], [-5.93400968795, 90.53549252778], [-34.56302683546, 83.44252814283], [-41.97365963755, 101.33337835942]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-41.9737, 101.333], [-34.563, 83.4425], [-59.3928, 67.7246], [-72.4763, 82.6434]], paths = undef, convexity = 1);
+ polygon(points = [[-41.97365963755, 101.33337835942], [-34.56302683546, 83.44252814283], [-59.39283755471, 67.72455141159], [-72.4763254653, 82.6434100842]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-72.4763, 82.6434], [-59.3928, 67.7246], [-77.9423, 45], [-95.2628, 55]], paths = undef, convexity = 1);
+ polygon(points = [[-72.4763254653, 82.6434100842], [-59.39283755471, 67.72455141159], [-77.94228634059, 45], [-95.26279441628, 55]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-95.2628, 55], [-77.9423, 45], [-88.3476, 17.5734], [-107.809, 21.4446]], paths = undef, convexity = 1);
+ polygon(points = [[-95.26279441628, 55], [-77.94228634059, 45], [-88.34760075969, 17.57343041942], [-107.80945532094, 21.4446339838]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-107.809, 21.4446], [-88.3476, 17.5734], [-89.5449, -11.7888], [-108.744, -14.3164]], paths = undef, convexity = 1);
+ polygon(points = [[-107.80945532094, 21.4446339838], [-88.34760075969, 17.57343041942], [-89.54486254542, -11.78880480022], [-108.74410972934, -14.31643364378]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-108.744, -14.3164], [-89.5449, -11.7888], [-81.373, -40.1287], [-98.0015, -48.329]], paths = undef, convexity = 1);
+ polygon(points = [[-108.74410972934, -14.31643364378], [-89.54486254542, -11.78880480022], [-81.37304131717, -40.12874312782], [-98.00150698935, -48.32899491597]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-98.0015, -48.329], [-81.373, -40.1287], [-64.587, -64.587], [-76.8344, -76.8344]], paths = undef, convexity = 1);
+ polygon(points = [[-98.00150698935, -48.32899491597], [-81.37304131717, -40.12874312782], [-64.58695376169, -64.58695376169], [-76.83440247561, -76.83440247561]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-76.8344, -76.8344], [-64.587, -64.587], [-40.7763, -82.6861], [-47.6815, -96.6885]], paths = undef, convexity = 1);
+ polygon(points = [[-76.83440247561, -76.83440247561], [-64.58695376169, -64.58695376169], [-40.77625404048, -82.68606355865], [-47.68148400331, -96.68848474788]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-47.6815, -96.6885], [-40.7763, -82.6861], [-12.1893, -92.5867], [-13.916, -105.702]], paths = undef, convexity = 1);
+ polygon(points = [[-47.68148400331, -96.68848474788], [-40.77625404048, -82.68606355865], [-12.18926961151, -92.58669478281], [-13.91596883249, -105.70227749195]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
- polygon(points = [[-13.916, -105.702], [-12.1893, -92.5867], [18.5646, -93.3303], [20.4535, -102.827]], paths = undef, convexity = 1);
+ polygon(points = [[-13.91596883249, -105.70227749195], [-12.18926961151, -92.58669478281], [18.56455524139, -93.33032171881], [20.45350916183, -102.82673436183]], paths = undef, convexity = 1);
}
}
group() {
group();
group() {
- polygon(points = [[20.4535, -102.827], [18.5646, -93.3303], [50, -86.6025]], paths = undef, convexity = 1);
+ polygon(points = [[20.45350916183, -102.82673436183], [18.56455524139, -93.33032171881], [50, -86.60254037844]], paths = undef, convexity = 1);
}
group();
}
diff --git a/tests/regression/dumptest/example021-expected.csg b/tests/regression/dumptest/example021-expected.csg
index 984618f..3d4aee0 100644
--- a/tests/regression/dumptest/example021-expected.csg
+++ b/tests/regression/dumptest/example021-expected.csg
@@ -34,12 +34,12 @@ group() {
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -58,12 +58,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 15], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -15], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -82,12 +82,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -106,12 +106,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -5], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -130,12 +130,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -154,12 +154,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -5], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -178,12 +178,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -202,12 +202,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -15], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 15], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
@@ -226,12 +226,12 @@ group() {
}
}
}
- multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, -0.35355339059, 0], [0.0669872981, 0.93301270189, 0.35355339059, 0], [0.35355339059, -0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
- multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.93301270189, 0.0669872981, 0.35355339059, 0], [0.0669872981, 0.93301270189, -0.35355339059, 0], [-0.35355339059, 0.35355339059, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
diff --git a/tests/regression/dumptest/example023-expected.csg b/tests/regression/dumptest/example023-expected.csg
index cd990d1..ffd79e7 100644
--- a/tests/regression/dumptest/example023-expected.csg
+++ b/tests/regression/dumptest/example023-expected.csg
@@ -2,7 +2,7 @@ group() {
group() {
group() {
group() {
- multmatrix([[0.5, -0.866025, 0, 0], [0.866025, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.5, -0.86602540378, 0, 0], [0.86602540378, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
@@ -25,7 +25,7 @@ group() {
}
}
group() {
- multmatrix([[0.866025, -0.5, 0, 0], [0.5, 0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.86602540378, -0.5, 0, 0], [0.5, 0.86602540378, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
@@ -81,7 +81,7 @@ group() {
}
}
group() {
- multmatrix([[0.866025, 0.5, 0, 0], [-0.5, 0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.86602540378, 0.5, 0, 0], [-0.5, 0.86602540378, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
@@ -109,7 +109,7 @@ group() {
}
}
group() {
- multmatrix([[0.5, 0.866025, 0, 0], [-0.866025, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.5, 0.86602540378, 0, 0], [-0.86602540378, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
@@ -160,7 +160,7 @@ group() {
}
}
group() {
- multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, 0.86602540378, 0, 0], [-0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
@@ -193,7 +193,7 @@ group() {
}
}
group() {
- multmatrix([[-0.866025, 0.5, 0, 0], [-0.5, -0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.86602540378, 0.5, 0, 0], [-0.5, -0.86602540378, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
@@ -254,7 +254,7 @@ group() {
}
}
group() {
- multmatrix([[-0.866025, -0.5, 0, 0], [0.5, -0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.86602540378, -0.5, 0, 0], [0.5, -0.86602540378, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
@@ -277,7 +277,7 @@ group() {
}
}
group() {
- multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-0.5, -0.86602540378, 0, 0], [0.86602540378, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 16], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
diff --git a/tests/regression/dumptest/example024-expected.csg b/tests/regression/dumptest/example024-expected.csg
index 2d82935..8755567 100644
--- a/tests/regression/dumptest/example024-expected.csg
+++ b/tests/regression/dumptest/example024-expected.csg
@@ -1,6 +1,6 @@
group() {
difference() {
- multmatrix([[0.816497, 0.408248, 0.408248, 0], [0, 0.707107, -0.707107, 0], [-0.57735, 0.57735, 0.57735, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.81649658092, 0.40824829046, 0.40824829046, 0], [0, 0.70710678118, -0.70710678118, 0], [-0.57735026919, 0.57735026919, 0.57735026919, 0], [0, 0, 0, 1]]) {
group() {
difference() {
cube(size = [100, 100, 100], center = true);
@@ -11,13 +11,13 @@ group() {
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -25,7 +25,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -33,7 +33,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -41,7 +41,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -50,7 +50,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -58,7 +58,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -66,7 +66,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -74,7 +74,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -87,13 +87,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -101,7 +101,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -109,7 +109,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -117,7 +117,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -126,7 +126,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -134,7 +134,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -142,7 +142,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -150,7 +150,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -163,13 +163,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -177,7 +177,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -185,7 +185,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -193,7 +193,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -202,7 +202,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -210,7 +210,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -218,7 +218,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -226,7 +226,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -239,13 +239,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -253,7 +253,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -261,7 +261,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -269,7 +269,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -278,7 +278,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -286,7 +286,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -294,7 +294,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -302,7 +302,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -316,13 +316,13 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -330,7 +330,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -338,7 +338,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -346,7 +346,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -355,7 +355,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -363,7 +363,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -371,7 +371,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -379,7 +379,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -392,13 +392,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -406,7 +406,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -414,7 +414,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -422,7 +422,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -431,7 +431,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -439,7 +439,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -447,7 +447,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -455,7 +455,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -468,13 +468,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -482,7 +482,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -490,7 +490,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -498,7 +498,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -507,7 +507,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -515,7 +515,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -523,7 +523,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -531,7 +531,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -544,13 +544,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -558,7 +558,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -566,7 +566,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -574,7 +574,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -583,7 +583,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -591,7 +591,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -599,7 +599,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -607,7 +607,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -629,13 +629,13 @@ group() {
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -643,7 +643,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -651,7 +651,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -659,7 +659,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -668,7 +668,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -676,7 +676,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -684,7 +684,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -692,7 +692,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -705,13 +705,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -719,7 +719,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -727,7 +727,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -735,7 +735,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -744,7 +744,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -752,7 +752,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -760,7 +760,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -768,7 +768,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -781,13 +781,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -795,7 +795,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -803,7 +803,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -811,7 +811,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -820,7 +820,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -828,7 +828,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -836,7 +836,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -844,7 +844,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -857,13 +857,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -871,7 +871,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -879,7 +879,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -887,7 +887,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -896,7 +896,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -904,7 +904,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -912,7 +912,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -920,7 +920,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -934,13 +934,13 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -948,7 +948,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -956,7 +956,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -964,7 +964,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -973,7 +973,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -981,7 +981,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -989,7 +989,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -997,7 +997,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1010,13 +1010,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1024,7 +1024,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1032,7 +1032,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1040,7 +1040,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1049,7 +1049,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1057,7 +1057,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1065,7 +1065,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1073,7 +1073,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1086,13 +1086,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1100,7 +1100,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1108,7 +1108,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1116,7 +1116,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1125,7 +1125,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1133,7 +1133,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1141,7 +1141,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1149,7 +1149,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1162,13 +1162,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1176,7 +1176,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1184,7 +1184,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1192,7 +1192,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1201,7 +1201,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1209,7 +1209,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1217,7 +1217,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1225,7 +1225,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1247,13 +1247,13 @@ group() {
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1261,7 +1261,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1269,7 +1269,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1277,7 +1277,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1286,7 +1286,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1294,7 +1294,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1302,7 +1302,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1310,7 +1310,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1323,13 +1323,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1337,7 +1337,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1345,7 +1345,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1353,7 +1353,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1362,7 +1362,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1370,7 +1370,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1378,7 +1378,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1386,7 +1386,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1399,13 +1399,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.3333], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -33.33333333333], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1413,7 +1413,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1421,7 +1421,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1429,7 +1429,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1438,7 +1438,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1446,7 +1446,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1454,7 +1454,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1462,7 +1462,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1475,13 +1475,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1489,7 +1489,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1497,7 +1497,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1505,7 +1505,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1514,7 +1514,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1522,7 +1522,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1530,7 +1530,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1538,7 +1538,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1552,13 +1552,13 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1566,7 +1566,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1574,7 +1574,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1582,7 +1582,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1591,7 +1591,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1599,7 +1599,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1607,7 +1607,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1615,7 +1615,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1628,13 +1628,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, -33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, -33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1642,7 +1642,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1650,7 +1650,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1658,7 +1658,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1667,7 +1667,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1675,7 +1675,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1683,7 +1683,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1691,7 +1691,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1704,13 +1704,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1718,7 +1718,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1726,7 +1726,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1734,7 +1734,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1743,7 +1743,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1751,7 +1751,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1759,7 +1759,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1767,7 +1767,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1780,13 +1780,13 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.3333], [0, 0, 1, 33.3333], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 33.33333333333], [0, 0, 1, 33.33333333333], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 11.1111, 11.1111], center = true);
group() {
group() {
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1794,7 +1794,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1802,7 +1802,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1810,7 +1810,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1819,7 +1819,7 @@ group() {
}
group();
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1827,7 +1827,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, -11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, -11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1835,7 +1835,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
@@ -1843,7 +1843,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.1111], [0, 0, 1, 11.1111], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 11.11111111111], [0, 0, 1, 11.11111111111], [0, 0, 0, 1]]) {
group() {
cube(size = [110, 3.7037, 3.7037], center = true);
group();
diff --git a/tests/regression/dumptest/intersection_for-tests-expected.csg b/tests/regression/dumptest/intersection_for-tests-expected.csg
index 0042824..68e8321 100644
--- a/tests/regression/dumptest/intersection_for-tests-expected.csg
+++ b/tests/regression/dumptest/intersection_for-tests-expected.csg
@@ -5,13 +5,13 @@ group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
- multmatrix([[0.469846, 0.882564, 0.0180283, 0], [-0.813798, 0.44097, -0.378522, 0], [-0.34202, 0.163176, 0.925417, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.46984631039, 0.88256411925, 0.01802831123, 0], [-0.81379768134, 0.44096961053, -0.37852230637, 0], [-0.34202014332, 0.16317591116, 0.92541657839, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
- multmatrix([[0.417218, 0.668356, -0.615817, 0], [0.642459, -0.696172, -0.320299, 0], [-0.642788, -0.262003, -0.719846, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.41721770627, 0.66835566162, -0.61581660836, 0], [0.64245892818, -0.69617191219, -0.32029860173, 0], [-0.64278760968, -0.26200263022, -0.71984631039, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
- multmatrix([[0.0190076, -0.601928, 0.798324, 0], [0.0292692, 0.798461, 0.601335, 0], [-0.999391, 0.0119363, 0.0327948, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.0190076282, -0.60192849838, 0.7983237394, 0], [0.02926918072, 0.79846077351, 0.60133493846, 0], [-0.99939082701, 0.01193633086, 0.03279479952, 0], [0, 0, 0, 1]]) {
cube(size = [100, 20, 20], center = true);
}
}
diff --git a/tests/regression/dumptest/module-recursion-expected.csg b/tests/regression/dumptest/module-recursion-expected.csg
index d7ed7a3..5117f53 100644
--- a/tests/regression/dumptest/module-recursion-expected.csg
+++ b/tests/regression/dumptest/module-recursion-expected.csg
@@ -4,30 +4,30 @@ group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 0.2, r2 = 0.2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.7, r1 = 0.14, r2 = 0.14, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.7], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.49, r1 = 0.098, r2 = 0.098, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.49], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
@@ -37,18 +37,18 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
@@ -63,24 +63,24 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.49, r1 = 0.098, r2 = 0.098, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.49], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
@@ -90,18 +90,18 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
@@ -121,30 +121,30 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.7, r1 = 0.14, r2 = 0.14, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.7], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.49, r1 = 0.098, r2 = 0.098, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.49], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
@@ -154,18 +154,18 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
@@ -180,24 +180,24 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.49, r1 = 0.098, r2 = 0.098, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.49], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
@@ -207,18 +207,18 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 0.343, r1 = 0.0686, r2 = 0.0686, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.343], [0, 0, 0, 1]]) {
group() {
- multmatrix([[-1, 0, 0, 0], [0, -0.766044, 0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[-1, 0, 0, 0], [0, -0.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.766044, -0.642788, 0], [0, 0.642788, 0.766044, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.76604444311, -0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) {
group() {
group();
}
diff --git a/tests/regression/dumptest/projection-tests-expected.csg b/tests/regression/dumptest/projection-tests-expected.csg
index 5d2fc0a..86423a1 100644
--- a/tests/regression/dumptest/projection-tests-expected.csg
+++ b/tests/regression/dumptest/projection-tests-expected.csg
@@ -30,7 +30,7 @@ group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -22], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = true, convexity = 0) {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -5], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -4.999999], [0, 0, 0, 1]]) {
cube(size = [10, 10, 10], center = true);
}
}
diff --git a/tests/regression/dumptest/resize-2d-tests-expected.csg b/tests/regression/dumptest/resize-2d-tests-expected.csg
index 5f8d8b5..5cd9a2e 100644
--- a/tests/regression/dumptest/resize-2d-tests-expected.csg
+++ b/tests/regression/dumptest/resize-2d-tests-expected.csg
@@ -173,4 +173,54 @@ group() {
}
}
}
+ color([0, 0, 1, 1]) {
+ multmatrix([[1, 0, 0, -16], [0, 1, 0, -16], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [10,8,0], auto = [0,1,0]) {
+ multmatrix([[0.5, 0, 0, 0], [0, 100, 0, 0], [0, 0, 20, 0], [0, 0, 0, 1]]) {
+ group() {
+ difference() {
+ square(size = [5, 5], center = false);
+ multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ square(size = [1, 1], center = false);
+ }
+ multmatrix([[1, 0, 0, 3], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ circle($fn = 10, $fa = 12, $fs = 2, r = 1);
+ }
+ }
+ }
+ }
+ }
+ }
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, -16], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [8,10,15], auto = [1,1,1]) {
+ multmatrix([[1000, 0, 0, 0], [0, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ group() {
+ difference() {
+ square(size = [5, 5], center = false);
+ multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ square(size = [1, 1], center = false);
+ }
+ multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ square(size = [1, 1], center = false);
+ }
+ }
+ }
+ }
+ }
+ }
+ multmatrix([[1, 0, 0, 16], [0, 1, 0, -16], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [10,8,15], auto = [0,0,0]) {
+ multmatrix([[200, 0, 0, 0], [0, 200, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ group() {
+ difference() {
+ square(size = [5, 5], center = false);
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 2.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ square(size = [5, 1], center = false);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
diff --git a/tests/regression/dumptest/resize-tests-expected.csg b/tests/regression/dumptest/resize-tests-expected.csg
index 1e7888a..98fef74 100644
--- a/tests/regression/dumptest/resize-tests-expected.csg
+++ b/tests/regression/dumptest/resize-tests-expected.csg
@@ -237,35 +237,67 @@ group() {
}
}
}
- multmatrix([[1, 0, 0, 10], [0, 1, 0, 10], [0, 0, 1, -10], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
resize(newsize = [-5,0,0], auto = [0,0,0]) {
cube(size = [1, 1, 1], center = false);
}
}
- multmatrix([[1, 0, 0, 10], [0, 1, 0, 20], [0, 0, 1, -10], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
resize(newsize = [-5,0,0], auto = [0,0,0]) {
cube(size = [1, 1, 1], center = false);
}
}
- multmatrix([[1, 0, 0, 10], [0, 1, 0, 30], [0, 0, 1, -10], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
resize(newsize = [0,0,0], auto = [0,0,0]) {
cube(size = [1, 1, 1], center = false);
}
}
- multmatrix([[1, 0, 0, 10], [0, 1, 0, 40], [0, 0, 1, -10], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
resize(newsize = [0,0,0], auto = [0,0,0]) {
cube(size = [1, 1, 1], center = false);
}
}
- multmatrix([[1, 0, 0, 10], [0, 1, 0, 50], [0, 0, 1, -10], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 60], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
resize(newsize = [0.5,0,7], auto = [0,0,0]) {
cube(size = [0.5, 1, 1000], center = false);
}
}
- multmatrix([[1, 0, 0, 10], [0, 1, 0, 60], [0, 0, 1, -10], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 70], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
resize(newsize = [0,0,0.5], auto = [0,0,0]) {
cube(size = [6, 6, 1e+10], center = false);
}
}
}
+ color([0, 1, 0, 1]) {
+ multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [5,0,0], auto = [1,1,0]) {
+ cube(size = [9, 9, 9], center = false);
+ }
+ }
+ multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [6,0,0], auto = [1,1,1]) {
+ cube(size = [9, 9, 9], center = false);
+ }
+ }
+ multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [6,0,0], auto = [1,0,1]) {
+ cube(size = [9, 9, 9], center = false);
+ }
+ }
+ multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [5,0,20], auto = [0,1,1]) {
+ cube(size = [9, 9, 9], center = false);
+ }
+ }
+ multmatrix([[1, 0, 0, 60], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [0,0,7], auto = [0,0,1]) {
+ cube(size = [9, 9, 9], center = false);
+ }
+ }
+ multmatrix([[1, 0, 0, 70], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ resize(newsize = [6,0,0], auto = [1,1,0]) {
+ cube(size = [9, 9, 9], center = false);
+ }
+ }
+ }
}
diff --git a/tests/regression/dumptest/scale2D-tests-expected.csg b/tests/regression/dumptest/scale2D-tests-expected.csg
index 3957609..b20a975 100644
--- a/tests/regression/dumptest/scale2D-tests-expected.csg
+++ b/tests/regression/dumptest/scale2D-tests-expected.csg
@@ -1,11 +1,11 @@
group() {
- multmatrix([[2, 0, 0, 0], [0, 1.33333, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1]]) {
+ multmatrix([[2, 0, 0, 0], [0, 1.33333333333, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1]]) {
group() {
square(size = [2, 3], center = true);
}
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- multmatrix([[2, 0, 0, 0], [0, 1.33333, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[2, 0, 0, 0], [0, 1.33333333333, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
square(size = [2, 3], center = true);
}
diff --git a/tests/regression/dumptest/text-search-test-expected.csg b/tests/regression/dumptest/text-search-test-expected.csg
index 98c928b..828369d 100644
--- a/tests/regression/dumptest/text-search-test-expected.csg
+++ b/tests/regression/dumptest/text-search-test-expected.csg
@@ -599,7 +599,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0.17677669529], [0, 1, 0, 0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
@@ -617,7 +617,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -0.17677669529], [0, 1, 0, 0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
@@ -635,7 +635,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -0.17677669529], [0, 1, 0, -0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
@@ -653,7 +653,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0.17677669529], [0, 1, 0, -0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
@@ -688,7 +688,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0.17677669529], [0, 1, 0, 0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1);
@@ -706,7 +706,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -0.17677669529], [0, 1, 0, 0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1);
@@ -724,7 +724,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -0.17677669529], [0, 1, 0, -0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1);
@@ -742,7 +742,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0.17677669529], [0, 1, 0, -0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1);
@@ -777,7 +777,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0.17677669529], [0, 1, 0, 0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1);
@@ -795,7 +795,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -0.17677669529], [0, 1, 0, 0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1);
@@ -813,7 +813,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, -0.17677669529], [0, 1, 0, -0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1);
@@ -831,7 +831,7 @@ group() {
}
}
group() {
- multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0.17677669529], [0, 1, 0, -0.17677669529], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1);
diff --git a/tests/regression/dumptest/transform-tests-expected.csg b/tests/regression/dumptest/transform-tests-expected.csg
index 1444b56..8b3d86a 100644
--- a/tests/regression/dumptest/transform-tests-expected.csg
+++ b/tests/regression/dumptest/transform-tests-expected.csg
@@ -21,13 +21,13 @@ group() {
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
- multmatrix([[0.707107, 0, 0.707107, 0], [0.707107, 0, -0.707107, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
+ multmatrix([[0.70710678118, 0, 0.70710678118, 0], [0.70710678118, 0, -0.70710678118, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 10, r2 = 0, center = false);
}
}
}
- multmatrix([[1, 0, 0, 0], [0, 0.707107, 0.707107, 0], [0, -0.707107, 0.707107, 0], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 0.70710678118, 0.70710678118, 0], [0, -0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 10, r2 = 0, center = false);
}
diff --git a/tests/regression/dumptest/use-tests-expected.csg b/tests/regression/dumptest/use-tests-expected.csg
index bb9c028..c47fa74 100644
--- a/tests/regression/dumptest/use-tests-expected.csg
+++ b/tests/regression/dumptest/use-tests-expected.csg
@@ -46,7 +46,7 @@ group() {
linear_extrude(height = 1.5, center = true, convexity = 1, twist = 0, slices = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = false, convexity = 0) {
multmatrix([[0, 0, -1, 0], [0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1]]) {
- multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.318198], [0, 0, 0, 1]]) {
+ multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.31819805153], [0, 0, 0, 1]]) {
cylinder($fn = 30, $fa = 12, $fs = 2, h = 0.212132, r1 = 0.212132, r2 = 0, center = true);
}
}
diff --git a/tests/regression/echotest/builtin-tests-expected.echo b/tests/regression/echotest/builtin-tests-expected.echo
new file mode 100644
index 0000000..385b0dc
--- /dev/null
+++ b/tests/regression/echotest/builtin-tests-expected.echo
@@ -0,0 +1 @@
+ECHO: 3.14159265359
diff --git a/tests/regression/echotest/builtin-tests-expected.txt b/tests/regression/echotest/builtin-tests-expected.txt
deleted file mode 100644
index b8ef05e..0000000
--- a/tests/regression/echotest/builtin-tests-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-ECHO: 3.14159
diff --git a/tests/regression/echotest/dim-all-expected.txt b/tests/regression/echotest/dim-all-expected.echo
index 96456b8..a16c580 100644
--- a/tests/regression/echotest/dim-all-expected.txt
+++ b/tests/regression/echotest/dim-all-expected.echo
@@ -1,16 +1,16 @@
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
-ECHO: linearX = 51.4496
+ECHO: linearX = 51.44957554275
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
-ECHO: linearY = 29.1303
+ECHO: linearY = 29.13025467434
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
ECHO: aligned = 60
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
-ECHO: ordinateX = -49.1754
+ECHO: ordinateX = -49.17542445724
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
-ECHO: ordinateY = 30.8697
+ECHO: ordinateY = 30.86974532565
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
ECHO: radius = 60
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
ECHO: diameter = 120
WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf".
-ECHO: arc = 59.0362
+ECHO: arc = 59.03624346792
diff --git a/tests/regression/echotest/echo-expected.txt b/tests/regression/echotest/echo-expected.echo
index 8fc094e..8fc094e 100644
--- a/tests/regression/echotest/echo-expected.txt
+++ b/tests/regression/echotest/echo-expected.echo
diff --git a/tests/regression/echotest/echo-tests-expected.txt b/tests/regression/echotest/echo-tests-expected.echo
index d7ebe2f..d7ebe2f 100644
--- a/tests/regression/echotest/echo-tests-expected.txt
+++ b/tests/regression/echotest/echo-tests-expected.echo
diff --git a/tests/regression/echotest/escape-test-expected.txt b/tests/regression/echotest/escape-test-expected.echo
index e69de29..e69de29 100644
--- a/tests/regression/echotest/escape-test-expected.txt
+++ b/tests/regression/echotest/escape-test-expected.echo
diff --git a/tests/regression/echotest/expression-shortcircuit-tests-expected.txt b/tests/regression/echotest/expression-shortcircuit-tests-expected.echo
index d7f1c40..d7f1c40 100644
--- a/tests/regression/echotest/expression-shortcircuit-tests-expected.txt
+++ b/tests/regression/echotest/expression-shortcircuit-tests-expected.echo
diff --git a/tests/regression/echotest/inf-tests-expected.txt b/tests/regression/echotest/inf-tests-expected.echo
index 7ac4fe9..7ac4fe9 100644
--- a/tests/regression/echotest/inf-tests-expected.txt
+++ b/tests/regression/echotest/inf-tests-expected.echo
diff --git a/tests/regression/echotest/len-tests-expected.txt b/tests/regression/echotest/len-tests-expected.echo
index 2a776c0..2a776c0 100644
--- a/tests/regression/echotest/len-tests-expected.txt
+++ b/tests/regression/echotest/len-tests-expected.echo
diff --git a/tests/regression/echotest/lookup-tests-expected.txt b/tests/regression/echotest/lookup-tests-expected.echo
index 7e82bbf..b98ebe2 100644
--- a/tests/regression/echotest/lookup-tests-expected.txt
+++ b/tests/regression/echotest/lookup-tests-expected.echo
@@ -6,10 +6,10 @@ ECHO: 0
ECHO: 0.5
ECHO: -55
ECHO: -55
-ECHO: -54.4444
+ECHO: -54.44444444444
ECHO: -2.5
ECHO: 0
ECHO: 0.9
-ECHO: 6.66667
+ECHO: 6.66666666666
ECHO: 333
ECHO: 333
diff --git a/tests/regression/echotest/parser-tests-expected.txt b/tests/regression/echotest/parser-tests-expected.echo
index 615726a..615726a 100644
--- a/tests/regression/echotest/parser-tests-expected.txt
+++ b/tests/regression/echotest/parser-tests-expected.echo
diff --git a/tests/regression/echotest/rands-expected.echo b/tests/regression/echotest/rands-expected.echo
new file mode 100644
index 0000000..36ac6cd
--- /dev/null
+++ b/tests/regression/echotest/rands-expected.echo
@@ -0,0 +1,3 @@
+WARNING: Ignoring unknown variable 'v'.
+ECHO: "i hope rands() did not crash"
+ECHO: [1, 1, 1, 1]
diff --git a/tests/regression/echotest/recursion-tests-expected.txt b/tests/regression/echotest/recursion-tests-expected.echo
index e5c99b1..e5c99b1 100644
--- a/tests/regression/echotest/recursion-tests-expected.txt
+++ b/tests/regression/echotest/recursion-tests-expected.echo
diff --git a/tests/regression/echotest/search-tests-expected.txt b/tests/regression/echotest/search-tests-expected.echo
index 0269f43..0269f43 100644
--- a/tests/regression/echotest/search-tests-expected.txt
+++ b/tests/regression/echotest/search-tests-expected.echo
diff --git a/tests/regression/echotest/string-indexing-expected.txt b/tests/regression/echotest/string-indexing-expected.echo
index 3fcdfa4..3fcdfa4 100644
--- a/tests/regression/echotest/string-indexing-expected.txt
+++ b/tests/regression/echotest/string-indexing-expected.echo
diff --git a/tests/regression/echotest/string-test-expected.txt b/tests/regression/echotest/string-test-expected.echo
index 1969a74..1969a74 100644
--- a/tests/regression/echotest/string-test-expected.txt
+++ b/tests/regression/echotest/string-test-expected.echo
diff --git a/tests/regression/echotest/value-reassignment-tests-expected.txt b/tests/regression/echotest/value-reassignment-tests-expected.echo
index 344f7ab..344f7ab 100644
--- a/tests/regression/echotest/value-reassignment-tests-expected.txt
+++ b/tests/regression/echotest/value-reassignment-tests-expected.echo
diff --git a/tests/regression/echotest/value-reassignment-tests2-expected.txt b/tests/regression/echotest/value-reassignment-tests2-expected.echo
index efb1be7..efb1be7 100644
--- a/tests/regression/echotest/value-reassignment-tests2-expected.txt
+++ b/tests/regression/echotest/value-reassignment-tests2-expected.echo
diff --git a/tests/regression/echotest/variable-scope-tests-expected.txt b/tests/regression/echotest/variable-scope-tests-expected.echo
index 5994778..2a82090 100644
--- a/tests/regression/echotest/variable-scope-tests-expected.txt
+++ b/tests/regression/echotest/variable-scope-tests-expected.echo
@@ -3,6 +3,15 @@ ECHO: 23, 5
WARNING: Ignoring unknown variable 'a'.
ECHO: undef
ECHO: 23, 5
+ECHO: "$children scope"
+ECHO: "$children should be 1: ", 1
+ECHO: "$children should be 4: ", 4
+ECHO: "$children should be 1: ", 1
+ECHO: "child_module_1 child"
+ECHO: "child_module_2 child 0"
+ECHO: "child_module_2 child 1"
+ECHO: "copy $children"
+ECHO: "copy_children_module: ", 2, 2
ECHO: "inner variables shadows parameter"
ECHO: 5, 24
ECHO: "user-defined special variables as parameter"
diff --git a/tests/regression/echotest/vector-values-expected.txt b/tests/regression/echotest/vector-values-expected.echo
index 78053b9..78053b9 100644
--- a/tests/regression/echotest/vector-values-expected.txt
+++ b/tests/regression/echotest/vector-values-expected.echo
diff --git a/tests/regression/opencsgtest/resize-2d-tests-expected.png b/tests/regression/opencsgtest/resize-2d-tests-expected.png
index d3bda96..83a1ca7 100644
--- a/tests/regression/opencsgtest/resize-2d-tests-expected.png
+++ b/tests/regression/opencsgtest/resize-2d-tests-expected.png
Binary files differ
diff --git a/tests/regression/opencsgtest/resize-tests-expected.png b/tests/regression/opencsgtest/resize-tests-expected.png
index 0334ba6..669835d 100644
--- a/tests/regression/opencsgtest/resize-tests-expected.png
+++ b/tests/regression/opencsgtest/resize-tests-expected.png
Binary files differ
diff --git a/tests/regression/throwntogethertest/resize-2d-tests-expected.png b/tests/regression/throwntogethertest/resize-2d-tests-expected.png
index 4737cf7..6c55fa9 100644
--- a/tests/regression/throwntogethertest/resize-2d-tests-expected.png
+++ b/tests/regression/throwntogethertest/resize-2d-tests-expected.png
Binary files differ
diff --git a/tests/regression/throwntogethertest/resize-tests-expected.png b/tests/regression/throwntogethertest/resize-tests-expected.png
index 7445c1c..669835d 100644
--- a/tests/regression/throwntogethertest/resize-tests-expected.png
+++ b/tests/regression/throwntogethertest/resize-tests-expected.png
Binary files differ
diff --git a/tests/test_cmdline_tool.py b/tests/test_cmdline_tool.py
index 470be1e..6977a88 100755
--- a/tests/test_cmdline_tool.py
+++ b/tests/test_cmdline_tool.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
#
# Regression test driver for cmd-line tools
diff --git a/tests/test_pretty_print.cc b/tests/test_pretty_print.cc
index 227d8ad..b07bab5 100644
--- a/tests/test_pretty_print.cc
+++ b/tests/test_pretty_print.cc
@@ -7,7 +7,6 @@
#include <cstddef>
#include <unistd.h>
-//#include <stdio.h>
#define PREQUOTE(x) #x
#define QUOTE(x) PREQUOTE(x)
@@ -18,7 +17,6 @@ int main( int argc, char * argv[] )
newargs[1] = const_cast<char *>(QUOTE( PYSRC ));
newargs[2] = const_cast<char *>(QUOTE( BUILDDIR ));
newargs[3] = NULL;
- //printf(":%s:%s:%s\n", newargs[0], newargs[1], newargs[2]);
return execv( newargs[0], newargs );
}
diff --git a/tests/test_upload.py b/tests/test_upload.py
deleted file mode 100755
index 59f4334..0000000
--- a/tests/test_upload.py
+++ /dev/null
@@ -1,307 +0,0 @@
-#!/usr/bin/python
-
-# test_upload.py copyright 2013 Don Bright <hugh.m.bright@gmail.com>
-# released under Zlib-style license:
-#
-# This software is provided 'as-is', without any express or implied
-# warranty. In no event will the authors be held liable for any damages
-# arising from the use of this software.
-#
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-#
-# 1. The origin of this software must not be misrepresented; you must
-# not claim that you wrote the original software. If you use this
-# software in a product, an acknowledgment in the product documentation
-# would be appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must
-# not be misrepresented as being the original software. 3. This notice
-# may not be removed or altered from any source distribution.
-#
-# This license is based on zlib license by Jean-loup Gailly and Mark Adler
-
-
-# This script takes html output by test_pretty_print.py and uploads it
-# to a web server into an 'openscad_tests' subdir over ssh using sftp.
-# It then modifies the 'index.html' file in that directory to 'add to
-# the list' of reports on the remote web server.
-
-
-#
-# Design
-#
-# On the remote web server there is a directory called 'openscad_tests'
-# Inside of it is a file, 'index.html', that lists all the test reports
-# stored in that directory.
-#
-# This script uploads the last report created by test_pretty_print.py
-# Then it modifies the remote index.html file (if necessary) to display
-# a link to the new test report.
-#
-# Each test report is a single .html file, with all of the .png images
-# encoded directly into the file using the Data URI and base64 encoding.
-# The name of the report file is something like OS_cpu_GLinfo_hash.html, like
-# linux_x86_radeon_abcd.html
-#
-# See examples under 'usage()' below.
-#
-# Requirements for remote web server and local system:
-#
-# 1. Local system must have sftp access to remote server
-# This can be tested by runnig this: sftp user@remotehost
-# If you are using ssh-agent or an ssh-keyring it will go automatically.
-# Otherwise it will request your password to be typed in.
-#
-# 2. Remote web server only needs static html. There is no requirement
-# for php/cgi/etc.
-#
-# 3. Local system must have the python Paramiko library installed,
-# which in turn requires pycript to also be installed. (to PYTHONPATH)
-#
-# This script returns '1' on failure, '0' on success (shell-style)
-#
-
-# todo: support plain old ftp ??
-# todo: support new-fangled sites like dropbox ??
-
-import sys,os,platform,string,getpass
-
-try:
- import paramiko
-except:
- x='''
-please install the paramiko python library in your PYTHONPATH
-If that is not feasible, you can upload the single html report
-file by hand to any site that accepts html code.
-'''
-
-from test_pretty_print import ezsearch, read_sysinfo
-from test_cmdline_tool import execute_and_redirect
-
-debug_test_upload = False
-dryrun = False
-bytecount = 0
-
-def help():
- text='''
-test_upload.py
-
-usage:
-
- test_upload.py --username=uname --host=host --remotepath=/some/path \
- [--dryrun] [--debug]
-
-example1:
-
- $ ctest # result is Testing/Temporary/linux_x86_nvidia_report_abcd.html
- $ test_upload.py --username=andreis --host=web.sourceforge.net --remotepath=/home/project-web/projectxyz/htdocs/
- $ firefox http://projectxyz.sourceforge.net/openscad_tests/index.html
- # this should display a page with a link to show the test results
-
-example2:
-
- $ # run under X11, then run under Xvfb, upload both reports to one site
- $ ctest # X11 - result is Testing/Temporary/freebsd_x86_nvidia_abc_report.html
- $ test_upload.py --username=annag --host=fontanka.org --remotepath=/var/www/
- $ export DISPLAY= # dont use 'display' X, use Xvfb (different drivers)
- $ ctest # XVfb - result is Testing/Temporary/freebsd_x86_mesa_xyz_report.html
- $ test_upload.py --username=annag --host=fontanka.org --remotepath=/var/www/
- $ firefox http://fontanka.org/openscad_tests/index.html
- # result is 'index.html' with a link to the two separate test .html files
-
-'''
- print text
-
-
-def debug(x):
- if debug_test_upload:
- print 'test_upload.py:', x
- sys.stdout.flush()
-
-
-blankchunk='''<!-- __entry__ -->'''
-
-index_template='''
-<html>
-<head>
-OpenSCAD regression test results
-</head>
-<body>
- <h3>
- OpenSCAD regression test results
- </h3>
- <ul>
-''' + blankchunk + '''
- </ul>
-</body>
-</html>
-'''
-
-entry_template='''
- <li><a href="__href__">__rept_name__</a></li>
-'''
-
-
-def paramiko_upload( newrept_fname, username, host, remotepath ):
- global bytecount
- debug("running paramiko upload")
-
- basepath = 'openscad_tests'
- newrept_basefname = os.path.basename( newrept_fname )
- newrept_name = string.split( newrept_basefname,'.html')[0]
- debug("local file: "+ newrept_fname )
- debug("base filename: "+ newrept_basefname )
- debug("report name: "+ newrept_name )
-
-
-
- debug("connect to " + username + "@" + host)
- client = paramiko.SSHClient()
- client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
- client.load_system_host_keys()
- if dryrun:
- debug("dryrun: no client.connect()")
- return 0
- try:
- client.connect(host,username=username)
- except paramiko.PasswordRequiredException, e:
- passw = getpass.getpass('enter passphrase for private ssh key: ')
- client.connect(host,username=username,password=passw)
-
- #stdin,stdout,stderr=client.exec_command('ls -l')
-
-
-
- debug("find remote path: " + remotepath)
- ftp = client.open_sftp()
- try:
- ftp.chdir( remotepath )
- except:
- debug("failed to change dir to remote path: "+remotepath)
- return 1
- debug("find basepath ( or create ):" + basepath )
- if not basepath in ftp.listdir():
- ftp.mkdir( basepath )
- ftp.chdir( basepath )
-
-
-
- debug("upload local report file to remote file:")
- debug(" local:"+newrept_fname)
- localf = open( newrept_fname, 'r' )
- rept_text = localf.read()
- localf.close()
- debug(" bytes read:"+str(len(rept_text)))
-
- debug("remote:"+os.path.join(ftp.getcwd(),newrept_basefname))
- f = ftp.file( newrept_basefname, 'w+' )
- f.write( rept_text )
- f.close()
- bytecount += len(rept_text)
-
-
- debug( "file uploaded. now, update index.html (or create blank) ")
-
- if not 'index.html' in ftp.listdir():
- f = ftp.file( 'index.html', 'w+')
- f.write(index_template)
- f.close()
- bytecount += len(index_template)
-
- f = ftp.file( 'index.html', 'r' )
- text = f.read()
- f.close()
-
- text2 = entry_template
- text2 = text2.replace( '__href__', newrept_basefname )
- text2 = text2.replace( '__rept_name__', newrept_name )
-
- if newrept_basefname in text:
- debug( newrept_basefname + " already linked from index.html")
- else:
- debug("add new report link to index.html")
- text = text.replace( blankchunk, blankchunk+'\n'+text2 )
-
- f = ftp.file( 'index.html', 'w+' )
- f.write(text)
- f.close()
- bytecount += len(text)
-
- debug("close connections")
- ftp.close()
- client.close()
- return 0
-
-def upload_unix( reptfile, username, host, remotepath):
- debug("detected unix-like system.")
- return paramiko_upload( reptfile, username, host, remotepath )
-
-def upload_darwin( reptfile, username, host, remotepath ):
- debug("detected osx/darwin")
- return upload_unix( reptfile, username, host, remotepath )
-
-def upload_windows( reptfile, username, host, remotepath ):
- debug("detected windows")
- print 'sorry, not implemented on windows'
- return 1
- # use pycript and paramiko
- # the problem is downloading them and installing them
-
-def upload( reptfile, username, host, remotepath ):
- sysname = platform.system().lower()
- result = 1
- if 'linux' in sysname or 'bsd' in sysname:
- result = upload_unix( reptfile, username, host, remotepath )
- elif 'darwin' in sysname:
- result = upload_darwin( reptfile, username, host, remotepath )
- elif 'windows' in platform.system():
- result = upload_windows( reptfile, username, host, remotepath )
- else:
- print "unknown system type. cant upload, sorry"
- return result
-
-def main():
- if '--debug' in string.join(sys.argv):
- global debug_test_upload
- debug_test_upload = True
- if '--dryrun' in string.join(sys.argv):
- global dryrun
- dryrun = True
-
- debug('running test_upload')
- debug('args: '+str(sys.argv[1:]))
-
- builddir = ezsearch('--builddir=(.*?) ',string.join(sys.argv)+' ')
- if builddir=='': builddir=os.getcwd()
- sysinfo, sysid = read_sysinfo(os.path.join(builddir,'sysinfo.txt'))
- debug("sysinfo: " + sysinfo[0:60].replace('\n','') + ". . . ")
- debug("sysid: " + sysid )
- if len(sysid)<6:
- print "unable to find valid system id"
- sys.exit(1)
-
- rept_basename = sysid + '_report' + '.html'
- rept_fname = os.path.join(builddir,'Testing','Temporary',rept_basename )
- debug("report filename:\n" + rept_fname )
-
- username = ezsearch('--username=(.*?) ',string.join(sys.argv)+' ')
- host = ezsearch('--host=(.*?) ',string.join(sys.argv)+' ')
- remotepath = ezsearch('--remotepath=(.*?) ',string.join(sys.argv)+' ')
-
- if rept_fname=='' or username=='' or host=='' or remotepath=='':
- help()
- sys.exit(1)
-
- res = upload( rept_fname, username, host, remotepath )
- if res==1:
- print "upload failed"
- return 1
- else:
- print "upload complete:", bytecount, "bytes written"
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
-
diff --git a/tests/throwntogethertest.cc b/tests/throwntogethertest.cc
deleted file mode 100644
index 5a4f14f..0000000
--- a/tests/throwntogethertest.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "csgtestcore.h"
-
-int main(int argc, char* argv[]) {
- return csgtestcore(argc, argv, TEST_THROWNTOGETHER);
-}
diff --git a/win.pri b/win.pri
index bb41b09..b5db515 100644
--- a/win.pri
+++ b/win.pri
@@ -5,7 +5,8 @@ win32*msvc* {
INCLUDEPATH += $$(MPIRDIR)
INCLUDEPATH += $$(MPFRDIR)
- DEFINES += _USE_MATH_DEFINES NOMINMAX _CRT_SECURE_NO_WARNINGS YY_NO_UNISTD_H
+ # don't know where the __WIN32__ is usually set
+ DEFINES += _USE_MATH_DEFINES NOMINMAX _CRT_SECURE_NO_WARNINGS YY_NO_UNISTD_H __WIN32__
# disable MSVC warnings that are of very low importance
# disable warning about too long decorated names
@@ -16,5 +17,9 @@ win32*msvc* {
QMAKE_CXXFLAGS += -wd4100
# lexer uses strdup() & other POSIX stuff
QMAKE_CXXFLAGS += -D_CRT_NONSTDC_NO_DEPRECATE
+ # Treat WChar_t as a builtin type, allows Qt to call boost funcions
+ QMAKE_CXXFLAGS += /Zc:wchar_t
+ # increases the number of sections in .obj file
+ QMAKE_CXXFLAGS += /bigobj
}
contact: Jan Huwald // Impressum