diff options
| author | Marius Kintel <marius@kintel.net> | 2013-04-09 04:28:16 (GMT) | 
|---|---|---|
| committer | Marius Kintel <marius@kintel.net> | 2013-04-09 04:28:16 (GMT) | 
| commit | a37813a8999571f4b9235f33fdc7c22bcbe5fd17 (patch) | |
| tree | 266d8c106100edab9f51b93cf229cf55cd083918 /tests | |
| parent | b16c24fb2888d932ec035fff27cb29b4ffbc256b (diff) | |
Refactored context handling into using separate Module contexts and Eval contexts. This allows for recursive module calls, and cascading children. I believe this fixes issue #116
Diffstat (limited to 'tests')
19 files changed, 345 insertions, 40 deletions
| diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a0d8f6b..36faa58 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -426,6 +426,8 @@ set(CORE_SOURCES    ../src/ModuleCache.cc     ../src/node.cc     ../src/context.cc  +  ../src/modcontext.cc  +  ../src/evalcontext.cc     ../src/csgterm.cc     ../src/csgtermnormalizer.cc     ../src/polyset.cc  diff --git a/tests/cgalcachetest.cc b/tests/cgalcachetest.cc index 3a0a855..82864a4 100644 --- a/tests/cgalcachetest.cc +++ b/tests/cgalcachetest.cc @@ -30,7 +30,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -132,11 +132,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	root_module = parsefile(filename);  	if (!root_module) { diff --git a/tests/cgalpngtest.cc b/tests/cgalpngtest.cc index 52205fd..e2f7a72 100644 --- a/tests/cgalpngtest.cc +++ b/tests/cgalpngtest.cc @@ -30,7 +30,7 @@  #include "node.h"  #include "module.h"  #include "polyset.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -105,11 +105,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	root_module = parsefile(filename);  	if (!root_module) { diff --git a/tests/cgalstlsanitytest.cc b/tests/cgalstlsanitytest.cc index 2815463..15cc20f 100644 --- a/tests/cgalstlsanitytest.cc +++ b/tests/cgalstlsanitytest.cc @@ -29,7 +29,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -91,11 +91,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	root_module = parsefile(filename);  	if (!root_module) { diff --git a/tests/cgaltest.cc b/tests/cgaltest.cc index 4a15050..2c071c1 100644 --- a/tests/cgaltest.cc +++ b/tests/cgaltest.cc @@ -29,7 +29,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -84,11 +84,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	root_module = parsefile(filename);  	if (!root_module) { diff --git a/tests/csgtermtest.cc b/tests/csgtermtest.cc index e793c4a..edf334e 100644 --- a/tests/csgtermtest.cc +++ b/tests/csgtermtest.cc @@ -31,7 +31,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -79,11 +79,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	const AbstractNode *root_node;  	root_module = parsefile(filename); diff --git a/tests/csgtestcore.cc b/tests/csgtestcore.cc index 7583a41..a4f05e8 100644 --- a/tests/csgtestcore.cc +++ b/tests/csgtestcore.cc @@ -6,7 +6,7 @@  #include "openscad.h"  #include "parsersettings.h"  #include "builtin.h" -#include "context.h" +#include "modcontext.h"  #include "node.h"  #include "module.h"  #include "polyset.h" @@ -137,11 +137,11 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	if (sysinfo_dump)  		root_module = parse("sphere();","",false); diff --git a/tests/csgtexttest.cc b/tests/csgtexttest.cc index e050232..5bda1f1 100644 --- a/tests/csgtexttest.cc +++ b/tests/csgtexttest.cc @@ -31,7 +31,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -83,11 +83,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	AbstractNode *root_node;  	root_module = parsefile(filename); diff --git a/tests/dumptest.cc b/tests/dumptest.cc index 3627608..3ca1c22 100644 --- a/tests/dumptest.cc +++ b/tests/dumptest.cc @@ -29,7 +29,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -89,11 +89,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	AbstractNode *root_node;  	root_module = parsefile(filename); diff --git a/tests/echotest.cc b/tests/echotest.cc index bf2f4a4..e3a0343 100644 --- a/tests/echotest.cc +++ b/tests/echotest.cc @@ -29,7 +29,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "builtin.h"  #include "printutils.h" @@ -91,11 +91,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	AbstractNode *root_node;  	root_module = parsefile(filename); diff --git a/tests/modulecachetest.cc b/tests/modulecachetest.cc index 0028114..94d7a50 100644 --- a/tests/modulecachetest.cc +++ b/tests/modulecachetest.cc @@ -29,7 +29,7 @@  #include "parsersettings.h"  #include "node.h"  #include "module.h" -#include "context.h" +#include "modcontext.h"  #include "value.h"  #include "export.h"  #include "builtin.h" @@ -79,11 +79,11 @@ int main(int argc, char **argv)  	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString());  	add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); -	Context root_ctx; -	register_builtin(root_ctx); +	ModuleContext root_ctx; +	root_ctx.registerBuiltin();  	AbstractModule *root_module; -	ModuleInstantiation root_inst; +	ModuleInstantiation root_inst("group");  	AbstractNode *root_node;  	root_module = parsefile(filename); diff --git a/tests/regression/cgalpngtest/child-child-test-expected.png b/tests/regression/cgalpngtest/child-child-test-expected.pngBinary files differ new file mode 100644 index 0000000..80b70ba --- /dev/null +++ b/tests/regression/cgalpngtest/child-child-test-expected.png diff --git a/tests/regression/cgalpngtest/module-recursion-expected.png b/tests/regression/cgalpngtest/module-recursion-expected.pngBinary files differ new file mode 100644 index 0000000..3012a12 --- /dev/null +++ b/tests/regression/cgalpngtest/module-recursion-expected.png diff --git a/tests/regression/dumptest/child-child-test-expected.txt b/tests/regression/dumptest/child-child-test-expected.txt new file mode 100644 index 0000000..13f098d --- /dev/null +++ b/tests/regression/dumptest/child-child-test-expected.txt @@ -0,0 +1,59 @@ +	group() { +		multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +			cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); +		} +	} +	multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { +		group() { +			multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +				group() { +					multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +						cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); +					} +				} +			} +		} +	} +	multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { +		group() { +			multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +				group() { +					multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +						group() { +							multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +								group() { +									color([1, 0, 0, 1]) { +										cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); +									} +								} +							} +						} +					} +				} +			} +		} +	} +	multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { +		group() { +			color([1, 0, 0, 1]) { +				group() { +					multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +						group() { +							multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +								group() { +									multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +										group() { +											multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) { +												cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); +											} +										} +									} +								} +							} +						} +					} +				} +			} +		} +	} + diff --git a/tests/regression/dumptest/module-recursion-expected.txt b/tests/regression/dumptest/module-recursion-expected.txt new file mode 100644 index 0000000..9ad8877 --- /dev/null +++ b/tests/regression/dumptest/module-recursion-expected.txt @@ -0,0 +1,244 @@ +	group() { +		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.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.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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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.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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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.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.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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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.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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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.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.76604444311, 0.64278760968, 0], [0, 0.64278760968, 0.76604444311, 0], [0, 0, 0, 1]]) { +																					group() { +																						group(); +																					} +																				} +																				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/opencsgtest/child-child-test-expected.png b/tests/regression/opencsgtest/child-child-test-expected.pngBinary files differ new file mode 100644 index 0000000..07d61c0 --- /dev/null +++ b/tests/regression/opencsgtest/child-child-test-expected.png diff --git a/tests/regression/opencsgtest/module-recursion-expected.png b/tests/regression/opencsgtest/module-recursion-expected.pngBinary files differ new file mode 100644 index 0000000..324c260 --- /dev/null +++ b/tests/regression/opencsgtest/module-recursion-expected.png diff --git a/tests/regression/throwntogethertest/child-child-test-expected.png b/tests/regression/throwntogethertest/child-child-test-expected.pngBinary files differ new file mode 100644 index 0000000..07d61c0 --- /dev/null +++ b/tests/regression/throwntogethertest/child-child-test-expected.png diff --git a/tests/regression/throwntogethertest/module-recursion-expected.png b/tests/regression/throwntogethertest/module-recursion-expected.pngBinary files differ new file mode 100644 index 0000000..324c260 --- /dev/null +++ b/tests/regression/throwntogethertest/module-recursion-expected.png | 
