Merge remote-tracking branch 'origin/master' into csgterm-refactor

This commit is contained in:
Marius Kintel 2015-12-28 18:49:05 -05:00
commit e9685b7001
187 changed files with 10797 additions and 10480 deletions

3
.gitignore vendored
View file

@ -1,3 +1,5 @@
/*.scad
**/out*.*
*.dmg
*~
*.tar*
@ -15,7 +17,6 @@ testdata/scad/misc/include-tests.scad
testdata/scad/misc/use-tests.scad
**/project.xcworkspace
**/xcuserdata
/*.scad
/*.stl
/*.dxf
/*.off

View file

@ -419,6 +419,12 @@ SOURCES += src/version_check.cc \
src/builtin.cc \
src/calc.cc \
src/export.cc \
src/export_stl.cc \
src/export_amf.cc \
src/export_off.cc \
src/export_dxf.cc \
src/export_svg.cc \
src/export_nef.cc \
src/export_png.cc \
src/import.cc \
src/renderer.cc \

View file

@ -10,8 +10,8 @@
class Geometry
{
public:
typedef std::pair<const class AbstractNode *, shared_ptr<const Geometry> > ChildItem;
typedef std::list<ChildItem> ChildList;
typedef std::pair<const class AbstractNode *, shared_ptr<const Geometry> > GeometryItem;
typedef std::list<GeometryItem> Geometries;
Geometry() : convexity(1) {}
virtual ~Geometry() {}

View file

@ -64,16 +64,15 @@ shared_ptr<const Geometry> GeometryEvaluator::evaluateGeometry(const AbstractNod
PolySet *ps = new PolySet(3);
ps->setConvexity(N->getConvexity());
this->root.reset(ps);
if (!N->isEmpty()) {
bool err = CGALUtils::createPolySetFromNefPolyhedron3(*N->p3, *ps);
if (err) {
PRINT("ERROR: Nef->PolySet failed");
}
}
smartCacheInsert(node, this->root);
if (!N->isEmpty()) {
bool err = CGALUtils::createPolySetFromNefPolyhedron3(*N->p3, *ps);
if (err) {
PRINT("ERROR: Nef->PolySet failed");
}
}
}
}
smartCacheInsert(node, this->root);
return this->root;
}
return GeometryCache::instance()->get(this->tree.getIdString(node));
@ -82,7 +81,7 @@ shared_ptr<const Geometry> GeometryEvaluator::evaluateGeometry(const AbstractNod
GeometryEvaluator::ResultObject GeometryEvaluator::applyToChildren(const AbstractNode &node, OpenSCADOperator op)
{
unsigned int dim = 0;
BOOST_FOREACH(const Geometry::ChildItem &item, this->visitedchildren[node.index()]) {
BOOST_FOREACH(const Geometry::GeometryItem &item, this->visitedchildren[node.index()]) {
if (!item.first->modinst->isBackground() && item.second) {
if (!dim) dim = item.second->getDimension();
else if (dim != item.second->getDimension()) {
@ -107,7 +106,7 @@ GeometryEvaluator::ResultObject GeometryEvaluator::applyToChildren(const Abstrac
*/
GeometryEvaluator::ResultObject GeometryEvaluator::applyToChildren3D(const AbstractNode &node, OpenSCADOperator op)
{
Geometry::ChildList children = collectChildren3D(node);
Geometry::Geometries children = collectChildren3D(node);
if (children.size() == 0) return ResultObject();
if (op == OPENSCAD_HULL) {
@ -125,8 +124,8 @@ GeometryEvaluator::ResultObject GeometryEvaluator::applyToChildren3D(const Abstr
if (children.size() == 1) return ResultObject(children.front().second);
if (op == OPENSCAD_MINKOWSKI) {
Geometry::ChildList actualchildren;
BOOST_FOREACH(const Geometry::ChildItem &item, children) {
Geometry::Geometries actualchildren;
BOOST_FOREACH(const Geometry::GeometryItem &item, children) {
if (!item.second->isEmpty()) actualchildren.push_back(item);
}
if (actualchildren.empty()) return ResultObject();
@ -179,7 +178,7 @@ Polygon2d *GeometryEvaluator::applyHull2D(const AbstractNode &node)
Geometry *GeometryEvaluator::applyHull3D(const AbstractNode &node)
{
Geometry::ChildList children = collectChildren3D(node);
Geometry::Geometries children = collectChildren3D(node);
PolySet *P = new PolySet(3);
if (CGALUtils::applyHull(children, *P)) {
@ -205,10 +204,9 @@ Polygon2d *GeometryEvaluator::applyMinkowski2D(const AbstractNode &node)
std::vector<const class Polygon2d *> GeometryEvaluator::collectChildren2D(const AbstractNode &node)
{
std::vector<const Polygon2d *> children;
BOOST_FOREACH(const Geometry::ChildItem &item, this->visitedchildren[node.index()]) {
BOOST_FOREACH(const Geometry::GeometryItem &item, this->visitedchildren[node.index()]) {
const AbstractNode *chnode = item.first;
const shared_ptr<const Geometry> &chgeom = item.second;
// FIXME: Don't use deep access to modinst members
if (chnode->modinst->isBackground()) continue;
// NB! We insert into the cache here to ensure that all children of
@ -276,13 +274,12 @@ shared_ptr<const Geometry> GeometryEvaluator::smartCacheGet(const AbstractNode &
Returns a list of 3D Geometry children of the given node.
May return empty geometries, but not NULL objects
*/
Geometry::ChildList GeometryEvaluator::collectChildren3D(const AbstractNode &node)
Geometry::Geometries GeometryEvaluator::collectChildren3D(const AbstractNode &node)
{
Geometry::ChildList children;
BOOST_FOREACH(const Geometry::ChildItem &item, this->visitedchildren[node.index()]) {
Geometry::Geometries children;
BOOST_FOREACH(const Geometry::GeometryItem &item, this->visitedchildren[node.index()]) {
const AbstractNode *chnode = item.first;
const shared_ptr<const Geometry> &chgeom = item.second;
// FIXME: Don't use deep access to modinst members
if (chnode->modinst->isBackground()) continue;
// NB! We insert into the cache here to ensure that all children of
@ -346,7 +343,7 @@ Polygon2d *GeometryEvaluator::applyToChildren2D(const AbstractNode &node, OpenSC
}
/*!
Adds ourself to out parent's list of traversed children.
Adds ourself to our parent's list of traversed children.
Call this for _every_ node which affects output during traversal.
Usually, this should be called from the postfix stage, but for some nodes,
we defer traversal letting other components (e.g. CGAL) render the subgraph,
@ -363,10 +360,9 @@ void GeometryEvaluator::addToParent(const State &state,
this->visitedchildren[state.parent()->index()].push_back(std::make_pair(&node, geom));
}
else {
// Root node, insert into cache
smartCacheInsert(node, geom);
// Root node
this->root = geom;
assert(this->visitedchildren.empty());
assert(this->visitedchildren.empty());
}
}
@ -392,6 +388,19 @@ Response GeometryEvaluator::visit(State &state, const AbstractNode &node)
return ContinueTraversal;
}
/*!
*/
Response GeometryEvaluator::visit(State &state, const GroupNode &node)
{
return visit(state, (const AbstractNode &)node);
}
Response GeometryEvaluator::visit(State &state, const RootNode &node)
{
// Just union the top-level objects
return visit(state, (const GroupNode &)node);
}
Response GeometryEvaluator::visit(State &state, const OffsetNode &node)
{
if (state.isPrefix() && isSmartCached(node)) return PruneTraversal;
@ -918,7 +927,7 @@ Response GeometryEvaluator::visit(State &state, const RotateExtrudeNode &node)
}
/*!
Handles non-leaf PolyNodes; projection
FIXME: Not in use
*/
Response GeometryEvaluator::visit(State &state, const AbstractPolyNode &node)
{
@ -942,7 +951,7 @@ Response GeometryEvaluator::visit(State &state, const ProjectionNode &node)
if (!node.cut_mode) {
ClipperLib::Clipper sumclipper;
BOOST_FOREACH(const Geometry::ChildItem &item, this->visitedchildren[node.index()]) {
BOOST_FOREACH(const Geometry::GeometryItem &item, this->visitedchildren[node.index()]) {
const AbstractNode *chnode = item.first;
const shared_ptr<const Geometry> &chgeom = item.second;
// FIXME: Don't use deep access to modinst members

View file

@ -23,6 +23,8 @@ public:
virtual Response visit(State &state, const AbstractPolyNode &node);
virtual Response visit(State &state, const LinearExtrudeNode &node);
virtual Response visit(State &state, const RotateExtrudeNode &node);
virtual Response visit(State &state, const GroupNode &node);
virtual Response visit(State &state, const RootNode &node);
virtual Response visit(State &state, const LeafNode &node);
virtual Response visit(State &state, const TransformNode &node);
virtual Response visit(State &state, const CsgOpNode &node);
@ -57,7 +59,7 @@ private:
shared_ptr<const Geometry> smartCacheGet(const AbstractNode &node, bool preferNef);
bool isSmartCached(const AbstractNode &node);
std::vector<const class Polygon2d *> collectChildren2D(const AbstractNode &node);
Geometry::ChildList collectChildren3D(const AbstractNode &node);
Geometry::Geometries collectChildren3D(const AbstractNode &node);
Polygon2d *applyMinkowski2D(const AbstractNode &node);
Polygon2d *applyHull2D(const AbstractNode &node);
Geometry *applyHull3D(const AbstractNode &node);
@ -67,7 +69,7 @@ private:
ResultObject applyToChildren(const AbstractNode &node, OpenSCADOperator op);
void addToParent(const State &state, const AbstractNode &node, const shared_ptr<const Geometry> &geom);
std::map<int, Geometry::ChildList> visitedchildren;
std::map<int, Geometry::Geometries> visitedchildren;
const Tree &tree;
shared_ptr<const Geometry> root;

View file

@ -6,9 +6,9 @@
Class for holding 2D geometry.
This class will hold 2D geometry consisting of a number of closed
contours. A polygon can contain holes and islands, as well as
intersecting contours.
polygons. Each polygon can contain holes and islands. Both polygons,
holes and island contours may intersect each other.
We can store sanitized vs. unsanitized polygons. Sanitized polygons
will have opposite winding order for holes and is guaranteed to not
have intersecting geometry. The winding order will be counter-clockwise

View file

@ -35,6 +35,7 @@ void Builtins::init(const char *name, class AbstractFunction *function)
}
extern void register_builtin_functions();
extern void register_builtin_group();
extern void register_builtin_csgops();
extern void register_builtin_transform();
extern void register_builtin_color();
@ -60,8 +61,7 @@ void Builtins::initialize()
register_builtin_functions();
initialize_builtin_dxf_dim();
init("group", new AbstractModule());
register_builtin_group();
register_builtin_csgops();
register_builtin_transform();
register_builtin_color();

View file

@ -77,7 +77,7 @@ namespace CGALUtils {
Applies op to all children and returns the result.
The child list should be guaranteed to contain non-NULL 3D or empty Geometry objects
*/
CGAL_Nef_polyhedron *applyOperator(const Geometry::ChildList &children, OpenSCADOperator op)
CGAL_Nef_polyhedron *applyOperator(const Geometry::Geometries &children, OpenSCADOperator op)
{
CGAL_Nef_polyhedron *N = NULL;
CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
@ -86,7 +86,7 @@ namespace CGALUtils {
CGAL::Nef_nary_union_3<CGAL_Nef_polyhedron3> nary_union;
int nary_union_num_inserted = 0;
BOOST_FOREACH(const Geometry::ChildItem &item, children) {
BOOST_FOREACH(const Geometry::GeometryItem &item, children) {
const shared_ptr<const Geometry> &chgeom = item.second;
shared_ptr<const CGAL_Nef_polyhedron> chN =
dynamic_pointer_cast<const CGAL_Nef_polyhedron>(chgeom);
@ -150,7 +150,7 @@ namespace CGALUtils {
bool applyHull(const Geometry::ChildList &children, PolySet &result)
bool applyHull(const Geometry::Geometries &children, PolySet &result)
{
typedef CGAL::Epick K;
// Collect point cloud
@ -158,7 +158,7 @@ namespace CGALUtils {
// instead.
std::list<K::Point_3> points;
BOOST_FOREACH(const Geometry::ChildItem &item, children) {
BOOST_FOREACH(const Geometry::GeometryItem &item, children) {
const shared_ptr<const Geometry> &chgeom = item.second;
const CGAL_Nef_polyhedron *N = dynamic_cast<const CGAL_Nef_polyhedron *>(chgeom.get());
if (N) {
@ -206,11 +206,11 @@ namespace CGALUtils {
/*!
children cannot contain NULL objects
*/
Geometry const * applyMinkowski(const Geometry::ChildList &children)
Geometry const * applyMinkowski(const Geometry::Geometries &children)
{
CGAL::Timer t,t_tot;
assert(children.size() >= 2);
Geometry::ChildList::const_iterator it = children.begin();
Geometry::Geometries::const_iterator it = children.begin();
t_tot.start();
Geometry const* operands[2] = {it->second.get(), NULL};
try {
@ -375,7 +375,7 @@ namespace CGALUtils {
} else if (!result_parts.empty()) {
t.start();
PRINTDB("Minkowski: Computing union of %d parts",result_parts.size());
Geometry::ChildList fake_children;
Geometry::Geometries fake_children;
for (std::list<CGAL::Polyhedron_3<Hull_kernel> >::iterator i = result_parts.begin(); i != result_parts.end(); ++i) {
PolySet ps(3,true);
createPolySetFromPolyhedron(*i, ps);

View file

@ -19,14 +19,14 @@ namespace /* anonymous */ {
}
namespace CGALUtils {
bool applyHull(const Geometry::ChildList &children, PolySet &P);
CGAL_Nef_polyhedron *applyOperator(const Geometry::ChildList &children, OpenSCADOperator op);
bool applyHull(const Geometry::Geometries &children, PolySet &P);
CGAL_Nef_polyhedron *applyOperator(const Geometry::Geometries &children, OpenSCADOperator op);
//FIXME: Old, can be removed:
//void applyBinaryOperator(CGAL_Nef_polyhedron &target, const CGAL_Nef_polyhedron &src, OpenSCADOperator op);
Polygon2d *project(const CGAL_Nef_polyhedron &N, bool cut);
CGAL_Iso_cuboid_3 boundingBox(const CGAL_Nef_polyhedron3 &N);
bool is_approximately_convex(const PolySet &ps);
Geometry const* applyMinkowski(const Geometry::ChildList &children);
Geometry const* applyMinkowski(const Geometry::Geometries &children);
template <typename Polyhedron> std::string printPolyhedron(const Polyhedron &p);
template <typename Polyhedron> bool createPolySetFromPolyhedron(const Polyhedron &p, PolySet &ps);

View file

@ -211,7 +211,7 @@ AbstractNode *ControlModule::instantiate(const Context* /*ctx*/, const ModuleIns
// assert(filectx->evalctx);
if (evalctx->numArgs()<=0) {
// no parameters => all children
AbstractNode* node = new AbstractNode(inst);
AbstractNode* node = new GroupNode(inst);
for (int n = 0; n < (int)modulectx->numChildren(); ++n) {
AbstractNode* childnode = modulectx->getChild(n)->evaluate(modulectx);
if (childnode==NULL) continue; // error
@ -226,7 +226,7 @@ AbstractNode *ControlModule::instantiate(const Context* /*ctx*/, const ModuleIns
return getChild(value, modulectx);
}
else if (value->type() == Value::VECTOR) {
AbstractNode* node = new AbstractNode(inst);
AbstractNode* node = new GroupNode(inst);
const Value::VectorType& vect = value->toVector();
foreach (const ValuePtr &vectvalue, vect) {
AbstractNode* childnode = getChild(vectvalue,modulectx);
@ -242,7 +242,7 @@ AbstractNode *ControlModule::instantiate(const Context* /*ctx*/, const ModuleIns
PRINTB("WARNING: Bad range parameter for children: too many elements (%lu).", steps);
return NULL;
}
AbstractNode* node = new AbstractNode(inst);
AbstractNode* node = new GroupNode(inst);
for (RangeType::iterator it = range.begin();it != range.end();it++) {
AbstractNode* childnode = getChild(ValuePtr(*it),modulectx); // with error cases
if (childnode==NULL) continue; // error
@ -262,7 +262,7 @@ AbstractNode *ControlModule::instantiate(const Context* /*ctx*/, const ModuleIns
break;
case ECHO: {
node = new AbstractNode(inst);
node = new GroupNode(inst);
std::stringstream msg;
msg << "ECHO: ";
for (size_t i = 0; i < inst->arguments.size(); i++) {
@ -280,7 +280,7 @@ AbstractNode *ControlModule::instantiate(const Context* /*ctx*/, const ModuleIns
break;
case ASSIGN: {
node = new AbstractNode(inst);
node = new GroupNode(inst);
// We create a new context to avoid parameters from influencing each other
// -> parallel evaluation. This is to be backwards compatible.
Context c(evalctx);
@ -296,7 +296,7 @@ AbstractNode *ControlModule::instantiate(const Context* /*ctx*/, const ModuleIns
break;
case FOR:
node = new AbstractNode(inst);
node = new GroupNode(inst);
for_eval(*node, *inst, 0, evalctx, evalctx);
break;
@ -306,7 +306,7 @@ AbstractNode *ControlModule::instantiate(const Context* /*ctx*/, const ModuleIns
break;
case IF: {
node = new AbstractNode(inst);
node = new GroupNode(inst);
const IfElseModuleInstantiation *ifelse = dynamic_cast<const IfElseModuleInstantiation*>(inst);
if (evalctx->numArgs() > 0 && evalctx->getArgValue(0)->toBool()) {
inst->scope.apply(*evalctx);

View file

@ -26,95 +26,43 @@
#include "export.h"
#include "printutils.h"
#include "polyset.h"
#include "polyset-utils.h"
#include "dxfdata.h"
#include "Geometry.h"
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <fstream>
#define QUOTE(x__) # x__
#define QUOTED(x__) QUOTE(x__)
#ifdef ENABLE_CGAL
#include "CGAL_Nef_polyhedron.h"
#include "cgal.h"
#include "cgalutils.h"
#include <CGAL/IO/Nef_polyhedron_iostream_3.h> // for dumping .nef3
struct triangle {
std::string vs1;
std::string vs2;
std::string vs3;
};
void exportFile(const class Geometry *root_geom, std::ostream &output, FileFormat format)
void exportFile(const shared_ptr<const Geometry> &root_geom, std::ostream &output, FileFormat format)
{
if (const CGAL_Nef_polyhedron *N = dynamic_cast<const CGAL_Nef_polyhedron *>(root_geom)) {
switch (format) {
case OPENSCAD_STL:
export_stl(N, output);
break;
case OPENSCAD_OFF:
export_off(N, output);
break;
case OPENSCAD_AMF:
export_amf(N, output);
break;
case OPENSCAD_DXF:
assert(false && "Export Nef polyhedron as DXF not supported");
break;
case OPENSCAD_NEFDBG:
output << N->dump();
break;
case OPENSCAD_NEF3:
output << *(N->p3);
break;
default:
assert(false && "Unknown file format");
}
}
else {
if (const PolySet *ps = dynamic_cast<const PolySet *>(root_geom)) {
switch (format) {
case OPENSCAD_STL:
export_stl(*ps, output);
break;
case OPENSCAD_OFF:
export_off(*ps, output);
break;
case OPENSCAD_AMF:
export_amf(*ps, output);
break;
case OPENSCAD_NEFDBG:
PRINT("Not a CGALNefPoly. Add some CSG ops?");
break;
case OPENSCAD_NEF3:
PRINT("Not a CGALNefPoly. Add some CSG ops?");
break;
default:
assert(false && "Unsupported file format");
}
}
else if (const Polygon2d *poly = dynamic_cast<const Polygon2d *>(root_geom)) {
switch (format) {
case OPENSCAD_SVG:
export_svg(*poly, output);
break;
case OPENSCAD_DXF:
export_dxf(*poly, output);
break;
default:
assert(false && "Unsupported file format");
}
} else {
assert(false && "Not implemented");
}
switch (format) {
case OPENSCAD_STL:
export_stl(root_geom, output);
break;
case OPENSCAD_OFF:
export_off(root_geom, output);
break;
case OPENSCAD_AMF:
export_amf(root_geom, output);
break;
case OPENSCAD_DXF:
export_dxf(root_geom, output);
break;
case OPENSCAD_SVG:
export_svg(root_geom, output);
break;
case OPENSCAD_NEFDBG:
export_nefdbg(root_geom, output);
break;
case OPENSCAD_NEF3:
export_nef3(root_geom, output);
break;
default:
assert(false && "Unknown file format");
}
}
void exportFileByName(const class Geometry *root_geom, FileFormat format,
void exportFileByName(const shared_ptr<const Geometry> &root_geom, FileFormat format,
const char *name2open, const char *name2display)
{
std::ofstream fstream(name2open);
@ -138,436 +86,3 @@ void exportFileByName(const class Geometry *root_geom, FileFormat format,
}
}
}
void export_stl(const PolySet &ps, std::ostream &output)
{
PolySet triangulated(3);
PolysetUtils::tessellate_faces(ps, triangulated);
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
output << "solid OpenSCAD_Model\n";
BOOST_FOREACH(const Polygon &p, triangulated.polygons) {
assert(p.size() == 3); // STL only allows triangles
std::stringstream stream;
stream << p[0][0] << " " << p[0][1] << " " << p[0][2];
std::string vs1 = stream.str();
stream.str("");
stream << p[1][0] << " " << p[1][1] << " " << p[1][2];
std::string vs2 = stream.str();
stream.str("");
stream << p[2][0] << " " << p[2][1] << " " << p[2][2];
std::string vs3 = stream.str();
if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
// The above condition ensures that there are 3 distinct vertices, but
// they may be collinear. If they are, the unit normal is meaningless
// so the default value of "1 0 0" can be used. If the vertices are not
// collinear then the unit normal must be calculated from the
// components.
output << " facet normal ";
Vector3d normal = (p[1] - p[0]).cross(p[2] - p[0]);
normal.normalize();
if (is_finite(normal) && !is_nan(normal)) {
output << normal[0] << " " << normal[1] << " " << normal[2] << "\n";
}
else {
output << "0 0 0\n";
}
output << " outer loop\n";
BOOST_FOREACH(const Vector3d &v, p) {
output << " vertex " << v[0] << " " << v[1] << " " << v[2] << "\n";
}
output << " endloop\n";
output << " endfacet\n";
}
}
output << "endsolid OpenSCAD_Model\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}
/*!
Saves the given CGAL Polyhedon2 as STL to the given file.
The file must be open.
*/
static void export_stl(const CGAL_Polyhedron &P, std::ostream &output)
{
typedef CGAL_Polyhedron::Vertex Vertex;
typedef CGAL_Polyhedron::Vertex_const_iterator VCI;
typedef CGAL_Polyhedron::Facet_const_iterator FCI;
typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC;
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
output << "solid OpenSCAD_Model\n";
for (FCI fi = P.facets_begin(); fi != P.facets_end(); ++fi) {
HFCC hc = fi->facet_begin();
HFCC hc_end = hc;
Vertex v1, v2, v3;
v1 = *VCI((hc++)->vertex());
v3 = *VCI((hc++)->vertex());
do {
v2 = v3;
v3 = *VCI((hc++)->vertex());
double x1 = CGAL::to_double(v1.point().x());
double y1 = CGAL::to_double(v1.point().y());
double z1 = CGAL::to_double(v1.point().z());
double x2 = CGAL::to_double(v2.point().x());
double y2 = CGAL::to_double(v2.point().y());
double z2 = CGAL::to_double(v2.point().z());
double x3 = CGAL::to_double(v3.point().x());
double y3 = CGAL::to_double(v3.point().y());
double z3 = CGAL::to_double(v3.point().z());
std::stringstream stream;
stream << x1 << " " << y1 << " " << z1;
std::string vs1 = stream.str();
stream.str("");
stream << x2 << " " << y2 << " " << z2;
std::string vs2 = stream.str();
stream.str("");
stream << x3 << " " << y3 << " " << z3;
std::string vs3 = stream.str();
if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
// The above condition ensures that there are 3 distinct vertices, but
// they may be collinear. If they are, the unit normal is meaningless
// so the default value of "1 0 0" can be used. If the vertices are not
// collinear then the unit normal must be calculated from the
// components.
if (!CGAL::collinear(v1.point(),v2.point(),v3.point())) {
CGAL_Polyhedron::Traits::Vector_3 normal = CGAL::normal(v1.point(),v2.point(),v3.point());
output << " facet normal "
<< CGAL::sign(normal.x()) * sqrt(CGAL::to_double(normal.x()*normal.x()/normal.squared_length()))
<< " "
<< CGAL::sign(normal.y()) * sqrt(CGAL::to_double(normal.y()*normal.y()/normal.squared_length()))
<< " "
<< CGAL::sign(normal.z()) * sqrt(CGAL::to_double(normal.z()*normal.z()/normal.squared_length()))
<< "\n";
}
else output << " facet normal 1 0 0\n";
output << " outer loop\n";
output << " vertex " << vs1 << "\n";
output << " vertex " << vs2 << "\n";
output << " vertex " << vs3 << "\n";
output << " endloop\n";
output << " endfacet\n";
}
} while (hc != hc_end);
}
output << "endsolid OpenSCAD_Model\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}
/*!
Saves the current 3D CGAL Nef polyhedron as STL to the given file.
The file must be open.
*/
void export_stl(const CGAL_Nef_polyhedron *root_N, std::ostream &output)
{
if (!root_N->p3->is_simple()) {
PRINT("WARNING: Exported object may not be a valid 2-manifold and may need repair");
}
bool usePolySet = true;
if (usePolySet) {
PolySet ps(3);
bool err = CGALUtils::createPolySetFromNefPolyhedron3(*(root_N->p3), ps);
if (err) { PRINT("ERROR: Nef->PolySet failed"); }
else {
export_stl(ps, output);
}
}
else {
CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
try {
CGAL_Polyhedron P;
//root_N->p3->convert_to_Polyhedron(P);
bool err = nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>( *(root_N->p3), P );
if (err) {
PRINT("ERROR: CGAL NefPolyhedron->Polyhedron conversion failed");
return;
}
export_stl(P, output);
}
catch (const CGAL::Assertion_exception &e) {
PRINTB("ERROR: CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what());
}
catch (...) {
PRINT("ERROR: CGAL unknown error in CGAL_Nef_polyhedron3::convert_to_Polyhedron()");
}
CGAL::set_error_behaviour(old_behaviour);
}
}
void export_off(const class PolySet &ps, std::ostream &output)
{
// FIXME: Implement this without creating a Nef polyhedron
CGAL_Nef_polyhedron *N = CGALUtils::createNefPolyhedronFromGeometry(ps);
export_off(N, output);
delete N;
}
void export_off(const CGAL_Nef_polyhedron *root_N, std::ostream &output)
{
if (!root_N->p3->is_simple()) {
PRINT("WARNING: Export failed, the object isn't a valid 2-manifold.");
return;
}
CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
try {
CGAL_Polyhedron P;
//root_N->p3->convert_to_Polyhedron(P);
bool err = nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>(*(root_N->p3), P);
if (err) {
PRINT("ERROR: CGAL NefPolyhedron->Polyhedron conversion failed");
return;
}
output << P;
}
catch (const CGAL::Assertion_exception &e) {
PRINTB("ERROR: CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what());
}
CGAL::set_error_behaviour(old_behaviour);
}
void export_amf(const class PolySet &ps, std::ostream &output)
{
// FIXME: Implement this without creating a Nef polyhedron
CGAL_Nef_polyhedron *N = CGALUtils::createNefPolyhedronFromGeometry(ps);
export_amf(N, output);
delete N;
}
/*!
Saves the current 3D CGAL Nef polyhedron as AMF to the given file.
The file must be open.
*/
void export_amf(const CGAL_Nef_polyhedron *root_N, std::ostream &output)
{
if (!root_N->p3->is_simple()) {
PRINT("WARNING: Export failed, the object isn't a valid 2-manifold.");
return;
}
CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
try {
CGAL_Polyhedron P;
//root_N->p3->convert_to_Polyhedron(P);
bool err = nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>(*(root_N->p3), P);
if (err) {
PRINT("ERROR: CGAL NefPolyhedron->Polyhedron conversion failed");
return;
}
typedef CGAL_Polyhedron::Vertex Vertex;
typedef CGAL_Polyhedron::Vertex_const_iterator VCI;
typedef CGAL_Polyhedron::Facet_const_iterator FCI;
typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC;
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
std::vector<std::string> vertices;
std::vector<triangle> triangles;
for (FCI fi = P.facets_begin(); fi != P.facets_end(); ++fi) {
HFCC hc = fi->facet_begin();
HFCC hc_end = hc;
Vertex v1, v2, v3;
v1 = *VCI((hc++)->vertex());
v3 = *VCI((hc++)->vertex());
do {
v2 = v3;
v3 = *VCI((hc++)->vertex());
double x1 = CGAL::to_double(v1.point().x());
double y1 = CGAL::to_double(v1.point().y());
double z1 = CGAL::to_double(v1.point().z());
double x2 = CGAL::to_double(v2.point().x());
double y2 = CGAL::to_double(v2.point().y());
double z2 = CGAL::to_double(v2.point().z());
double x3 = CGAL::to_double(v3.point().x());
double y3 = CGAL::to_double(v3.point().y());
double z3 = CGAL::to_double(v3.point().z());
std::stringstream stream;
stream << x1 << " " << y1 << " " << z1;
std::string vs1 = stream.str();
stream.str("");
stream << x2 << " " << y2 << " " << z2;
std::string vs2 = stream.str();
stream.str("");
stream << x3 << " " << y3 << " " << z3;
std::string vs3 = stream.str();
if (std::find(vertices.begin(), vertices.end(), vs1) == vertices.end())
vertices.push_back(vs1);
if (std::find(vertices.begin(), vertices.end(), vs2) == vertices.end())
vertices.push_back(vs2);
if (std::find(vertices.begin(), vertices.end(), vs3) == vertices.end())
vertices.push_back(vs3);
if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
// The above condition ensures that there are 3 distinct vertices, but
// they may be collinear. If they are, the unit normal is meaningless
// so the default value of "1 0 0" can be used. If the vertices are not
// collinear then the unit normal must be calculated from the
// components.
triangle tri = {vs1, vs2, vs3};
triangles.push_back(tri);
}
} while (hc != hc_end);
}
output << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
<< "<amf unit=\"millimeter\">\r\n"
<< " <metadata type=\"producer\">OpenSCAD " << QUOTED(OPENSCAD_VERSION)
#ifdef OPENSCAD_COMMIT
<< " (git " << QUOTED(OPENSCAD_COMMIT) << ")"
#endif
<< "</metadata>\r\n"
<< " <object id=\"0\">\r\n"
<< " <mesh>\r\n";
output << " <vertices>\r\n";
for (size_t i = 0; i < vertices.size(); i++) {
std::string s = vertices[i];
output << " <vertex><coordinates>\r\n";
char* chrs = new char[s.length() + 1];
strcpy(chrs, s.c_str());
std::string coords = strtok(chrs, " ");
output << " <x>" << coords << "</x>\r\n";
coords = strtok(NULL, " ");
output << " <y>" << coords << "</y>\r\n";
coords = strtok(NULL, " ");
output << " <z>" << coords << "</z>\r\n";
output << " </coordinates></vertex>\r\n";
delete[] chrs;
}
output << " </vertices>\r\n";
output << " <volume>\r\n";
for (size_t i = 0; i < triangles.size(); i++) {
triangle t = triangles[i];
output << " <triangle>\r\n";
size_t index;
index = std::distance(vertices.begin(), std::find(vertices.begin(), vertices.end(), t.vs1));
output << " <v1>" << index << "</v1>\r\n";
index = std::distance(vertices.begin(), std::find(vertices.begin(), vertices.end(), t.vs2));
output << " <v2>" << index << "</v2>\r\n";
index = std::distance(vertices.begin(), std::find(vertices.begin(), vertices.end(), t.vs3));
output << " <v3>" << index << "</v3>\r\n";
output << " </triangle>\r\n";
}
output << " </volume>\r\n";
output << " </mesh>\r\n"
<< " </object>\r\n"
<< "</amf>\r\n";
} catch (CGAL::Assertion_exception e) {
PRINTB("ERROR: CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what());
}
CGAL::set_error_behaviour(old_behaviour);
setlocale(LC_NUMERIC, ""); // Set default locale
}
#endif // ENABLE_CGAL
/*!
Saves the current Polygon2d as DXF to the given absolute filename.
*/
void export_dxf(const Polygon2d &poly, std::ostream &output)
{
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
// Some importers (e.g. Inkscape) needs a BLOCKS section to be present
output << " 0\n"
<< "SECTION\n"
<< " 2\n"
<< "BLOCKS\n"
<< " 0\n"
<< "ENDSEC\n"
<< " 0\n"
<< "SECTION\n"
<< " 2\n"
<< "ENTITIES\n";
BOOST_FOREACH(const Outline2d &o, poly.outlines()) {
for (unsigned int i=0;i<o.vertices.size();i++) {
const Vector2d &p1 = o.vertices[i];
const Vector2d &p2 = o.vertices[(i+1)%o.vertices.size()];
double x1 = p1[0];
double y1 = p1[1];
double x2 = p2[0];
double y2 = p2[1];
output << " 0\n"
<< "LINE\n";
// Some importers (e.g. Inkscape) needs a layer to be specified
output << " 8\n"
<< "0\n"
<< " 10\n"
<< x1 << "\n"
<< " 20\n"
<< y1 << "\n"
<< " 11\n"
<< x2 << "\n"
<< " 21\n"
<< y2 << "\n";
}
}
output << " 0\n"
<< "ENDSEC\n";
// Some importers (e.g. Inkscape) needs an OBJECTS section with a DICTIONARY entry
output << " 0\n"
<< "SECTION\n"
<< " 2\n"
<< "OBJECTS\n"
<< " 0\n"
<< "DICTIONARY\n"
<< " 0\n"
<< "ENDSEC\n";
output << " 0\n"
<<"EOF\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}
void export_svg(const Polygon2d &poly, std::ostream &output)
{
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
BoundingBox bbox = poly.getBoundingBox();
int minx = floor(bbox.min().x());
int miny = floor(-bbox.max().y());
int maxx = ceil(bbox.max().x());
int maxy = ceil(-bbox.min().y());
int width = maxx - minx;
int height = maxy - miny;
output
<< "<?xml version=\"1.0\" standalone=\"no\"?>\n"
<< "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"
<< "<svg width=\"" << width << "\" height=\"" << height
<< "\" viewBox=\"" << minx << " " << miny << " " << width << " " << height
<< "\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n"
<< "<title>OpenSCAD Model</title>\n";
output << "<path d=\"\n";
BOOST_FOREACH(const Outline2d &o, poly.outlines()) {
if (o.vertices.empty()) {
continue;
}
const Eigen::Vector2d& p0 = o.vertices[0];
output << "M " << p0.x() << "," << -p0.y();
for (unsigned int idx = 1;idx < o.vertices.size();idx++) {
const Eigen::Vector2d& p = o.vertices[idx];
output << " L " << p.x() << "," << -p.y();
if ((idx % 6) == 5) {
output << "\n";
}
}
output << " z\n";
}
output << "\" stroke=\"black\" fill=\"lightgray\" stroke-width=\"0.5\"/>";
output << "</svg>\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}

View file

@ -5,8 +5,6 @@
#include "Camera.h"
#include "memory.h"
#ifdef ENABLE_CGAL
enum FileFormat {
OPENSCAD_STL,
OPENSCAD_OFF,
@ -17,25 +15,20 @@ enum FileFormat {
OPENSCAD_NEF3
};
// void exportFile(const class Geometry *root_geom, std::ostream &output, FileFormat format);
void exportFileByName(const class Geometry *root_geom, FileFormat format,
const char *name2open, const char *name2display);
void export_png(shared_ptr<const class Geometry> root_geom, Camera &c, std::ostream &output);
void exportFileByName(const shared_ptr<const class Geometry> &root_geom, FileFormat format,
const char *name2open, const char *name2display);
void export_stl(const class CGAL_Nef_polyhedron *root_N, std::ostream &output);
void export_stl(const class PolySet &ps, std::ostream &output);
void export_off(const CGAL_Nef_polyhedron *root_N, std::ostream &output);
void export_off(const class PolySet &ps, std::ostream &output);
void export_amf(const class CGAL_Nef_polyhedron *root_N, std::ostream &output);
void export_amf(const class PolySet &ps, std::ostream &output);
void export_dxf(const class Polygon2d &poly, std::ostream &output);
void export_svg(const class Polygon2d &poly, std::ostream &output);
void export_png(const CGAL_Nef_polyhedron *root_N, Camera &c, std::ostream &output);
void export_stl(const shared_ptr<const Geometry> &geom, std::ostream &output);
void export_off(const shared_ptr<const Geometry> &geom, std::ostream &output);
void export_amf(const shared_ptr<const Geometry> &geom, std::ostream &output);
void export_dxf(const shared_ptr<const Geometry> &geom, std::ostream &output);
void export_svg(const shared_ptr<const Geometry> &geom, std::ostream &output);
void export_nefdbg(const shared_ptr<const Geometry> &geom, std::ostream &output);
void export_nef3(const shared_ptr<const Geometry> &geom, std::ostream &output);
// void exportFile(const class Geometry *root_geom, std::ostream &output, FileFormat format);
void export_png(const shared_ptr<const class Geometry> &root_geom, Camera &c, std::ostream &output);
void export_png(const shared_ptr<const class 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 // ENABLE_CGAL
#ifdef DEBUG
void export_stl(const class PolySet &ps, std::ostream &output);
#endif

196
src/export_amf.cc Normal file
View file

@ -0,0 +1,196 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "export.h"
#include "polyset.h"
#include "polyset-utils.h"
#include "dxfdata.h"
#include <boost/foreach.hpp>
#ifdef ENABLE_CGAL
#include "CGAL_Nef_polyhedron.h"
#include "cgal.h"
#include "cgalutils.h"
#define QUOTE(x__) # x__
#define QUOTED(x__) QUOTE(x__)
struct triangle {
std::string vs1;
std::string vs2;
std::string vs3;
};
static int objectid;
/*!
Saves the current 3D CGAL Nef polyhedron as AMF to the given file.
The file must be open.
*/
static void append_amf(const CGAL_Nef_polyhedron &root_N, std::ostream &output)
{
if (!root_N.p3->is_simple()) {
PRINT("WARNING: Export failed, the object isn't a valid 2-manifold.");
return;
}
CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
try {
CGAL_Polyhedron P;
root_N.p3->convert_to_Polyhedron(P);
typedef CGAL_Polyhedron::Vertex Vertex;
typedef CGAL_Polyhedron::Vertex_const_iterator VCI;
typedef CGAL_Polyhedron::Facet_const_iterator FCI;
typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC;
std::vector<std::string> vertices;
std::vector<triangle> triangles;
for (FCI fi = P.facets_begin(); fi != P.facets_end(); ++fi) {
HFCC hc = fi->facet_begin();
HFCC hc_end = hc;
Vertex v1, v2, v3;
v1 = *VCI((hc++)->vertex());
v3 = *VCI((hc++)->vertex());
do {
v2 = v3;
v3 = *VCI((hc++)->vertex());
double x1 = CGAL::to_double(v1.point().x());
double y1 = CGAL::to_double(v1.point().y());
double z1 = CGAL::to_double(v1.point().z());
double x2 = CGAL::to_double(v2.point().x());
double y2 = CGAL::to_double(v2.point().y());
double z2 = CGAL::to_double(v2.point().z());
double x3 = CGAL::to_double(v3.point().x());
double y3 = CGAL::to_double(v3.point().y());
double z3 = CGAL::to_double(v3.point().z());
std::stringstream stream;
stream << x1 << " " << y1 << " " << z1;
std::string vs1 = stream.str();
stream.str("");
stream << x2 << " " << y2 << " " << z2;
std::string vs2 = stream.str();
stream.str("");
stream << x3 << " " << y3 << " " << z3;
std::string vs3 = stream.str();
if (std::find(vertices.begin(), vertices.end(), vs1) == vertices.end())
vertices.push_back(vs1);
if (std::find(vertices.begin(), vertices.end(), vs2) == vertices.end())
vertices.push_back(vs2);
if (std::find(vertices.begin(), vertices.end(), vs3) == vertices.end())
vertices.push_back(vs3);
if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
// The above condition ensures that there are 3 distinct vertices, but
// they may be collinear. If they are, the unit normal is meaningless
// so the default value of "1 0 0" can be used. If the vertices are not
// collinear then the unit normal must be calculated from the
// components.
triangle tri = {vs1, vs2, vs3};
triangles.push_back(tri);
}
} while (hc != hc_end);
}
output << " <object id=\"" << objectid++ << "\">\r\n"
<< " <mesh>\r\n";
output << " <vertices>\r\n";
for (size_t i = 0; i < vertices.size(); i++) {
std::string s = vertices[i];
output << " <vertex><coordinates>\r\n";
char* chrs = new char[s.length() + 1];
strcpy(chrs, s.c_str());
std::string coords = strtok(chrs, " ");
output << " <x>" << coords << "</x>\r\n";
coords = strtok(NULL, " ");
output << " <y>" << coords << "</y>\r\n";
coords = strtok(NULL, " ");
output << " <z>" << coords << "</z>\r\n";
output << " </coordinates></vertex>\r\n";
delete[] chrs;
}
output << " </vertices>\r\n";
output << " <volume>\r\n";
for (size_t i = 0; i < triangles.size(); i++) {
triangle t = triangles[i];
output << " <triangle>\r\n";
size_t index;
index = std::distance(vertices.begin(), std::find(vertices.begin(), vertices.end(), t.vs1));
output << " <v1>" << index << "</v1>\r\n";
index = std::distance(vertices.begin(), std::find(vertices.begin(), vertices.end(), t.vs2));
output << " <v2>" << index << "</v2>\r\n";
index = std::distance(vertices.begin(), std::find(vertices.begin(), vertices.end(), t.vs3));
output << " <v3>" << index << "</v3>\r\n";
output << " </triangle>\r\n";
}
output << " </volume>\r\n";
output << " </mesh>\r\n"
<< " </object>\r\n";
} catch (CGAL::Assertion_exception e) {
PRINTB("ERROR: CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what());
}
CGAL::set_error_behaviour(old_behaviour);
}
static void append_amf(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
if (const CGAL_Nef_polyhedron *N = dynamic_cast<const CGAL_Nef_polyhedron *>(geom.get())) {
append_amf(*N, output);
}
else if (const PolySet *ps = dynamic_cast<const PolySet *>(geom.get())) {
// FIXME: Implement this without creating a Nef polyhedron
CGAL_Nef_polyhedron *N = CGALUtils::createNefPolyhedronFromGeometry(*ps);
append_amf(*N, output);
delete N;
}
else if (const Polygon2d *poly = dynamic_cast<const Polygon2d *>(geom.get())) {
assert(false && "Unsupported file format");
} else {
assert(false && "Not implemented");
}
}
void export_amf(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
output << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
<< "<amf unit=\"millimeter\">\r\n"
<< " <metadata type=\"producer\">OpenSCAD " << QUOTED(OPENSCAD_VERSION)
#ifdef OPENSCAD_COMMIT
<< " (git " << QUOTED(OPENSCAD_COMMIT) << ")"
#endif
<< "</metadata>\r\n";
objectid = 0;
append_amf(geom, output);
output << "</amf>\r\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}
#endif // ENABLE_CGAL

107
src/export_dxf.cc Normal file
View file

@ -0,0 +1,107 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "export.h"
#include "polyset.h"
#include "polyset-utils.h"
#include "dxfdata.h"
#include <boost/foreach.hpp>
/*!
Saves the current Polygon2d as DXF to the given absolute filename.
*/
void export_dxf(const Polygon2d &poly, std::ostream &output)
{
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
// Some importers (e.g. Inkscape) needs a BLOCKS section to be present
output << " 0\n"
<< "SECTION\n"
<< " 2\n"
<< "BLOCKS\n"
<< " 0\n"
<< "ENDSEC\n"
<< " 0\n"
<< "SECTION\n"
<< " 2\n"
<< "ENTITIES\n";
BOOST_FOREACH(const Outline2d &o, poly.outlines()) {
for (unsigned int i=0;i<o.vertices.size();i++) {
const Vector2d &p1 = o.vertices[i];
const Vector2d &p2 = o.vertices[(i+1)%o.vertices.size()];
double x1 = p1[0];
double y1 = p1[1];
double x2 = p2[0];
double y2 = p2[1];
output << " 0\n"
<< "LINE\n";
// Some importers (e.g. Inkscape) needs a layer to be specified
// The [X1 Y1 X2 Y2] order is the most common and can be parsed linearly.
// Some libraries, like the python libraries dxfgrabber and ezdxf, cannot open [X1 X2 Y1 Y2] order.
output << " 8\n"
<< "0\n"
<< " 10\n"
<< x1 << "\n"
<< " 20\n"
<< y1 << "\n"
<< " 11\n"
<< x2 << "\n"
<< " 21\n"
<< y2 << "\n";
}
}
output << " 0\n"
<< "ENDSEC\n";
// Some importers (e.g. Inkscape) needs an OBJECTS section with a DICTIONARY entry
output << " 0\n"
<< "SECTION\n"
<< " 2\n"
<< "OBJECTS\n"
<< " 0\n"
<< "DICTIONARY\n"
<< " 0\n"
<< "ENDSEC\n";
output << " 0\n"
<<"EOF\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}
void export_dxf(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
if (const PolySet *ps = dynamic_cast<const PolySet *>(geom.get())) {
assert(false && "Unsupported file format");
}
else if (const Polygon2d *poly = dynamic_cast<const Polygon2d *>(geom.get())) {
export_dxf(*poly, output);
} else {
assert(false && "Export as DXF for this geometry type is not supported");
}
}

56
src/export_nef.cc Normal file
View file

@ -0,0 +1,56 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "export.h"
#include "printutils.h"
#include "Geometry.h"
#ifdef ENABLE_CGAL
#include "CGAL_Nef_polyhedron.h"
#include "cgal.h"
#include "cgalutils.h"
#include <CGAL/IO/Nef_polyhedron_iostream_3.h> // for dumping .nef3
void export_nefdbg(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
if (const CGAL_Nef_polyhedron *N = dynamic_cast<const CGAL_Nef_polyhedron *>(geom.get())) {
output << N->dump();
}
else {
PRINT("Not a CGALNefPoly. Add some CSG ops?");
}
}
void export_nef3(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
if (const CGAL_Nef_polyhedron *N = dynamic_cast<const CGAL_Nef_polyhedron *>(geom.get())) {
output << *(N->p3);
}
else {
PRINT("Not a CGALNefPoly. Add some CSG ops?");
}
}
#endif

106
src/export_off.cc Normal file
View file

@ -0,0 +1,106 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "export.h"
#include "polyset.h"
#include "polyset-utils.h"
#include "dxfdata.h"
#include <boost/foreach.hpp>
#ifdef ENABLE_CGAL
#include "CGAL_Nef_polyhedron.h"
#include "cgal.h"
#include "cgalutils.h"
#include "Reindexer.h"
#include "grid.h"
struct IndexedMesh {
IndexedMesh() : numfaces(0) {}
Reindexer<Vector3d> vertices;
std::vector<int> indices;
size_t numfaces;
};
static void append_geometry(const PolySet &ps, IndexedMesh &mesh)
{
BOOST_FOREACH(const Polygon &p, ps.polygons) {
BOOST_FOREACH(const Vector3d &v, p) {
mesh.indices.push_back(mesh.vertices.lookup(v));
}
mesh.numfaces++;
mesh.indices.push_back(-1);
}
}
void append_geometry(const shared_ptr<const Geometry> &geom, IndexedMesh &mesh)
{
if (const CGAL_Nef_polyhedron *N = dynamic_cast<const CGAL_Nef_polyhedron *>(geom.get())) {
PolySet ps(3);
bool err = CGALUtils::createPolySetFromNefPolyhedron3(*(N->p3), ps);
if (err) { PRINT("ERROR: Nef->PolySet failed"); }
else {
append_geometry(ps, mesh);
}
}
else if (const PolySet *ps = dynamic_cast<const PolySet *>(geom.get())) {
append_geometry(*ps, mesh);
}
else if (const Polygon2d *poly = dynamic_cast<const Polygon2d *>(geom.get())) {
assert(false && "Unsupported file format");
} else {
assert(false && "Not implemented");
}
}
void export_off(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
IndexedMesh mesh;
append_geometry(geom, mesh);
output << "OFF " << mesh.vertices.size() << " " << mesh.numfaces << " 0\n";
const Vector3d *v = mesh.vertices.getArray();
size_t numverts = mesh.vertices.size();
for (size_t i=0;i<numverts;i++) {
output << v[i][0] << " " << v[i][1] << " " << v[i][2] << " " << "\n";
}
size_t cnt = 0;
for (size_t i=0;i<mesh.numfaces;i++) {
size_t nverts = 0;
while (mesh.indices[cnt++] != -1) nverts++;
output << nverts;
cnt -= nverts + 1;
for (size_t n=0;n<nverts;n++) output << " " << mesh.indices[cnt++];
output << "\n";
cnt++; // Skip the -1 marker
}
}
#endif // ENABLE_CGAL

View file

@ -19,7 +19,7 @@ static void setupCamera(Camera &cam, const BoundingBox &bbox)
if (cam.viewall) cam.viewAll(bbox);
}
void export_png(shared_ptr<const Geometry> root_geom, Camera &cam, std::ostream &output)
void export_png(const shared_ptr<const Geometry> &root_geom, Camera &cam, std::ostream &output)
{
PRINTD("export_png geom");
OffscreenView *glview;

212
src/export_stl.cc Normal file
View file

@ -0,0 +1,212 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "export.h"
#include "polyset.h"
#include "polyset-utils.h"
#include "dxfdata.h"
#include <boost/foreach.hpp>
#ifdef ENABLE_CGAL
#include "CGAL_Nef_polyhedron.h"
#include "cgal.h"
#include "cgalutils.h"
static void append_stl(const PolySet &ps, std::ostream &output)
{
PolySet triangulated(3);
PolysetUtils::tessellate_faces(ps, triangulated);
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
BOOST_FOREACH(const Polygon &p, triangulated.polygons) {
assert(p.size() == 3); // STL only allows triangles
std::stringstream stream;
stream << p[0][0] << " " << p[0][1] << " " << p[0][2];
std::string vs1 = stream.str();
stream.str("");
stream << p[1][0] << " " << p[1][1] << " " << p[1][2];
std::string vs2 = stream.str();
stream.str("");
stream << p[2][0] << " " << p[2][1] << " " << p[2][2];
std::string vs3 = stream.str();
if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
// The above condition ensures that there are 3 distinct vertices, but
// they may be collinear. If they are, the unit normal is meaningless
// so the default value of "1 0 0" can be used. If the vertices are not
// collinear then the unit normal must be calculated from the
// components.
output << " facet normal ";
Vector3d normal = (p[1] - p[0]).cross(p[2] - p[0]);
normal.normalize();
if (is_finite(normal) && !is_nan(normal)) {
output << normal[0] << " " << normal[1] << " " << normal[2] << "\n";
}
else {
output << "0 0 0\n";
}
output << " outer loop\n";
BOOST_FOREACH(const Vector3d &v, p) {
output << " vertex " << v[0] << " " << v[1] << " " << v[2] << "\n";
}
output << " endloop\n";
output << " endfacet\n";
}
}
setlocale(LC_NUMERIC, ""); // Set default locale
}
static void append_stl(const CGAL_Polyhedron &P, std::ostream &output)
{
typedef CGAL_Polyhedron::Vertex Vertex;
typedef CGAL_Polyhedron::Vertex_const_iterator VCI;
typedef CGAL_Polyhedron::Facet_const_iterator FCI;
typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC;
for (FCI fi = P.facets_begin(); fi != P.facets_end(); ++fi) {
HFCC hc = fi->facet_begin();
HFCC hc_end = hc;
Vertex v1, v2, v3;
v1 = *VCI((hc++)->vertex());
v3 = *VCI((hc++)->vertex());
do {
v2 = v3;
v3 = *VCI((hc++)->vertex());
double x1 = CGAL::to_double(v1.point().x());
double y1 = CGAL::to_double(v1.point().y());
double z1 = CGAL::to_double(v1.point().z());
double x2 = CGAL::to_double(v2.point().x());
double y2 = CGAL::to_double(v2.point().y());
double z2 = CGAL::to_double(v2.point().z());
double x3 = CGAL::to_double(v3.point().x());
double y3 = CGAL::to_double(v3.point().y());
double z3 = CGAL::to_double(v3.point().z());
std::stringstream stream;
stream << x1 << " " << y1 << " " << z1;
std::string vs1 = stream.str();
stream.str("");
stream << x2 << " " << y2 << " " << z2;
std::string vs2 = stream.str();
stream.str("");
stream << x3 << " " << y3 << " " << z3;
std::string vs3 = stream.str();
if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
// The above condition ensures that there are 3 distinct vertices, but
// they may be collinear. If they are, the unit normal is meaningless
// so the default value of "1 0 0" can be used. If the vertices are not
// collinear then the unit normal must be calculated from the
// components.
if (!CGAL::collinear(v1.point(),v2.point(),v3.point())) {
CGAL_Polyhedron::Traits::Vector_3 normal = CGAL::normal(v1.point(),v2.point(),v3.point());
output << " facet normal "
<< CGAL::sign(normal.x()) * sqrt(CGAL::to_double(normal.x()*normal.x()/normal.squared_length()))
<< " "
<< CGAL::sign(normal.y()) * sqrt(CGAL::to_double(normal.y()*normal.y()/normal.squared_length()))
<< " "
<< CGAL::sign(normal.z()) * sqrt(CGAL::to_double(normal.z()*normal.z()/normal.squared_length()))
<< "\n";
}
else output << " facet normal 1 0 0\n";
output << " outer loop\n";
output << " vertex " << vs1 << "\n";
output << " vertex " << vs2 << "\n";
output << " vertex " << vs3 << "\n";
output << " endloop\n";
output << " endfacet\n";
}
} while (hc != hc_end);
}
}
/*!
Saves the current 3D CGAL Nef polyhedron as STL to the given file.
The file must be open.
*/
static void append_stl(const CGAL_Nef_polyhedron &root_N, std::ostream &output)
{
if (!root_N.p3->is_simple()) {
PRINT("WARNING: Exported object may not be a valid 2-manifold and may need repair");
}
bool usePolySet = true;
if (usePolySet) {
PolySet ps(3);
bool err = CGALUtils::createPolySetFromNefPolyhedron3(*(root_N.p3), ps);
if (err) { PRINT("ERROR: Nef->PolySet failed"); }
else {
append_stl(ps, output);
}
}
else {
CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
try {
CGAL_Polyhedron P;
//root_N.p3->convert_to_Polyhedron(P);
bool err = nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>( *(root_N.p3), P );
if (err) {
PRINT("ERROR: CGAL NefPolyhedron->Polyhedron conversion failed");
return;
}
append_stl(P, output);
}
catch (const CGAL::Assertion_exception &e) {
PRINTB("ERROR: CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what());
}
catch (...) {
PRINT("ERROR: CGAL unknown error in CGAL_Nef_polyhedron3::convert_to_Polyhedron()");
}
CGAL::set_error_behaviour(old_behaviour);
}
}
static void append_stl(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
if (const CGAL_Nef_polyhedron *N = dynamic_cast<const CGAL_Nef_polyhedron *>(geom.get())) {
append_stl(*N, output);
}
else if (const PolySet *ps = dynamic_cast<const PolySet *>(geom.get())) {
append_stl(*ps, output);
}
else if (const Polygon2d *poly = dynamic_cast<const Polygon2d *>(geom.get())) {
assert(false && "Unsupported file format");
} else {
assert(false && "Not implemented");
}
}
void export_stl(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
output << "solid OpenSCAD_Model\n";
append_stl(geom, output);
output << "endsolid OpenSCAD_Model\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}
#endif // ENABLE_CGAL

91
src/export_svg.cc Normal file
View file

@ -0,0 +1,91 @@
/*
* OpenSCAD (www.openscad.org)
* Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
* Marius Kintel <marius@kintel.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* As a special exception, you have permission to link this program
* with the CGAL library and distribute executables, as long as you
* follow the requirements of the GNU GPL in regard to all of the
* software in the executable aside from CGAL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "export.h"
#include "polyset.h"
#include "polyset-utils.h"
#include <boost/foreach.hpp>
static void append_svg(const Polygon2d &poly, std::ostream &output)
{
output << "<path d=\"\n";
BOOST_FOREACH(const Outline2d &o, poly.outlines()) {
if (o.vertices.empty()) {
continue;
}
const Eigen::Vector2d& p0 = o.vertices[0];
output << "M " << p0.x() << "," << -p0.y();
for (unsigned int idx = 1;idx < o.vertices.size();idx++) {
const Eigen::Vector2d& p = o.vertices[idx];
output << " L " << p.x() << "," << -p.y();
if ((idx % 6) == 5) {
output << "\n";
}
}
output << " z\n";
}
output << "\" stroke=\"black\" fill=\"lightgray\" stroke-width=\"0.5\"/>\n";
}
static void append_svg(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
if (const PolySet *ps = dynamic_cast<const PolySet *>(geom.get())) {
assert(false && "Unsupported file format");
}
else if (const Polygon2d *poly = dynamic_cast<const Polygon2d *>(geom.get())) {
append_svg(*poly, output);
} else {
assert(false && "Export as SVG for this geometry type is not supported");
}
}
void export_svg(const shared_ptr<const Geometry> &geom, std::ostream &output)
{
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
BoundingBox bbox = geom->getBoundingBox();
int minx = floor(bbox.min().x());
int miny = floor(-bbox.max().y());
int maxx = ceil(bbox.max().x());
int maxy = ceil(-bbox.min().y());
int width = maxx - minx;
int height = maxy - miny;
output
<< "<?xml version=\"1.0\" standalone=\"no\"?>\n"
<< "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"
<< "\" viewBox=\"" << minx << " " << miny << " " << width << " " << height
<< "\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n"
<< "<title>OpenSCAD Model</title>\n";
append_svg(geom, output);
output << "</svg>\n";
setlocale(LC_NUMERIC, ""); // Set default locale
}

View file

@ -2151,7 +2151,7 @@ void MainWindow::actionExport(export_type_e, QString, QString)
assert(false && "Unknown export type");
break;
}
exportFileByName(this->root_geom.get(), format,
exportFileByName(this->root_geom, format,
export_filename.toLocal8Bit().constData(),
export_filename.toUtf8());
PRINTB("%s export finished.", type_name);
@ -2212,7 +2212,7 @@ void MainWindow::actionExportDXF()
if (dxf_filename.isEmpty()) {
return;
}
exportFileByName(this->root_geom.get(), OPENSCAD_DXF, dxf_filename.toUtf8(),
exportFileByName(this->root_geom, OPENSCAD_DXF, dxf_filename.toUtf8(),
dxf_filename.toLocal8Bit().constData());
PRINT("DXF export finished.");
@ -2226,7 +2226,7 @@ void MainWindow::actionExportSVG()
if (svg_filename.isEmpty()) {
return;
}
exportFileByName(this->root_geom.get(), OPENSCAD_SVG, svg_filename.toUtf8(),
exportFileByName(this->root_geom, OPENSCAD_SVG, svg_filename.toUtf8(),
svg_filename.toLocal8Bit().constData());
PRINT("SVG export finished.");

View file

@ -27,6 +27,7 @@
#include "module.h"
#include "ModuleCache.h"
#include "node.h"
#include "builtin.h"
#include "modcontext.h"
#include "evalcontext.h"
#include "expression.h"
@ -48,11 +49,11 @@ AbstractModule::~AbstractModule()
{
}
AbstractNode *AbstractModule::instantiate(const Context *ctx, const ModuleInstantiation *inst, EvalContext *evalctx) const
AbstractNode *GroupModule::instantiate(const Context *ctx, const ModuleInstantiation *inst, EvalContext *evalctx) const
{
(void)ctx; // avoid unusued parameter warning
AbstractNode *node = new AbstractNode(inst);
AbstractNode *node = new GroupNode(inst);
node->children = inst->instantiateChildren(evalctx);
@ -196,7 +197,7 @@ AbstractNode *Module::instantiate(const Context *ctx, const ModuleInstantiation
c.dump(this, inst);
#endif
AbstractNode *node = new AbstractNode(inst);
AbstractNode *node = new GroupNode(inst);
std::vector<AbstractNode *> instantiatednodes = this->scope.instantiateChildren(&c);
node->children.insert(node->children.end(), instantiatednodes.begin(), instantiatednodes.end());
module_stack.pop_back();
@ -345,16 +346,12 @@ AbstractNode *FileModule::instantiate(const Context *ctx, const ModuleInstantiat
delete context;
context = new FileContext(*this, ctx);
AbstractNode *node = new AbstractNode(inst);
AbstractNode *node = new RootNode(inst);
try {
context->initializeModule(*this);
// FIXME: Set document path to the path of the module
#if 0 && DEBUG
c.dump(this, inst);
#endif
std::vector<AbstractNode *> instantiatednodes = this->scope.instantiateChildren(context);
node->children.insert(node->children.end(), instantiatednodes.begin(), instantiatednodes.end());
}
@ -373,3 +370,8 @@ ValuePtr FileModule::lookup_variable(const std::string &name) const
return context->lookup_variable(name, true);
}
void register_builtin_group()
{
Builtins::init("group", new GroupModule());
}

View file

@ -67,12 +67,20 @@ public:
virtual ~AbstractModule();
virtual bool is_experimental() const { return feature != NULL; }
virtual bool is_enabled() const { return (feature == NULL) || feature->is_enabled(); }
virtual class AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, class EvalContext *evalctx = NULL) const;
virtual class AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, class EvalContext *evalctx = NULL) const = 0;
virtual std::string dump(const std::string &indent, const std::string &name) const;
virtual double lookup_double_variable_with_default(Context &c, std::string variable, double def) const;
virtual std::string lookup_string_variable_with_default(Context &c, std::string variable, std::string def) const;
};
class GroupModule : public AbstractModule
{
public:
GroupModule() { }
virtual ~GroupModule() { }
virtual class AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, class EvalContext *evalctx = NULL) const;
};
class Module : public AbstractModule
{
public:

View file

@ -62,6 +62,17 @@ Response AbstractPolyNode::accept(class State &state, Visitor &visitor) const
return visitor.visit(state, *this);
}
Response GroupNode::accept(class State &state, Visitor &visitor) const
{
return visitor.visit(state, *this);
}
Response RootNode::accept(class State &state, Visitor &visitor) const
{
return visitor.visit(state, *this);
}
Response LeafNode::accept(class State &state, Visitor &visitor) const
{
return visitor.visit(state, *this);
@ -72,11 +83,16 @@ std::string AbstractNode::toString() const
return this->name() + "()";
}
std::string AbstractNode::name() const
std::string GroupNode::name() const
{
return "group";
}
std::string RootNode::name() const
{
return "root";
}
std::string AbstractIntersectionNode::toString() const
{
return this->name() + "()";

View file

@ -33,7 +33,7 @@ public:
/*! The 'OpenSCAD name' of this node, defaults to classname, but can be
overloaded to provide specialization for e.g. CSG nodes, primitive nodes etc.
Used for human-readable output. */
virtual std::string name() const;
virtual std::string name() const = 0;
const std::vector<AbstractNode*> &getChildren() const {
return this->children;
@ -78,6 +78,31 @@ public:
};
};
/*!
Logically groups objects together. Used as a way of passing
objects around without having to perform unions on them.
*/
class GroupNode : public AbstractNode
{
public:
GroupNode(const class ModuleInstantiation *mi) : AbstractNode(mi) { }
virtual ~GroupNode() { }
virtual Response accept(class State &state, class Visitor &visitor) const;
virtual std::string name() const;
};
/*!
Only instantiated once, for the top-level file.
*/
class RootNode : public GroupNode
{
public:
RootNode(const class ModuleInstantiation *mi) : GroupNode(mi) { }
virtual ~RootNode() { }
virtual Response accept(class State &state, class Visitor &visitor) const;
virtual std::string name() const;
};
class LeafNode : public AbstractPolyNode
{
public:

View file

@ -3,6 +3,7 @@
#include <vector>
#include <string>
#include "node.h"
#include "memory.h"
/*!
Caches string values per node based on the node.index().
@ -16,14 +17,15 @@ public:
virtual ~NodeCache() { }
bool contains(const AbstractNode &node) const {
return !(*this)[node].empty();
if (this->cache.size() > node.index()) return this->cache[node.index()].get();
return false;
}
/*! Returns a reference to the cached string copy. NB! don't rely on
* this reference to be valid for long - if the cache is resized
* internally, existing values are lost. */
const std::string & operator[](const AbstractNode &node) const {
if (this->cache.size() > node.index()) return this->cache[node.index()];
if (this->cache.size() > node.index()) return *this->cache[node.index()];
else return this->nullvalue;
}
@ -32,11 +34,12 @@ public:
* internally, existing values are lost. */
const std::string &insert(const class AbstractNode &node, const std::string & value) {
if (this->cache.size() <= node.index()) this->cache.resize(node.index() + 1);
return this->cache[node.index()] = value;
this->cache[node.index()].reset(new std::string(value));
return *this->cache[node.index()];
}
void remove(const class AbstractNode &node) {
if (this->cache.size() > node.index()) this->cache[node.index()] = std::string();
if (this->cache.size() > node.index()) this->cache[node.index()].reset();
}
void clear() {
@ -44,6 +47,6 @@ public:
}
private:
std::vector<std::string> cache;
std::vector<shared_ptr<std::string> > cache;
std::string nullvalue;
};

View file

@ -16,7 +16,7 @@
bool NodeDumper::isCached(const AbstractNode &node) const
{
return !this->cache[node].empty();
return this->cache.contains(node);
}
/*!
@ -38,21 +38,13 @@ void NodeDumper::handleIndent(const State &state)
including braces and indentation.
All children are assumed to be cached already.
*/
std::string NodeDumper::dumpChildren(const AbstractNode &node)
std::string NodeDumper::dumpChildBlock(const AbstractNode &node)
{
std::stringstream dump;
if (!this->visitedchildren[node.index()].empty()) {
dump << " {\n";
for (ChildList::const_iterator iter = this->visitedchildren[node.index()].begin();
iter != this->visitedchildren[node.index()].end();
iter++) {
assert(isCached(**iter));
if ((*iter)->modinst->isBackground()) dump << "%";
if ((*iter)->modinst->isHighlight()) dump << "#";
dump << this->cache[**iter] << "\n";
}
const std::string &chstr = dumpChildren(node);
if (!chstr.empty()) dump << chstr << "\n";
dump << this->currindent << "}";
}
else {
@ -61,6 +53,24 @@ std::string NodeDumper::dumpChildren(const AbstractNode &node)
return dump.str();
}
std::string NodeDumper::dumpChildren(const AbstractNode &node)
{
std::stringstream dump;
for (ChildList::const_iterator iter = this->visitedchildren[node.index()].begin();
iter != this->visitedchildren[node.index()].end();
iter++) {
assert(isCached(**iter));
const std::string &str = this->cache[**iter];
if (!str.empty()) {
if (iter != this->visitedchildren[node.index()].begin()) dump << "\n";
if ((*iter)->modinst->isBackground()) dump << "%";
if ((*iter)->modinst->isHighlight()) dump << "#";
dump << str;
}
}
return dump.str();
}
/*!
Called for each node in the tree.
Will abort traversal if we're cached
@ -75,6 +85,23 @@ Response NodeDumper::visit(State &state, const AbstractNode &node)
dump << this->currindent;
if (this->idprefix) dump << "n" << node.index() << ":";
dump << node;
dump << dumpChildBlock(node);
this->cache.insert(node, dump.str());
}
handleVisitedChildren(state, node);
return ContinueTraversal;
}
/*!
Handle root nodes specially: Only list children
*/
Response NodeDumper::visit(State &state, const RootNode &node)
{
if (isCached(node)) return PruneTraversal;
if (state.isPostfix()) {
std::stringstream dump;
dump << dumpChildren(node);
this->cache.insert(node, dump.str());
}

View file

@ -16,11 +16,13 @@ public:
virtual ~NodeDumper() {}
virtual Response visit(State &state, const AbstractNode &node);
virtual Response visit(State &state, const RootNode &node);
private:
void handleVisitedChildren(const State &state, const AbstractNode &node);
bool isCached(const AbstractNode &node) const;
void handleIndent(const State &state);
std::string dumpChildBlock(const AbstractNode &node);
std::string dumpChildren(const AbstractNode &node);
NodeCache &cache;

View file

@ -289,7 +289,7 @@ static bool checkAndExport(shared_ptr<const Geometry> root_geom, unsigned nd,
PRINT("Current top level object is empty.");
return false;
}
exportFileByName(root_geom.get(), format, filename, filename);
exportFileByName(root_geom, format, filename, filename);
return true;
}
@ -466,6 +466,7 @@ int cmdline(const char *deps_output_file, const std::string &filename, Camera &c
(renderer==Render::OPENCSG || renderer==Render::THROWNTOGETHER)) {
// echo or OpenCSG png -> don't necessarily need geometry evaluation
} else {
// Force creation of CGAL objects (for testing)
root_geom = geomevaluator.evaluateGeometry(*tree.root(), true);
if (!root_geom) root_geom.reset(new CGAL_Nef_polyhedron());
if (renderer == Render::CGAL && root_geom->getDimension() == 3) {

View file

@ -99,7 +99,7 @@ public:
break;
default:
assert(false && "PrimitiveNode::name(): Unknown primitive type");
return AbstractPolyNode::name();
return "unknown";
}
}

View file

@ -290,15 +290,17 @@ Geometry *SurfaceNode::createGeometry() const
p->append_vertex(ox + i, oy + lines-1, min_val);
}
p->append_poly();
for (int i = 0; i < columns-1; i++)
p->insert_vertex(ox + i, oy + 0, min_val);
for (int i = 0; i < lines-1; i++)
p->insert_vertex(ox + columns-1, oy + i, min_val);
for (int i = columns-1; i > 0; i--)
p->insert_vertex(ox + i, oy + lines-1, min_val);
for (int i = lines-1; i > 0; i--)
p->insert_vertex(ox + 0, oy + i, min_val);
if (columns > 1 && lines > 1) {
p->append_poly();
for (int i = 0; i < columns-1; i++)
p->insert_vertex(ox + i, oy + 0, min_val);
for (int i = 0; i < lines-1; i++)
p->insert_vertex(ox + columns-1, oy + i, min_val);
for (int i = columns-1; i > 0; i--)
p->insert_vertex(ox + i, oy + lines-1, min_val);
for (int i = lines-1; i > 0; i--)
p->insert_vertex(ox + 0, oy + i, min_val);
}
return p;
}

View file

@ -15,6 +15,12 @@ public:
virtual Response visit(class State &state, const class AbstractPolyNode &node) {
return visit(state, (const class AbstractNode &)node);
}
virtual Response visit(class State &state, const class GroupNode &node) {
return visit(state, (const class AbstractNode &)node);
}
virtual Response visit(class State &state, const class RootNode &node) {
return visit(state, (const class GroupNode &)node);
}
virtual Response visit(class State &state, const class LeafNode &node) {
return visit(state, (const class AbstractPolyNode &)node);
}

2
testdata/scad/stl/stl-export.scad vendored Normal file
View file

@ -0,0 +1,2 @@
translate([1,1,9]) cube(8);
cube(10);

2
tests/.gitignore vendored
View file

@ -25,4 +25,4 @@ out.*
/test_pretty_print.log.txt
/csgtermtest
/echotest
/dumptest
/dumptest

View file

@ -725,6 +725,11 @@ set(NOCGAL_SOURCES
../src/builtin.cc
../src/import.cc
../src/export.cc
../src/export_stl.cc
../src/export_amf.cc
../src/export_off.cc
../src/export_dxf.cc
../src/export_svg.cc
../src/LibraryInfo.cc
../src/polyset.cc
../src/polyset-gl.cc
@ -736,6 +741,7 @@ set(CGAL_SOURCES
${NOCGAL_SOURCES}
../src/CSGTreeEvaluator.cc
../src/CGAL_Nef_polyhedron.cc
../src/export_nef.cc
../src/cgalutils.cc
../src/cgalutils-applyops.cc
../src/cgalutils-project.cc
@ -1187,6 +1193,8 @@ list(APPEND THROWNTOGETHERTEST_FILES ${OPENCSGTEST_FILES})
list(APPEND CGALSTLSANITYTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/normal-nan.scad)
list(APPEND EXPORT_STL_TEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/stl/stl-export.scad)
list(APPEND EXPORT3D_CGALCGAL_TEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/polyhedron-nonplanar-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/rotate_extrude-tests.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/3D/features/union-coincident-test.scad
@ -1282,14 +1290,18 @@ disable_tests(throwntogethertest_minkowski3-erosion)
# as currently inf/nan is written directly to the CSG file (e.g. r = inf)
# which is not valid or even misleading in case a variable inf exists.
# FIXME: define export behavior for inf/nan when exporting CSG files
# These tests return error code 1.
# FIXME: We should have a way of running these and verify the return code
disable_tests(csgpngtest_primitive-inf-tests
csgpngtest_transform-nan-inf-tests
csgpngtest_primitive-inf-tests
csgpngtest_transform-nan-inf-tests
# Triggers a floating point accuracy issue causing loaded .csg to
# render slightly differently
csgpngtest_issue1258
)
cgalpngtest_nothing-decimal-comma-separated
cgalpngtest_import-empty-tests
cgalpngtest_empty-shape-tests
csgpngtest_issue1258)
# Test config handling
@ -1343,7 +1355,8 @@ list(APPEND BUGS_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue13.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1223.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1223b.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1246.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1455.scad)
${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1455.scad
${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1529.scad)
# We know that we cannot import weakly manifold files into CGAL, so to make tests easier
# to manage, don't try. Once we improve import, we can reenable this
@ -1506,6 +1519,9 @@ add_cmdline_test(cgalstlsanitytest EXE ${CMAKE_SOURCE_DIR}/cgalstlsanitytest SUF
add_cmdline_test(monotonepngtest EXE ${OPENSCAD_BINPATH} ARGS --colorscheme=Monotone --render -o SUFFIX png FILES ${EXPORT3D_CGAL_TEST_FILES} ${EXPORT3D_CGALCGAL_TEST_FILES})
# Disabled for now, needs implementation of #420 to be stable
# add_cmdline_test(stlexport EXE ${OPENSCAD_BINPATH} ARGS -o SUFFIX stl FILES ${EXPORT_STL_TEST_FILES})
# stlpngtest: direct STL output, preview rendering
add_cmdline_test(stlpngtest EXE ${PYTHON_EXECUTABLE} SCRIPT ${CMAKE_SOURCE_DIR}/export_import_pngtest.py ARGS --openscad=${OPENSCAD_BINPATH} --format=STL EXPECTEDDIR monotonepngtest SUFFIX png FILES ${EXPORT3D_TEST_FILES})
# cgalstlpngtest: CGAL STL output, normal rendering

View file

@ -1 +1 @@
group1
root1

View file

@ -1 +1 @@
group1
root1

View file

@ -1 +1 @@
group1(minkowski2+glide3+subdiv4+hull5+resize6+group7+group7+group7+intersection10+group11(sphere)+union13+difference14+intersection10+linear_extrude+linear_extrude+rotate_extrude+rotate_extrude+import+import+import+import+group7+cube+sphere+cylinder+polyhedron+square+circle+polygon+projection+render33+surface+transform35+transform35+transform37+transform35+transform35+color40+offset+text)
root1(minkowski2+glide3+subdiv4+hull5+resize6+group7+group7+group7+intersection10+group11(sphere)+union13+difference14+intersection10+linear_extrude+linear_extrude+rotate_extrude+rotate_extrude+import+import+import+import+group7+cube+sphere+cylinder+polyhedron+square+circle+polygon+projection+render33+surface+transform35+transform35+transform37+transform35+transform35+color40+offset+text)

View file

@ -1,19 +1,17 @@
group() {
multmatrix([[1, 0, 0, -24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
union() {
cube(size = [15, 15, 15], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
intersection() {
multmatrix([[1, 0, 0, -24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
union() {
cube(size = [15, 15, 15], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
difference() {
cube(size = [15, 15, 15], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
group();
}
intersection() {
cube(size = [15, 15, 15], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
difference() {
cube(size = [15, 15, 15], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
group();

View file

@ -1,38 +1,20 @@
group() {
difference() {
intersection() {
group() {
color([0, 0, 1, 1]) {
sphere($fn = 0, $fa = 5, $fs = 0.1, r = 10);
}
}
group() {
color([1, 0, 0, 1]) {
cube(size = [15, 15, 15], center = true);
}
difference() {
intersection() {
group() {
color([0, 0, 1, 1]) {
sphere($fn = 0, $fa = 5, $fs = 0.1, r = 10);
}
}
group() {
union() {
group() {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
group() {
color([1, 0, 0, 1]) {
cube(size = [15, 15, 15], center = true);
}
}
}
group() {
union() {
group() {
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
@ -40,103 +22,90 @@ group() {
}
}
}
}
}
group() {
group() {
multmatrix([[0.5, 0, 0, 0], [0, 0.5, 0, 0], [0, 0, 0.5, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, -40], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
group() {
color([0, 0, 1, 1]) {
sphere($fn = 0, $fa = 5, $fs = 0.1, r = 10);
}
}
group() {
color([1, 0, 0, 1]) {
cube(size = [15, 15, 15], center = true);
}
}
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
}
}
group() {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
}
}
group() {
group() {
multmatrix([[0.5, 0, 0, 0], [0, 0.5, 0, 0], [0, 0, 0.5, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, -40], [0, 0, 0, 1]]) {
group() {
intersection() {
group() {
color([0, 0, 1, 1]) {
sphere($fn = 0, $fa = 5, $fs = 0.1, r = 10);
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
group() {
color([1, 0, 0, 1]) {
cube(size = [15, 15, 15], center = true);
}
}
}
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.86602540378, 0, 0.5, 0], [0, 1, 0, 0], [-0.5, 0, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
group() {
color([0, 0, 1, 1]) {
sphere($fn = 0, $fa = 5, $fs = 0.1, r = 10);
}
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.86602540378, 0, -0.5, 0], [0, 1, 0, 0], [0.5, 0, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
group() {
color([1, 0, 0, 1]) {
cube(size = [15, 15, 15], center = true);
}
}
}
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.866025, 0, 0.5, 0], [0, 1, 0, 0], [-0.5, 0, 0.866025, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -40], [0, 0, 0, 1]]) {
group() {
union() {
group() {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
group() {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.866025, 0, -0.5, 0], [0, 1, 0, 0], [0.5, 0, 0.866025, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
}
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -40], [0, 0, 0, 1]]) {
group() {
union() {
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
@ -144,8 +113,6 @@ group() {
}
}
}
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
group() {
group() {
color([0, 1, 0, 1]) {
@ -154,36 +121,40 @@ group() {
}
}
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.93969262078, 0, -0.34202014332, 0], [0, 1, 0, 0], [0.34202014332, 0, 0.93969262078, 0], [0, 0, 0, 1]]) {
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
group() {
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.86602540378, 0, 0.5, 0], [0, 1, 0, 0], [-0.5, 0, 0.86602540378, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, -17.5], [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]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -22.5], [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]]) {
multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -35], [0, 0, 0, 1]]) {
group() {
group() {
color([0, 1, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.939693, 0, -0.34202, 0], [0, 1, 0, 0], [0.34202, 0, 0.939693, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
@ -191,8 +162,17 @@ group() {
}
}
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -22.5], [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]]) {
multmatrix([[1, 0, 0, -5], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.866025, 0, 0.5, 0], [0, 1, 0, 0], [-0.5, 0, 0.866025, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, -17.5], [0, 0, 0, 1]]) {
multmatrix([[0.707107, 0, -0.707107, 0], [0, 1, 0, 0], [0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
@ -201,7 +181,25 @@ group() {
}
}
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -22.5], [0, 0, 0, 1]]) {
multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -22.5], [0, 0, 0, 1]]) {
multmatrix([[0.707107, 0, -0.707107, 0], [0, 1, 0, 0], [0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
cylinder($fn = 0, $fa = 5, $fs = 0.1, h = 10, r1 = 1, r2 = 1, center = true);
}
}
}
}
}
}
group();
}
group();

View file

@ -1,28 +1,66 @@
group() {
color([1, 1, 0.941176, 1]) {
group() {
intersection() {
color([1, 1, 0.941176, 1]) {
group() {
intersection() {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
color([0.729412, 0.333333, 0.827451, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
difference() {
square(size = [40, 40], center = true);
projection(cut = false, convexity = 0) {
group() {
intersection() {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
}
}
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
}
}
@ -30,126 +68,40 @@ group() {
}
}
}
color([0.729412, 0.333333, 0.827451, 1]) {
}
color([0.545098, 0, 0.545098, 1]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 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 = 1, center = false, convexity = 1, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
difference() {
square(size = [40, 40], center = true);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [40, 39], center = true);
}
projection(cut = false, convexity = 0) {
group() {
intersection() {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, 1, 0], [0, -1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
}
}
}
}
color([0.545098, 0, 0.545098, 1]) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 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 = 1, center = false, convexity = 1, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [40, 39], center = true);
}
projection(cut = false, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 0, 1, 0], [0, -1, 0, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
}
}
}
}
}
color([0.482353, 0.407843, 0.933333, 1]) {
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 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 = 1, center = false, convexity = 1, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
difference() {
multmatrix([[1, 0, 0, -0.5], [0, 1, 0, 0.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [39, 39], center = true);
}
projection(cut = false, convexity = 0) {
multmatrix([[0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 0, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
@ -162,5 +114,51 @@ group() {
}
}
}
group();
}
color([0.482353, 0.407843, 0.933333, 1]) {
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 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 = 1, center = false, convexity = 1, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
difference() {
multmatrix([[1, 0, 0, -0.5], [0, 1, 0, 0.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [39, 39], center = true);
}
projection(cut = false, convexity = 0) {
multmatrix([[0, 1, -2.22045e-16, 0], [-2.22045e-16, 2.22045e-16, 1, 0], [1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.5, $fn = 64, $fa = 12, $fs = 2) {
text(text = "B", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "E", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = true, convexity = 3, scale = [1, 1], $fn = 64, $fa = 12, $fs = 2) {
group() {
offset(r = 0.3, $fn = 64, $fa = 12, $fs = 2) {
text(text = "G", size = 10, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 64, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
}
}
}
}
}
}
group();

View file

@ -1,15 +1,13 @@
group() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [30, 30, 15], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) {
linear_extrude(height = 30, center = false, convexity = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "M", size = 22, spacing = 1, font = "Bitstream Vera Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 0, $fa = 12, $fs = 2);
}
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [30, 30, 15], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) {
linear_extrude(height = 30, center = false, convexity = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "M", size = 22, spacing = 1, font = "Bitstream Vera Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 0, $fa = 12, $fs = 2);
}
}
}
group();
}
group();

File diff suppressed because one or more lines are too long

View file

@ -1,263 +1,261 @@
group() {
color([1, 0, 0, 1]) {
color([1, 0, 0, 1]) {
group() {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, 12.99038105676], [0, 1, 0, -7.5], [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]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, 12.9904], [0, 1, 0, -7.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0.5, -0.866025, 0, 0], [0.866025, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, 12.99038105676], [0, 1, 0, 7.5], [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]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, 12.9904], [0, 1, 0, 7.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, -12.99038105676], [0, 1, 0, 7.5], [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]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, -12.9904], [0, 1, 0, 7.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, -12.99038105676], [0, 1, 0, -7.5], [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]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
multmatrix([[1, 0, 0, -12.9904], [0, 1, 0, -7.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0.5, 0.866025, 0, 0], [-0.866025, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [8, 8, 8], center = true);
}
}
}
}
}
color([0, 0.501961, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, -25.98076211353], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 25.98076211353], [0, 1, 0, -15], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, -1, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 25.98076211353], [0, 1, 0, 15], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 25.98076211353], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, 25.98076211353], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -25.98076211353], [0, 1, 0, 15], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -25.98076211353], [0, 1, 0, -15], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, -25.98076211353], [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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
}
}
}
color([0, 1, 1, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, -1, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
}
}
}
group();
}
color([0, 0.501961, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, -25.9808], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0.866025, -0.5, 0, 0], [0.5, 0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 25.9808], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0.5, -0.866025, 0, 0], [0.866025, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[2.22045e-16, -1, 0, 0], [1, 2.22045e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 25.9808], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 25.9808], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-0.866025, -0.5, 0, 0], [0.5, -0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, 25.9808], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-0.866025, 0.5, 0, 0], [-0.5, -0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -25.9808], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-2.22045e-16, 1, 0, 0], [-1, -2.22045e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -25.9808], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0.5, 0.866025, 0, 0], [-0.866025, 0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, -25.9808], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0.866025, 0.5, 0, 0], [-0.5, 0.866025, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = true);
}
}
}
}
}
}
}
color([0, 1, 1, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[2.22045e-16, -1, 0, 0], [1, 2.22045e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-2.22045e-16, 1, 0, 0], [-1, -2.22045e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 10, 10], center = true);
cylinder($fn = 40, $fa = 12, $fs = 2, h = 12, r1 = 2, r2 = 2, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 8, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
cube(size = [22, 1.6, 0.4], center = true);
}
}
}
}
}
}
}
}
group();

View file

@ -1,135 +1,133 @@
group() {
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, -100], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, -100], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
group() {
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "Nothing...", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "Nothing...", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
}
}
}
color([1, 1, 0, 1]) {
multmatrix([[1, 0, 0, -50], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "one object", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
}
}
}
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "2 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group() {
group() {
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.5, 0, 0, 0], [0, 1.5, 0, 0], [0, 0, 1.5, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
}
group() {
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.5, 0, 0, 0], [0, 1.5, 0, 0], [0, 0, 1.5, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
}
}
}
}
}
}
color([0, 0.501961, 0, 1]) {
multmatrix([[1, 0, 0, 50], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "3 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group() {
group() {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.33333333333, 0, 0, 0], [0, 1.33333333333, 0, 0], [0, 0, 1.33333333333, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.66666666666, 0, 0, 0], [0, 1.66666666666, 0, 0], [0, 0, 1.66666666666, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
}
group() {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.33333333333, 0, 0, 0], [0, 1.33333333333, 0, 0], [0, 0, 1.33333333333, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.66666666666, 0, 0, 0], [0, 1.66666666666, 0, 0], [0, 0, 1.66666666666, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
}
group() {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 4, r2 = 4, center = false);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.33333333333, 0, 0, 0], [0, 1.33333333333, 0, 0], [0, 0, 1.33333333333, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 4, r2 = 4, center = false);
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.66666666666, 0, 0, 0], [0, 1.66666666666, 0, 0], [0, 0, 1.66666666666, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 4, r2 = 4, center = false);
}
}
}
}
}
}
}
}
group();
}
color([1, 1, 0, 1]) {
multmatrix([[1, 0, 0, -50], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "one object", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
}
}
}
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "2 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group() {
group() {
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.5, 0, 0, 0], [0, 1.5, 0, 0], [0, 0, 1.5, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
}
group() {
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.5, 0, 0, 0], [0, 1.5, 0, 0], [0, 0, 1.5, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
}
}
}
}
}
}
color([0, 0.501961, 0, 1]) {
multmatrix([[1, 0, 0, 50], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
linear_extrude(height = 1, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "3 objects ", size = 6, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group() {
group() {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.33333, 0, 0, 0], [0, 1.33333, 0, 0], [0, 0, 1.33333, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.66667, 0, 0, 0], [0, 1.66667, 0, 0], [0, 0, 1.66667, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = true);
}
}
}
group() {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.33333, 0, 0, 0], [0, 1.33333, 0, 0], [0, 0, 1.33333, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.66667, 0, 0, 0], [0, 1.66667, 0, 0], [0, 0, 1.66667, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 4);
}
}
}
group() {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 4, r2 = 4, center = false);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.33333, 0, 0, 0], [0, 1.33333, 0, 0], [0, 0, 1.33333, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 4, r2 = 4, center = false);
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1.66667, 0, 0, 0], [0, 1.66667, 0, 0], [0, 0, 1.66667, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 4, r2 = 4, center = false);
}
}
}
}
}
}
}
}
group();

View file

@ -1,9 +1,7 @@
group();
group() {
group();
group() {
difference() {
cube(size = [30, 30, 30], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 20);
}
difference() {
cube(size = [30, 30, 30], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 20);
}
}

View file

@ -1,22 +1,20 @@
group();
group() {
group();
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 25);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 25);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
group() {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
group() {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
}

View file

@ -1,22 +1,20 @@
group();
group() {
group();
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 25);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 25);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
group() {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
group() {
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
}

View file

@ -1,23 +1,21 @@
group();
group() {
group();
group() {
intersection() {
difference() {
union() {
cube(size = [30, 30, 30], center = true);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
cube(size = [15, 15, 50], center = true);
}
}
union() {
cube(size = [50, 10, 10], center = true);
cube(size = [10, 50, 10], center = true);
cube(size = [10, 10, 50], center = true);
intersection() {
difference() {
union() {
cube(size = [30, 30, 30], center = true);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
cube(size = [15, 15, 50], center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 20, r2 = 5, center = true);
union() {
cube(size = [50, 10, 10], center = true);
cube(size = [10, 50, 10], center = true);
cube(size = [10, 10, 50], center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 20, r2 = 5, center = true);
}
}
}

View file

@ -1,18 +1,16 @@
group();
group() {
group();
group() {
difference() {
union() {
cube(size = [30, 30, 30], center = true);
cube(size = [40, 15, 15], center = true);
cube(size = [15, 40, 15], center = true);
cube(size = [15, 15, 40], center = true);
}
union() {
cube(size = [50, 10, 10], center = true);
cube(size = [10, 50, 10], center = true);
cube(size = [10, 10, 50], center = true);
}
difference() {
union() {
cube(size = [30, 30, 30], center = true);
cube(size = [40, 15, 15], center = true);
cube(size = [15, 40, 15], center = true);
cube(size = [15, 15, 40], center = true);
}
union() {
cube(size = [50, 10, 10], center = true);
cube(size = [10, 50, 10], center = true);
cube(size = [10, 10, 50], center = true);
}
}
}

View file

@ -1,9 +1,7 @@
group();
group() {
group();
group() {
difference() {
cube(size = [30, 30, 30], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 20);
}
difference() {
cube(size = [30, 30, 30], center = true);
sphere($fn = 0, $fa = 12, $fs = 2, r = 20);
}
}

View file

@ -1,45 +1,43 @@
group();
group() {
group();
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -120], [0, 0, 0, 1]]) {
difference() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 100, r2 = 100, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 80, r2 = 80, center = false);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 35], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -120], [0, 0, 0, 1]]) {
difference() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 100, r2 = 100, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 80, r2 = 80, center = false);
}
group() {
group();
multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [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.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.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, 0], [0, 1, 0, -80], [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.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.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);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 35], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 200], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 120, r2 = 0, center = false);
}
group() {
group();
multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [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]]) {
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]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
group();
multmatrix([[1, 0, 0, 0], [0, 1, 0, -80], [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]]) {
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]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 10, r2 = 10, center = false);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 200], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 120, r2 = 0, center = false);
}
}
}

View file

@ -1,254 +1,84 @@
group();
group() {
group();
group() {
difference() {
cube(size = [100, 100, 100], center = true);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
difference() {
cube(size = [100, 100, 100], center = true);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, -1, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, -1, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, -1, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
@ -257,114 +87,282 @@ group() {
}
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
}
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
render(convexity = 2) {
difference() {
cube(size = [20, 20, 150], center = true);
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 10, r2 = 10, center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
}
}
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[0, -1, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 0, 1, 0], [0, -1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, 1, 0], [0, -1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
}
}
}

View file

@ -1,50 +1,48 @@
group() {
group();
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
group() {
difference() {
rotate_extrude(angle = 360, convexity = 3, $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "dorn", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout1", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
group();
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
group() {
difference() {
rotate_extrude(angle = 360, convexity = 3, $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "dorn", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout1", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout2", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
}
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout2", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
}
}
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout1", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
}
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
intersection() {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout1", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout2", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
}
multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = false, convexity = 2, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example007.dxf", layer = "cutout2", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}

View file

@ -1,38 +1,36 @@
group() {
group();
difference() {
intersection() {
multmatrix([[1, 0, 0, -25], [0, 1, 0, -25], [0, 0, 1, -25], [0, 0, 0, 1]]) {
group();
difference() {
intersection() {
multmatrix([[1, 0, 0, -25], [0, 1, 0, -25], [0, 0, 1, -25], [0, 0, 0, 1]]) {
linear_extrude(height = 50, center = false, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "G", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -25], [0, 1, 0, -125], [0, 0, 1, -25], [0, 0, 0, 1]]) {
linear_extrude(height = 50, center = false, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "G", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -25], [0, 1, 0, -125], [0, 0, 1, -25], [0, 0, 0, 1]]) {
linear_extrude(height = 50, center = false, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "E", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -125], [0, 1, 0, -125], [0, 0, 1, -25], [0, 0, 0, 1]]) {
linear_extrude(height = 50, center = false, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "B", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
import(file = "example008.dxf", layer = "E", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
intersection() {
multmatrix([[1, 0, 0, -125], [0, 1, 0, -25], [0, 0, 1, -26], [0, 0, 0, 1]]) {
linear_extrude(height = 52, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "X", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -125], [0, 1, 0, -125], [0, 0, 1, -25], [0, 0, 0, 1]]) {
linear_extrude(height = 50, center = false, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "B", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -125], [0, 1, 0, -25], [0, 0, 1, -26], [0, 0, 0, 1]]) {
linear_extrude(height = 52, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "X", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
}
intersection() {
multmatrix([[1, 0, 0, -125], [0, 1, 0, -25], [0, 0, 1, -26], [0, 0, 0, 1]]) {
linear_extrude(height = 52, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "X", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -125], [0, 1, 0, -25], [0, 0, 1, -26], [0, 0, 0, 1]]) {
linear_extrude(height = 52, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example008.dxf", layer = "X", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}

View file

@ -1,26 +1,24 @@
group() {
group();
% linear_extrude(height = 22, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "body", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
% group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "plate", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -12], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "plate", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
group();
%linear_extrude(height = 22, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "body", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
%group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "plate", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
intersection() {
linear_extrude(height = 20, center = true, convexity = 10, twist = -57.5288, slices = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "fan_top", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
}
rotate_extrude(angle = 360, convexity = 10, $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "fan_side", origin = [0, -40], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1447128393);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -12], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "plate", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
intersection() {
linear_extrude(height = 20, center = true, convexity = 10, twist = -57.5288, slices = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "fan_top", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
rotate_extrude(angle = 360, convexity = 10, $fn = 0, $fa = 12, $fs = 2) {
import(file = "example009.dxf", layer = "fan_side", origin = [0, -40], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}

View file

@ -1,9 +1,7 @@
group() {
group();
intersection() {
surface(file = "example010.dat", center = true, invert = false);
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, invert = false);
}
group();
intersection() {
surface(file = "example010.dat", center = true, invert = false, timestamp = 1445017640);
multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
surface(file = "example010.dat", center = true, invert = false, timestamp = 1445017640);
}
}

View file

@ -1,4 +1,2 @@
group() {
group();
polyhedron(points = [[10, 0, 0], [0, 10, 0], [-10, 0, 0], [0, -10, 0], [0, 0, 10]], faces = [[0, 1, 2, 3], [4, 1, 0], [4, 2, 1], [4, 3, 2], [4, 0, 3]], convexity = 1);
}
group();
polyhedron(points = [[10, 0, 0], [0, 10, 0], [-10, 0, 0], [0, -10, 0], [0, 0, 10]], faces = [[0, 1, 2, 3], [4, 1, 0], [4, 2, 1], [4, 3, 2], [4, 0, 3]], convexity = 1);

View file

@ -1,11 +1,9 @@
group() {
group();
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 20);
multmatrix([[1, 0, 0, -2.92], [0, 1, 0, 0.5], [0, 0, 1, 20], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]) {
import(file = "example012.stl", layer = "", origin = [0, 0], scale = 1, convexity = 5, $fn = 0, $fa = 12, $fs = 2);
}
group();
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 20);
multmatrix([[1, 0, 0, -2.92], [0, 1, 0, 0.5], [0, 0, 1, 20], [0, 0, 0, 1]]) {
multmatrix([[-1, 1.22465e-16, 1.49976e-32, 0], [1.22465e-16, 1, 1.22465e-16, 0], [0, 1.22465e-16, -1, 0], [0, 0, 0, 1]]) {
import(file = "example012.stl", layer = "", origin = [0, 0], scale = 1, convexity = 5, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}

View file

@ -1,18 +1,16 @@
group() {
group();
intersection() {
group();
intersection() {
linear_extrude(height = 100, center = true, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = true, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = true, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = true, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 100, center = true, convexity = 3, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}

View file

@ -1,17 +1,15 @@
group() {
group();
intersection() {
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.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.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.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);
}
group();
intersection() {
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]]) {
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]]) {
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]]) {
cube(size = [100, 20, 20], center = true);
}
}

View file

@ -1,31 +1,29 @@
group();
group() {
group();
group() {
difference() {
multmatrix([[1, 0, 0, -35], [0, 1, 0, -35], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
union() {
difference() {
square(size = [100, 100], center = true);
square(size = [50, 50], center = true);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [15, 15], center = true);
}
difference() {
multmatrix([[1, 0, 0, -35], [0, 1, 0, -35], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
union() {
difference() {
square(size = [100, 100], center = true);
square(size = [50, 50], center = true);
}
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([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [15, 15], center = true);
}
}
}
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);
multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 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);
}
}
}
}
import(file = "example009.dxf", layer = "body", origin = [0, 0], scale = 2, convexity = 6, $fn = 0, $fa = 12, $fs = 2);
multmatrix([[0.707107, 0.707107, 0, 0], [-0.707107, 0.707107, 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);
}
}
}
import(file = "example009.dxf", layer = "body", origin = [0, 0], scale = 2, convexity = 6, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}

View file

@ -1,82 +1,80 @@
group() {
group();
difference() {
group() {
cube(size = [65, 28, 28], center = true);
group();
difference() {
group() {
cube(size = [65, 28, 28], center = true);
}
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
}
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2);
}
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
}
multmatrix([[1, 0, 0, 0], [0, -1, -1.22465e-16, 0], [0, 1.22465e-16, -1, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2);
}
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
}
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2);
}
multmatrix([[1, 0, 0, 0], [0, -1.83697e-16, 1, 0], [0, -1, -1.83697e-16, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 0, 1, 0], [0, -1, 0, 0], [0, 0, 0, 1]]) {
render(convexity = 12) {
difference() {
group() {
difference() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) {
cube(size = [60, 28, 14], center = true);
}
cube(size = [8, 32, 32], center = true);
}
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2);
}
group() {
multmatrix([[1, 0, 0, -18], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}

View file

@ -1,98 +1,96 @@
group();
group();
group();
group() {
group();
group();
group();
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 74], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = false, convexity = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
difference() {
circle($fn = 0, $fa = 12, $fs = 2, r = 47);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 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([[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([[1, 0, 0, 0], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 10], center = true);
}
}
}
circle($fn = 0, $fa = 12, $fs = 2, r = 25);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 74], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = false, convexity = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
difference() {
circle($fn = 0, $fa = 12, $fs = 2, r = 102);
circle($fn = 0, $fa = 12, $fs = 2, r = 47);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 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([[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([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 15], center = true);
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([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 15], center = true);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 10], center = true);
}
}
}
circle($fn = 0, $fa = 12, $fs = 2, r = 75);
circle($fn = 0, $fa = 12, $fs = 2, r = 25);
}
}
}
color([0.7, 0.7, 1, 1]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 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([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
union() {
difference() {
polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1);
multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
}
multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [9, 12], center = false);
}
multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
}
linear_extrude(height = 6, center = false, convexity = 4, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
difference() {
circle($fn = 0, $fa = 12, $fs = 2, r = 102);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 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([[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([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [6, 15], center = true);
}
}
}
circle($fn = 0, $fa = 12, $fs = 2, r = 75);
}
}
}
color([0.7, 0.7, 1, 1]) {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 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([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
union() {
difference() {
polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1);
multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
}
multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [9, 12], center = false);
}
multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
}
@ -101,41 +99,41 @@ group() {
}
}
}
multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -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([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
union() {
difference() {
polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1);
multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
}
multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [9, 12], center = false);
}
multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
}
multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -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([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
union() {
difference() {
polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1);
multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
}
multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [9, 12], center = false);
}
multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
}
@ -144,41 +142,41 @@ group() {
}
}
}
multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -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([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
union() {
difference() {
polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1);
multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
}
multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [9, 12], center = false);
}
multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
}
multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -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([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 6, center = true, convexity = 10, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
group() {
union() {
difference() {
polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1);
multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
}
multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [9, 12], center = false);
}
multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
circle($fn = 0, $fa = 12, $fs = 2, r = 6);
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12, 12], center = false);
}
}
}
@ -189,25 +187,25 @@ group() {
}
}
}
% multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
group() {
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
square(size = [25, 68], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 68], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
square(size = [25, 25], center = false);
multmatrix([[1, 0, 0, 0], [0, 0.7, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 25);
}
}
% multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) {
group() {
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
square(size = [25, 68], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 68], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
square(size = [25, 25], center = false);
multmatrix([[1, 0, 0, 0], [0, 0.7, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 25);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 93], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -12.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12.5, 25], center = false);
}
circle($fn = 0, $fa = 12, $fs = 2, r = 12.5);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 93], [0, 0, 1, 0], [0, 0, 0, 1]]) {
intersection() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -12.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [12.5, 25], center = false);
}
circle($fn = 0, $fa = 12, $fs = 2, r = 12.5);
}
}
}

View file

@ -1,117 +1,115 @@
group();
group() {
group();
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -150], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -150], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
group() {
multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
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.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
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.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);
}
multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
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]]) {
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]]) {
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]]) {
cube(size = [50, 50, 50], center = true);
}
}
multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
}
multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
group() {
multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
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.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
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.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);
}
multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
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]]) {
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]]) {
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]]) {
cube(size = [50, 50, 50], center = true);
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
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.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
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.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);
}
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]]) {
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]]) {
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]]) {
cube(size = [50, 50, 50], center = true);
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 150], [0, 0, 1, 0], [0, 0, 0, 1]]) {
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 150], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
group() {
multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
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.70710678118, -0.70710678118, 0], [0, 0.70710678118, 0.70710678118, 0], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
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.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);
}
multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 30);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true);
}
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]]) {
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]]) {
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]]) {
cube(size = [50, 50, 50], center = true);
}
}
}

View file

@ -1,128 +1,126 @@
group();
group() {
group();
group() {
multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 45, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -95], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 46.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -90], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 48, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -85], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 49.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -80], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 51, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -75], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 52.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -70], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 54, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -65], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -60], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 57, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -55], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 58.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 60, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -45], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 59, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -40], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 58, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -35], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 57, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 56, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 54, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.05, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 56.1, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 57.15, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 58.2, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 59.25, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 60.3, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 61.35, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.4, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 63.45, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 64.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 35], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 65.55, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 66.6, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 45], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 67.65, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 68.7, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 69.75, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 60], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 70.8, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 65], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 71.85, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 70], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 72.9, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 75], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 73.95, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 80], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 75, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 85], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 70.0714, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 90], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 65.1429, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 95], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 60.2143, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.2857, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 45, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -95], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 46.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -90], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 48, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -85], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 49.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -80], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 51, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -75], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 52.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -70], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 54, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -65], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -60], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 57, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -55], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 58.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 60, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -45], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 59, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -40], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 58, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -35], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 57, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 56, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 54, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.05, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 56.1, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 57.15, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 58.2, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 59.25, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 60.3, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 61.35, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.4, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 63.45, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 64.5, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 35], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 65.55, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 66.6, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 45], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 67.65, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 68.7, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 69.75, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 60], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 70.8, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 65], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 71.85, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 70], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 72.9, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 75], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 73.95, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 80], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 75, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 85], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 70.0714, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 90], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 65.1429, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 95], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 60.2143, r1 = 6, r2 = 2, center = false);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.2857, r1 = 6, r2 = 2, center = false);
}
}

View file

@ -1,109 +1,107 @@
group() {
group();
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 100, center = false, convexity = 8, twist = 411.429, slices = 34, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
circle($fn = 0, $fa = 12, $fs = 2, r = 20);
group();
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 100, center = false, convexity = 8, twist = 411.429, slices = 34, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
circle($fn = 0, $fa = 12, $fs = 2, r = 20);
group() {
group();
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.62391868272, 3.33781400934], [13.51453301853, 6.50825608676], [15.63662964936, 12.46979603717], [31.27325929872, 24.93959207434]], paths = undef, convexity = 1);
}
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);
}
group();
group() {
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.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);
}
group();
group() {
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.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);
}
group();
group() {
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);
}
group();
group() {
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);
}
group();
group() {
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.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);
}
group();
group() {
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.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([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
cylinder($fn = 6, $fa = 12, $fs = 2, h = 20, r1 = 30, r2 = 30, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 40, center = false, convexity = 3, twist = 164.571, slices = 13, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
circle($fn = 0, $fa = 12, $fs = 2, r = 21);
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
difference() {
cylinder($fn = 6, $fa = 12, $fs = 2, h = 20, r1 = 30, r2 = 30, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 40, center = false, convexity = 3, twist = 164.571, slices = 13, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
circle($fn = 0, $fa = 12, $fs = 2, r = 21);
group() {
group();
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.5988465949, 3.5603349433], [14.41550188643, 6.94213982588], [16.41846113182, 13.09328583903], [32.83692226365, 26.18657167806]], paths = undef, convexity = 1);
}
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);
}
group();
group() {
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.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);
}
group();
group() {
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.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);
}
group();
group() {
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);
}
group();
group() {
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);
}
group();
group() {
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.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);
}
group();
group() {
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.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);
}
}
}
@ -113,121 +111,121 @@ group() {
}
}
}
group() {
linear_extrude(height = 100, center = false, convexity = 5, twist = 1500, slices = 79, scale = [1, 1], $fn = 19.2, $fa = 12, $fs = 2) {
}
group() {
linear_extrude(height = 100, center = false, convexity = 5, twist = 1500, slices = 79, scale = [1, 1], $fn = 19.2, $fa = 12, $fs = 2) {
group() {
group() {
group() {
group() {
polygon(points = [[100, 0], [90.10870717256, 30.5877844104], [99.27731872645, 33.70010865023]], paths = undef, convexity = 1);
}
group();
group();
polygon(points = [[100, 0], [90.1087, 30.5878], [99.2773, 33.7001]], paths = undef, convexity = 1);
}
group();
group();
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[99.27731872645, 33.70010865023], [90.10870717256, 30.5877844104], [74.08779492859, 56.84956452855], [84.58287312965, 64.90272127318]], paths = undef, convexity = 1);
}
polygon(points = [[99.2773, 33.7001], [90.1087, 30.5878], [74.0878, 56.8496], [84.5829, 64.9027]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[84.58287312965, 64.90272127318], [74.08779492859, 56.84956452855], [51.22010456048, 76.65630364955], [59.89394204343, 89.63761881095]], paths = undef, convexity = 1);
}
polygon(points = [[84.5829, 64.9027], [74.0878, 56.8496], [51.2201, 76.6563], [59.8939, 89.6376]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[59.89394204343, 89.63761881095], [51.22010456048, 76.65630364955], [23.64046582983, 88.22741959152], [28.12334319067, 104.95774566628]], paths = undef, convexity = 1);
}
polygon(points = [[59.8939, 89.6376], [51.2201, 76.6563], [23.6405, 88.2274], [28.1233, 104.958]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[28.12334319067, 104.95774566628], [23.64046582983, 88.22741959152], [-5.93400968795, 90.53549252778], [-7.14661615807, 109.03629211993]], paths = undef, convexity = 1);
}
polygon(points = [[28.1233, 104.958], [23.6405, 88.2274], [-5.93401, 90.5355], [-7.14662, 109.036]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-7.14661615807, 109.03629211993], [-5.93400968795, 90.53549252778], [-34.56302683546, 83.44252814283], [-41.97365963755, 101.33337835942]], paths = undef, convexity = 1);
}
polygon(points = [[-7.14662, 109.036], [-5.93401, 90.5355], [-34.563, 83.4425], [-41.9737, 101.333]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-41.97365963755, 101.33337835942], [-34.56302683546, 83.44252814283], [-59.39283755471, 67.72455141159], [-72.4763254653, 82.6434100842]], paths = undef, convexity = 1);
}
polygon(points = [[-41.9737, 101.333], [-34.563, 83.4425], [-59.3928, 67.7246], [-72.4763, 82.6434]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-72.4763254653, 82.6434100842], [-59.39283755471, 67.72455141159], [-77.94228634059, 45], [-95.26279441628, 55]], paths = undef, convexity = 1);
}
polygon(points = [[-72.4763, 82.6434], [-59.3928, 67.7246], [-77.9423, 45], [-95.2628, 55]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-95.26279441628, 55], [-77.94228634059, 45], [-88.34760075969, 17.57343041942], [-107.80945532094, 21.4446339838]], paths = undef, convexity = 1);
}
polygon(points = [[-95.2628, 55], [-77.9423, 45], [-88.3476, 17.5734], [-107.809, 21.4446]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-107.80945532094, 21.4446339838], [-88.34760075969, 17.57343041942], [-89.54486254542, -11.78880480022], [-108.74410972934, -14.31643364378]], paths = undef, convexity = 1);
}
polygon(points = [[-107.809, 21.4446], [-88.3476, 17.5734], [-89.5449, -11.7888], [-108.744, -14.3164]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-108.74410972934, -14.31643364378], [-89.54486254542, -11.78880480022], [-81.37304131717, -40.12874312782], [-98.00150698935, -48.32899491597]], paths = undef, convexity = 1);
}
polygon(points = [[-108.744, -14.3164], [-89.5449, -11.7888], [-81.373, -40.1287], [-98.0015, -48.329]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-98.00150698935, -48.32899491597], [-81.37304131717, -40.12874312782], [-64.58695376169, -64.58695376169], [-76.83440247561, -76.83440247561]], paths = undef, convexity = 1);
}
polygon(points = [[-98.0015, -48.329], [-81.373, -40.1287], [-64.587, -64.587], [-76.8344, -76.8344]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-76.83440247561, -76.83440247561], [-64.58695376169, -64.58695376169], [-40.77625404048, -82.68606355865], [-47.68148400331, -96.68848474788]], paths = undef, convexity = 1);
}
polygon(points = [[-76.8344, -76.8344], [-64.587, -64.587], [-40.7763, -82.6861], [-47.6815, -96.6885]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-47.68148400331, -96.68848474788], [-40.77625404048, -82.68606355865], [-12.18926961151, -92.58669478281], [-13.91596883249, -105.70227749195]], paths = undef, convexity = 1);
}
polygon(points = [[-47.6815, -96.6885], [-40.7763, -82.6861], [-12.1893, -92.5867], [-13.916, -105.702]], paths = undef, convexity = 1);
}
}
group() {
group();
group();
group() {
group();
group();
group() {
polygon(points = [[-13.91596883249, -105.70227749195], [-12.18926961151, -92.58669478281], [18.56455524139, -93.33032171881], [20.45350916183, -102.82673436183]], paths = undef, convexity = 1);
}
polygon(points = [[-13.916, -105.702], [-12.1893, -92.5867], [18.5646, -93.3303], [20.4535, -102.827]], paths = undef, convexity = 1);
}
}
group() {
group();
group() {
group();
group() {
polygon(points = [[20.45350916183, -102.82673436183], [18.56455524139, -93.33032171881], [50, -86.60254037844]], paths = undef, convexity = 1);
}
group();
polygon(points = [[20.4535, -102.827], [18.5646, -93.3303], [50, -86.6025]], paths = undef, convexity = 1);
}
group();
}
}
}

View file

@ -1,267 +1,265 @@
group() {
group();
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = false, convexity = 0) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
group();
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 0.5, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
projection(cut = false, convexity = 0) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
% group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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.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);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
}
% group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
% group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
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([[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]]) {
group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}
}
}
}
}
}
}
% group() {
difference() {
sphere($fn = 0, $fa = 30, $fs = 2, r = 25);
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 30, $fs = 2, h = 62.5, r1 = 12.5, r2 = 6.25, center = true);
}
}
}
}

View file

@ -1,126 +1,124 @@
group() {
group();
multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group();
multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [10, 30, 40], center = true);
cube(size = [20, 20, 40], center = true);
group() {
cube(size = [10, 30, 40], center = true);
cube(size = [20, 20, 40], center = true);
group() {
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [20, 20, 30], center = true);
cube(size = [10, 30, 30], center = true);
cube(size = [10, 20, 40], center = true);
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
}
group() {
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -10], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -10], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 10], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 10], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
}
group() {
multmatrix([[0, 1, 0, 0], [0, 0, -1, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -15], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[0, 1, 0, 0], [0, 0, -1, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[0, 1, 0, 0], [0, 0, -1, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 15], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[0, 1, 0, 0], [0, 0, -1, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 15], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
group() {
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
cube(size = [20, 20, 30], center = true);
cube(size = [10, 30, 30], center = true);
cube(size = [10, 20, 40], center = true);
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true);
}
}
}
group() {
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -10], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -10], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 10], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 10], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true);
}
}
}
group() {
multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -15], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, -15], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 15], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 15], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true);
}
}
}
}
group() {
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, -15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 15], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 5);
}
}
}

View file

@ -1,330 +1,328 @@
group();
group() {
group();
group() {
group() {
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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 2], [6, 2], [6, 1], [3, 2], [3, 5], [5, 5], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1);
}
multmatrix([[0.5, -0.866025, 0, 0], [0.866025, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 2], [6, 2], [6, 1], [3, 2], [3, 5], [5, 5], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[0.866025, -0.5, 0, 0], [0.5, 0.866025, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 3], [1, 3], [1, 6], [3, 6], [3, 4], [4, 4], [4, 5], [5, 5], [5, 4], [6, 4], [6, 6], [8, 6], [8, 3], [7, 3], [7, 1], [5, 1], [5, 2], [4, 2], [4, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 3], [1, 3], [1, 6], [3, 6], [3, 4], [4, 4], [4, 5], [5, 5], [5, 4], [6, 4], [6, 6], [8, 6], [8, 3], [7, 3], [7, 1], [5, 1], [5, 2], [4, 2], [4, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 2], [6, 2], [6, 1], [3, 2], [3, 5], [5, 5], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 2], [6, 2], [6, 1], [3, 2], [3, 5], [5, 5], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 7], [3, 7], [3, 5], [6, 5], [6, 4], [7, 4], [7, 1], [5, 1], [5, 4], [3, 4], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 7], [3, 7], [3, 5], [6, 5], [6, 4], [7, 4], [7, 1], [5, 1], [5, 4], [3, 4], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 4], [5, 4], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 4], [5, 4], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[3, 1], [3, 4], [2, 4], [2, 5], [3, 5], [3, 6], [4, 6], [4, 7], [7, 7], [7, 6], [5, 6], [5, 5], [7, 5], [7, 4], [5, 4], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[0.866025, 0.5, 0, 0], [-0.5, 0.866025, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[3, 1], [3, 4], [2, 4], [2, 5], [3, 5], [3, 6], [4, 6], [4, 7], [7, 7], [7, 6], [5, 6], [5, 5], [7, 5], [7, 4], [5, 4], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 2], [6, 2], [6, 1], [3, 2], [3, 5], [5, 5], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 2], [6, 2], [6, 1], [3, 2], [3, 5], [5, 5], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 6], [3, 6], [3, 2], [5, 2], [5, 6], [7, 6], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 6], [3, 6], [3, 2], [5, 2], [5, 6], [7, 6], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 4], [5, 4], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 4], [5, 4], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[3, 1], [3, 4], [2, 4], [2, 5], [3, 5], [3, 6], [4, 6], [4, 7], [7, 7], [7, 6], [5, 6], [5, 5], [7, 5], [7, 4], [5, 4], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[0.5, 0.866025, 0, 0], [-0.866025, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[3, 1], [3, 4], [2, 4], [2, 5], [3, 5], [3, 6], [4, 6], [4, 7], [7, 7], [7, 6], [5, 6], [5, 5], [7, 5], [7, 4], [5, 4], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
}
}
multmatrix([[0, 1, 0, 0], [-1, 0, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[1, 1], [1, 2], [5, 2], [5, 3], [2, 3], [2, 4], [1, 4], [1, 5], [2, 5], [2, 6], [7, 6], [7, 5], [3, 5], [3, 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]], convexity = 1);
}
}
multmatrix([[6.12323e-17, 1, 0, 0], [-1, 6.12323e-17, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[1, 1], [1, 2], [5, 2], [5, 3], [2, 3], [2, 4], [1, 4], [1, 5], [2, 5], [2, 6], [7, 6], [7, 5], [3, 5], [3, 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]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [2, 4], [2, 5], [1, 5], [1, 6], [3, 6], [3, 5], [5, 5], [5, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [6, 3], [6, 2], [7, 2], [7, 1], [5, 1], [5, 2], [3, 2], [3, 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);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [2, 4], [2, 5], [1, 5], [1, 6], [3, 6], [3, 5], [5, 5], [5, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [6, 3], [6, 2], [7, 2], [7, 1], [5, 1], [5, 2], [3, 2], [3, 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);
}
}
}
}
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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[1, 1], [1, 2], [5, 2], [5, 3], [2, 3], [2, 4], [1, 4], [1, 5], [2, 5], [2, 6], [7, 6], [7, 5], [3, 5], [3, 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]], convexity = 1);
}
}
multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[1, 1], [1, 2], [5, 2], [5, 3], [2, 3], [2, 4], [1, 4], [1, 5], [2, 5], [2, 6], [7, 6], [7, 5], [3, 5], [3, 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]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[-0.866025, 0.5, 0, 0], [-0.5, -0.866025, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 0], [1, 1], [5, 1], [5, 2], [2, 2], [2, 3], [1, 3], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 1], [6, 1], [6, 0], [3, 3], [3, 5], [5, 5], [5, 3]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 0], [1, 1], [5, 1], [5, 2], [2, 2], [2, 3], [1, 3], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 1], [6, 1], [6, 0], [3, 3], [3, 5], [5, 5], [5, 3]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 7], [3, 7], [3, 5], [6, 5], [6, 4], [7, 4], [7, 1], [5, 1], [5, 4], [3, 4], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 7], [3, 7], [3, 5], [6, 5], [6, 4], [7, 4], [7, 1], [5, 1], [5, 4], [3, 4], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1);
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
}
}
multmatrix([[-1, 0, 0, 0], [0, -1, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[-1, 1.22465e-16, 0, 0], [-1.22465e-16, -1, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 4], [2, 4], [2, 5], [5, 5], [5, 2], [6, 2], [6, 1], [3, 6], [3, 7], [5, 7], [5, 6]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[-0.866025, -0.5, 0, 0], [0.5, -0.866025, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 6], [2, 6], [2, 7], [5, 7], [5, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 6], [2, 6], [2, 7], [5, 7], [5, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, -4], [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) {
polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
}
}
multmatrix([[0, -1, 0, 0], [1, 0, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[-1.83697e-16, -1, 0, 0], [1, -1.83697e-16, 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]]) {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
polygon(points = [[4, 1], [4, 2], [3, 2], [3, 5], [1, 5], [1, 6], [3, 6], [3, 7], [5, 7], [5, 6], [7, 6], [7, 5], [5, 5], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 3], [1, 3], [1, 6], [3, 6], [3, 4], [4, 4], [4, 5], [5, 5], [5, 4], [6, 4], [6, 6], [8, 6], [8, 3], [7, 3], [7, 1], [5, 1], [5, 2], [4, 2], [4, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 3], [1, 3], [1, 6], [3, 6], [3, 4], [4, 4], [4, 5], [5, 5], [5, 4], [6, 4], [6, 6], [8, 6], [8, 3], [7, 3], [7, 1], [5, 1], [5, 2], [4, 2], [4, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1);
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 16], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 6], [2, 6], [2, 7], [5, 7], [5, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [3, 2], [3, 6], [2, 6], [2, 7], [5, 7], [5, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1);
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 32], [0, 1, 0, -4], [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) {
polygon(points = [[3, 1], [3, 2], [2, 2], [2, 3], [1, 3], [1, 6], [3, 6], [3, 3], [5, 3], [5, 6], [7, 6], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]], convexity = 1);
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, -4], [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) {
polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1);
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,257 +1,255 @@
group() {
group();
color([1, 0, 0, 1]) {
group() {
multmatrix([[1, 0, 0, -100], [0, 1, 0, -49], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -95], [0, 1, 0, -46.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -90], [0, 1, 0, -44], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -85], [0, 1, 0, -41.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -80], [0, 1, 0, -39], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -75], [0, 1, 0, -36.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -70], [0, 1, 0, -34], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -65], [0, 1, 0, -31.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -60], [0, 1, 0, -29], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -55], [0, 1, 0, -26.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -24], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -45], [0, 1, 0, -21.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -40], [0, 1, 0, -19], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -35], [0, 1, 0, -16.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, -14], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, -11.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, -6.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, -1.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 3.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 10], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 8.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 13.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 16], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 35], [0, 1, 0, 18.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, 21], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 45], [0, 1, 0, 23.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 26], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 28.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 60], [0, 1, 0, 31], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 65], [0, 1, 0, 33.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 70], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 75], [0, 1, 0, 38.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 80], [0, 1, 0, 41], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 85], [0, 1, 0, 43.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 90], [0, 1, 0, 46], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 95], [0, 1, 0, 48.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 51], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
group();
color([1, 0, 0, 1]) {
group() {
multmatrix([[1, 0, 0, -100], [0, 1, 0, -49], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
}
color([0, 0.501961, 0, 1]) {
group() {
multmatrix([[1, 0, 0, -105], [0, 1, 0, 82.25], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -98.75], [0, 1, 0, 68.265625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -92.5], [0, 1, 0, 55.0625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -86.25], [0, 1, 0, 42.640625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -80], [0, 1, 0, 31], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -73.75], [0, 1, 0, 20.140625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -67.5], [0, 1, 0, 10.0625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -61.25], [0, 1, 0, 0.765625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -55], [0, 1, 0, -7.75], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -48.75], [0, 1, 0, -15.484375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -42.5], [0, 1, 0, -22.4375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -36.25], [0, 1, 0, -28.609375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, -34], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -23.75], [0, 1, 0, -38.609375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -17.5], [0, 1, 0, -42.4375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -11.25], [0, 1, 0, -45.484375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, -47.75], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 1.25], [0, 1, 0, -49.234375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, -49.9375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 13.75], [0, 1, 0, -49.859375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, -49], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 26.25], [0, 1, 0, -47.359375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 32.5], [0, 1, 0, -44.9375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 38.75], [0, 1, 0, -41.734375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 45], [0, 1, 0, -37.75], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 51.25], [0, 1, 0, -32.984375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 57.5], [0, 1, 0, -27.4375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 63.75], [0, 1, 0, -21.109375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 70], [0, 1, 0, -14], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 76.25], [0, 1, 0, -6.109375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 82.5], [0, 1, 0, 2.5625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 88.75], [0, 1, 0, 12.015625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 95], [0, 1, 0, 22.25], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 101.25], [0, 1, 0, 33.265625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 107.5], [0, 1, 0, 45.0625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 113.75], [0, 1, 0, 57.640625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 120], [0, 1, 0, 71], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 126.25], [0, 1, 0, 85.140625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 132.5], [0, 1, 0, 100.0625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 138.75], [0, 1, 0, 115.765625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 145], [0, 1, 0, 132.25], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -95], [0, 1, 0, -46.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -90], [0, 1, 0, -44], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -85], [0, 1, 0, -41.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -80], [0, 1, 0, -39], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -75], [0, 1, 0, -36.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -70], [0, 1, 0, -34], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -65], [0, 1, 0, -31.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -60], [0, 1, 0, -29], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -55], [0, 1, 0, -26.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -50], [0, 1, 0, -24], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -45], [0, 1, 0, -21.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -40], [0, 1, 0, -19], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -35], [0, 1, 0, -16.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, -14], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -25], [0, 1, 0, -11.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -20], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -15], [0, 1, 0, -6.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -10], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, -1.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 3.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 10], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 15], [0, 1, 0, 8.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 13.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 30], [0, 1, 0, 16], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 35], [0, 1, 0, 18.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 40], [0, 1, 0, 21], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 45], [0, 1, 0, 23.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 50], [0, 1, 0, 26], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 55], [0, 1, 0, 28.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 60], [0, 1, 0, 31], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 65], [0, 1, 0, 33.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 70], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 75], [0, 1, 0, 38.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 80], [0, 1, 0, 41], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 85], [0, 1, 0, 43.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 90], [0, 1, 0, 46], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 95], [0, 1, 0, 48.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 51], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
}
}
color([0, 0.501961, 0, 1]) {
group() {
multmatrix([[1, 0, 0, -105], [0, 1, 0, 82.25], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -98.75], [0, 1, 0, 68.2656], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -92.5], [0, 1, 0, 55.0625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -86.25], [0, 1, 0, 42.6406], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -80], [0, 1, 0, 31], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -73.75], [0, 1, 0, 20.1406], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -67.5], [0, 1, 0, 10.0625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -61.25], [0, 1, 0, 0.765625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -55], [0, 1, 0, -7.75], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -48.75], [0, 1, 0, -15.4844], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -42.5], [0, 1, 0, -22.4375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -36.25], [0, 1, 0, -28.6094], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -30], [0, 1, 0, -34], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -23.75], [0, 1, 0, -38.6094], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -17.5], [0, 1, 0, -42.4375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -11.25], [0, 1, 0, -45.4844], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, -5], [0, 1, 0, -47.75], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 1.25], [0, 1, 0, -49.2344], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, -49.9375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 13.75], [0, 1, 0, -49.8594], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 20], [0, 1, 0, -49], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 26.25], [0, 1, 0, -47.3594], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 32.5], [0, 1, 0, -44.9375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 38.75], [0, 1, 0, -41.7344], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 45], [0, 1, 0, -37.75], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 51.25], [0, 1, 0, -32.9844], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 57.5], [0, 1, 0, -27.4375], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 63.75], [0, 1, 0, -21.1094], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 70], [0, 1, 0, -14], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 76.25], [0, 1, 0, -6.10938], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 82.5], [0, 1, 0, 2.5625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 88.75], [0, 1, 0, 12.0156], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 95], [0, 1, 0, 22.25], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 101.25], [0, 1, 0, 33.2656], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 107.5], [0, 1, 0, 45.0625], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 113.75], [0, 1, 0, 57.6406], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 120], [0, 1, 0, 71], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 126.25], [0, 1, 0, 85.1406], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 132.5], [0, 1, 0, 100.062], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 138.75], [0, 1, 0, 115.766], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 145], [0, 1, 0, 132.25], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
}
}

View file

@ -1,17 +1,15 @@
group() {
group();
intersection() {
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.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.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.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);
}
group();
intersection() {
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.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.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.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);
}
}

View file

@ -1,31 +1,29 @@
group() {
group();
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
}
}
color([0, 0.501961, 0, 1]) {
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, scale = [0.2, 0.2], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, twist = 90, slices = 7, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
}
}
color([0.501961, 0.501961, 0.501961, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 40, center = true, convexity = 1, twist = -360, slices = 200, scale = [0, 0], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
group();
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
}
}
color([0, 0.501961, 0, 1]) {
multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, scale = [0.2, 0.2], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, twist = 90, slices = 7, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
}
}
color([0.501961, 0.501961, 0.501961, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 40, center = true, convexity = 1, twist = -360, slices = 200, scale = [0, 0], $fn = 0, $fa = 12, $fs = 2) {
square(size = [20, 10], center = true);
}
}
}

File diff suppressed because one or more lines are too long

View file

@ -1,15 +1,13 @@
group() {
group() {
difference() {
sphere($fn = 100, $fa = 12, $fs = 2, r = 25);
difference() {
sphere($fn = 100, $fa = 12, $fs = 2, r = 25);
cylinder($fn = 100, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
# multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
# multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
}
group();
}
group();

View file

@ -1,75 +1,73 @@
group() {
multmatrix([[1, 0, 0, 110], [0, 1, 0, 0], [0, 0, 1, 80], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) {
multmatrix([[0.69427204401, 0.71938369937, 0.02175826214, 0], [-0.58256341607, 0.57946619475, -0.56994630922, 0], [-0.42261826174, 0.38302222155, 0.82139380484, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 100, $fa = 12, $fs = 2, r = 60);
multmatrix([[1, 0, 0, 110], [0, 1, 0, 0], [0, 0, 1, 80], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) {
multmatrix([[0.694272, 0.719384, 0.0217583, 0], [-0.582563, 0.579466, -0.569946, 0], [-0.422618, 0.383022, 0.821394, 0], [0, 0, 0, 1]]) {
group() {
difference() {
sphere($fn = 100, $fa = 12, $fs = 2, r = 60);
cylinder($fn = 100, $fa = 12, $fs = 2, h = 150, r1 = 30, r2 = 30, center = true);
# multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 150, r1 = 30, r2 = 30, center = true);
}
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 150, r1 = 30, r2 = 30, center = true);
# multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 150, r1 = 30, r2 = 30, center = true);
}
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 100, $fa = 12, $fs = 2, h = 150, r1 = 30, r2 = 30, center = true);
}
}
}
}
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 40], [0, 0, 0, 1]]) {
group() {
color([0.317647, 0.556863, 0.0156863, 1]) {
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 40], [0, 0, 0, 1]]) {
group() {
color([0.317647, 0.556863, 0.0156863, 1]) {
group() {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "Open", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
multmatrix([[1, 0, 0, 247], [0, 1, 0, 0], [0, 0, 1, 40], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "The Programmers", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
multmatrix([[1, 0, 0, 160], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "Solid 3D CAD Modeller", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "Open", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
multmatrix([[1, 0, 0, 247], [0, 1, 0, 0], [0, 0, 1, 40], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "SCAD", size = 42, spacing = 1, font = "Liberation Sans:style=Bold", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "The Programmers", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
multmatrix([[1, 0, 0, 160], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) {
group() {
color([0, 0, 0, 1]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
linear_extrude(height = 1, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "Solid 3D CAD Modeller", size = 18, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 16, $fa = 12, $fs = 2);
}
}
}
@ -77,5 +75,5 @@ group() {
}
}
}
group();
}
group();

View file

@ -1,30 +1,28 @@
group() {
group();
linear_extrude(height = 20, center = false, convexity = 1, scale = [0.5, 0.5], $fn = 40, $fa = 12, $fs = 2) {
offset(r = 10, $fn = 40, $fa = 12, $fs = 2) {
square(size = [50, 50], center = true);
}
group();
linear_extrude(height = 20, center = false, convexity = 1, scale = [0.5, 0.5], $fn = 40, $fa = 12, $fs = 2) {
offset(r = 10, $fn = 40, $fa = 12, $fs = 2) {
square(size = [50, 50], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, scale = [1, 1], $fn = 40, $fa = 12, $fs = 2) {
group() {
difference() {
offset(r = 1, $fn = 40, $fa = 12, $fs = 2) {
group() {
circle($fn = 40, $fa = 12, $fs = 2, r = 15);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
linear_extrude(height = 20, center = false, convexity = 1, scale = [1, 1], $fn = 40, $fa = 12, $fs = 2) {
group() {
difference() {
offset(r = 1, $fn = 40, $fa = 12, $fs = 2) {
group() {
circle($fn = 40, $fa = 12, $fs = 2, r = 15);
}
offset(r = -1, $fn = 40, $fa = 12, $fs = 2) {
group() {
circle($fn = 40, $fa = 12, $fs = 2, r = 15);
}
}
offset(r = -1, $fn = 40, $fa = 12, $fs = 2) {
group() {
circle($fn = 40, $fa = 12, $fs = 2, r = 15);
}
}
}
}
}
% cylinder($fn = 40, $fa = 12, $fs = 2, h = 100, r1 = 14, r2 = 14, center = false);
% multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 100], [0, 0, 0, 1]]) {
sphere($fn = 40, $fa = 12, $fs = 2, r = 30);
}
}
%cylinder($fn = 40, $fa = 12, $fs = 2, h = 100, r1 = 14, r2 = 14, center = false);
%multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 100], [0, 0, 0, 1]]) {
sphere($fn = 40, $fa = 12, $fs = 2, r = 30);
}

File diff suppressed because one or more lines are too long

View file

@ -1,60 +1,58 @@
group() {
group();
% import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
color([1, 0, 0, 1]) {
group();
%import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
square(size = [30, 30], center = true);
projection(cut = false, convexity = 0) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
}
color([0, 0.501961, 0, 1]) {
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 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 = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
square(size = [30, 30], center = true);
projection(cut = false, convexity = 0) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
}
}
}
color([0, 0.501961, 0, 1]) {
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, -20], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
square(size = [30, 30], center = true);
projection(cut = false, convexity = 0) {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 0], [0, 0, 1, 0], [0, -1, 0, 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 = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
square(size = [30, 30], center = true);
projection(cut = false, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
}
}
}
}
}
color([1, 1, 0, 0.5]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
square(size = [30, 30], center = true);
projection(cut = true, convexity = 0) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2);
}
}
}
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, 1, 0], [0, -1, 2.22045e-16, 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 = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
square(size = [30, 30], center = true);
projection(cut = false, convexity = 0) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
}
}
}
color([1, 1, 0, 0.5]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) {
linear_extrude(height = 2, center = true, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
difference() {
square(size = [30, 30], center = true);
projection(cut = true, convexity = 0) {
import(file = "projection.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 1445017640);
}
}
}
}
}

View file

@ -1,6 +1,4 @@
group() {
color([0, 1, 1, 1]) {
text(text = "6! = 720", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group();
color([0, 1, 1, 1]) {
text(text = "6! = 720", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "center", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
group();

View file

@ -1,45 +1,43 @@
group() {
group();
color([1, 0, 0, 1]) {
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group();
color([1, 0, 0, 1]) {
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [5, 5], center = false);
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = 360, convexity = 2, $fn = 80, $fa = 12, $fs = 2) {
text(text = " J", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 80, $fa = 12, $fs = 2);
}
}
}
color([0, 0.501961, 0, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = 360, convexity = 2, $fn = 80, $fa = 12, $fs = 2) {
polygon(points = [[0, 0], [8, 4], [4, 8], [4, 12], [12, 16], [0, 20]], paths = undef, convexity = 1);
}
}
}
color([1, 0, 1, 1]) {
multmatrix([[1, 0, 0, 40], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = 180, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
multmatrix([[1, 0, 0, 12.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [5, 5], center = false);
}
}
}
color([0, 1, 1, 1]) {
multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = 360, convexity = 2, $fn = 80, $fa = 12, $fs = 2) {
text(text = " J", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", script = "Latn", halign = "left", valign = "baseline", $fn = 80, $fa = 12, $fs = 2);
}
}
}
color([0, 0.501961, 0, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = 360, convexity = 2, $fn = 80, $fa = 12, $fs = 2) {
polygon(points = [[0, 0], [8, 4], [4, 8], [4, 12], [12, 16], [0, 20]], paths = undef, convexity = 1);
}
}
}
color([1, 0, 1, 1]) {
multmatrix([[1, 0, 0, 40], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = 180, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
multmatrix([[1, 0, 0, 12.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [5, 5], center = false);
}
}
multmatrix([[1, 0, 0, 7.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = 180, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [5, 5], center = false);
}
}
}
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = -180, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [5, 5], center = false);
}
}
multmatrix([[1, 0, 0, -7.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
rotate_extrude(angle = -180, convexity = 2, $fn = 0, $fa = 12, $fs = 2) {
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [5, 5], center = false);
}
}
}

View file

@ -1,9 +1,7 @@
group() {
group();
intersection() {
group();
intersection() {
surface(file = "surface.dat", center = true, invert = false);
multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
surface(file = "surface.dat", center = true, invert = false);
multmatrix([[0.70710678118, -0.70710678118, 0, 0], [0.70710678118, 0.70710678118, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
surface(file = "surface.dat", center = true, invert = false);
}
}
}

View file

@ -1,30 +1,28 @@
group();
group() {
group();
group() {
color([0.666667, 0, 0, 1]) {
linear_extrude(height = 2, center = false, convexity = 10, 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, -30], [0, 0, 0, 1]]) {
surface(file = "surface_image.png", center = true, invert = false);
}
color([0.666667, 0, 0, 1]) {
linear_extrude(height = 2, center = false, convexity = 10, 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, -30], [0, 0, 0, 1]]) {
surface(file = "surface_image.png", center = true, invert = false, timestamp = 1445017640);
}
}
}
color([0.833333, 0, 0, 1]) {
linear_extrude(height = 4, center = false, convexity = 10, 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, -60], [0, 0, 0, 1]]) {
surface(file = "surface_image.png", center = true, invert = false);
}
}
color([0.833333, 0, 0, 1]) {
linear_extrude(height = 4, center = false, convexity = 10, 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, -60], [0, 0, 0, 1]]) {
surface(file = "surface_image.png", center = true, invert = false, timestamp = 1445017640);
}
}
}
color([1, 0, 0, 1]) {
linear_extrude(height = 6, center = false, convexity = 10, 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, -90], [0, 0, 0, 1]]) {
surface(file = "surface_image.png", center = true, invert = false);
}
}
color([1, 0, 0, 1]) {
linear_extrude(height = 6, center = false, convexity = 10, 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, -90], [0, 0, 0, 1]]) {
surface(file = "surface_image.png", center = true, invert = false, timestamp = 1445017640);
}
}
}

View file

@ -1,60 +1,58 @@
group() {
group();
difference() {
union() {
color([0.501961, 0.501961, 0.501961, 1]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -27.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[1, 0, 0, 27.5], [0, 1, 0, 0], [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]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "U", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 27.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "B", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[1, 0, 0, -27.5], [0, 1, 0, 0], [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]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "E", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
group();
difference() {
union() {
color([0.501961, 0.501961, 0.501961, 1]) {
cube(size = [60, 60, 60], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -27.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "C", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 27.5], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "☺", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
multmatrix([[1, 0, 0, 27.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "U", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -32.5], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "☼", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 27.5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[-1, -2.46519e-32, 1.22465e-16, 0], [1.22465e-16, -2.22045e-16, 1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "B", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
multmatrix([[1, 0, 0, -27.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
multmatrix([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "E", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", script = "Latn", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 27.5], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "☺", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -32.5], [0, 0, 0, 1]]) {
group() {
linear_extrude(height = 5, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) {
text(text = "☼", size = 50, spacing = 1, font = "Liberation Sans", direction = "ltr", language = "en", halign = "center", valign = "center", $fn = 16, $fa = 12, $fs = 2);
}
}
}
}

View file

@ -1,45 +1,43 @@
group();
group() {
group();
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -120], [0, 0, 0, 1]]) {
difference() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 100, r2 = 100, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 80, r2 = 80, center = false);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 35], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -120], [0, 0, 0, 1]]) {
difference() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 100, r2 = 100, center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 80, r2 = 80, center = false);
}
group() {
group();
multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [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.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.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, 0], [0, 1, 0, -80], [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.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.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);
}
multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 35], [0, 0, 0, 1]]) {
cube(size = [50, 50, 50], center = true);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 200], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 120, r2 = 0, center = false);
}
group() {
group();
multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [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.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.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, 0], [0, 1, 0, -80], [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.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.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);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 200], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 80, r1 = 120, r2 = 0, center = false);
}
}
}

View file

@ -1,18 +1,16 @@
group();
group() {
group();
group() {
difference() {
union() {
cube(size = [30, 30, 30], center = true);
cube(size = [40, 15, 15], center = true);
cube(size = [15, 40, 15], center = true);
cube(size = [15, 15, 40], center = true);
}
union() {
cube(size = [50, 10, 10], center = true);
cube(size = [10, 50, 10], center = true);
cube(size = [10, 10, 50], center = true);
}
difference() {
union() {
cube(size = [30, 30, 30], center = true);
cube(size = [40, 15, 15], center = true);
cube(size = [15, 40, 15], center = true);
cube(size = [15, 15, 40], center = true);
}
union() {
cube(size = [50, 10, 10], center = true);
cube(size = [10, 50, 10], center = true);
cube(size = [10, 10, 50], center = true);
}
}
}

View file

@ -1,10 +1,8 @@
group() {
cube(size = [1, 1, 1], center = false);
multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [1, 1], center = false);
}
union() {
cube(size = [0, 0, 0], center = false);
circle($fn = 0, $fa = 12, $fs = 2, r = 0);
}
cube(size = [1, 1, 1], center = false);
multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
square(size = [1, 1], center = false);
}
union() {
cube(size = [0, 0, 0], center = false);
circle($fn = 0, $fa = 12, $fs = 2, r = 0);
}

View file

@ -1 +1 @@
group();

View file

@ -1,44 +1,42 @@
minkowski(convexity = 0);
glide(path = undef, convexity = 0);
subdiv(level = 1, convexity = 0);
hull();
resize(newsize = [0,0,0], auto = [0,0,0]);
group();
group();
group();
intersection();
group() {
minkowski(convexity = 0);
glide(path = undef, convexity = 0);
subdiv(level = 1, convexity = 0);
hull();
resize(newsize = [0,0,0], auto = [0,0,0]);
group();
group();
group();
intersection();
group() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
}
union();
difference();
intersection();
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2);
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2);
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2);
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
group();
cube(size = [1, 1, 1], center = false);
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false);
polyhedron(points = undef, faces = undef, convexity = 1);
square(size = [1, 1], center = false);
circle($fn = 0, $fa = 12, $fs = 2, r = 1);
polygon(points = undef, paths = undef, convexity = 1);
projection(cut = false, convexity = 0);
render(convexity = 1);
surface(file = "", center = false, invert = false, timestamp = 0);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
color([-1, -1, -1, 1]);
offset(r = 1, $fn = 0, $fa = 12, $fs = 2);
text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);
}
union();
difference();
intersection();
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2);
linear_extrude(height = 100, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2);
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2);
rotate_extrude(angle = 360, convexity = 2, $fn = 0, $fa = 12, $fs = 2);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2, timestamp = 0);
group();
cube(size = [1, 1, 1], center = false);
sphere($fn = 0, $fa = 12, $fs = 2, r = 1);
cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false);
polyhedron(points = undef, faces = undef, convexity = 1);
square(size = [1, 1], center = false);
circle($fn = 0, $fa = 12, $fs = 2, r = 1);
polygon(points = undef, paths = undef, convexity = 1);
projection(cut = false, convexity = 0);
render(convexity = 1);
surface(file = "", center = false, invert = false, timestamp = 0);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
color([-1, -1, -1, 1]);
offset(r = 1, $fn = 0, $fa = 12, $fs = 2);
text(text = "", size = 10, spacing = 1, font = "", direction = "ltr", language = "en", halign = "left", valign = "baseline", $fn = 0, $fa = 12, $fs = 2);

View file

@ -1,51 +1,49 @@
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [0, 0, 0], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [0, 0, 0], center = false);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [0, 0, 0], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [0, 0, 0], center = false);
}
}
multmatrix([[1, 0, 0, 0.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [1, 1, 1], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [0.5, 0.5, 0.5], center = false);
}
}
multmatrix([[1, 0, 0, 0.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [1, 1, 1], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [0.5, 0.5, 0.5], center = false);
}
}
multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [1, 1, 1], center = false);
}
}
multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [1, 1, 1], center = false);
}
}
multmatrix([[1, 0, 0, 4.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [3, 3, 3], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [1.5, 1.5, 1.5], center = false);
}
}
multmatrix([[1, 0, 0, 4.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [3, 3, 3], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [1.5, 1.5, 1.5], center = false);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [4, 4, 4], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [2, 2, 2], center = false);
}
}
multmatrix([[1, 0, 0, 8], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [4, 4, 4], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [2, 2, 2], center = false);
}
}
multmatrix([[1, 0, 0, 12.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [2.5, 2.5, 2.5], center = false);
}
}
multmatrix([[1, 0, 0, 12.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [5, 5, 5], center = false);
multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [2.5, 2.5, 2.5], center = false);
}
}
}

View file

@ -1,27 +1,25 @@
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
% cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true);
}
%group() {
cube(size = [25, 6, 3], center = true);
}
%multmatrix([[1, 0, 0, 0], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
% cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true);
}
% group() {
cube(size = [25, 6, 3], center = true);
}
% multmatrix([[1, 0, 0, 0], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
difference() {
color([0, 0.501961, 0, 1]) {
cube(size = [10, 4, 10], center = true);
}
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 3);
}
}
color([0, 0.501961, 0, 1]) {
cube(size = [10, 4, 10], center = true);
}
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
minkowski(convexity = 0) {
% cube(size = [10, 10, 10], center = true);
cube(size = [5, 5, 5], center = true);
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, 0], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 0, $fa = 12, $fs = 2, r = 3);
}
}
}
}
multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
minkowski(convexity = 0) {
% cube(size = [10, 10, 10], center = true);
cube(size = [5, 5, 5], center = true);
}
}

View file

@ -1,21 +1,19 @@
group() {
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 25);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 25);
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
group() {
multmatrix([[1, 0, 0, 0], [0, 0, -1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
group() {
multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
group() {
multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
group() {
multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.5, r1 = 12.5, r2 = 12.5, center = true);
}
}
}

View file

@ -1,8 +1,6 @@
group() {
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true);
}
difference() {
sphere($fn = 0, $fa = 12, $fs = 2, r = 10);
group() {
cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true);
}
}

View file

@ -1,31 +1,29 @@
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]]) {
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);
}
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, 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);
}
}
}
@ -34,19 +32,19 @@ group() {
}
}
}
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);
}
}
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);
}
}
}

View file

@ -1,52 +1,50 @@
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 16, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 16, $fa = 12, $fs = 2, h = 2, r1 = 1, r2 = 1, center = true);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
}
}
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 16, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
}
}
}
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cylinder($fn = 16, $fa = 12, $fs = 2, h = 2, r1 = 1, r2 = 1, center = true);
}
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group();
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 16, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cylinder($fn = 16, $fa = 12, $fs = 2, h = 2, r1 = 1, r2 = 1, center = true);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [2, 2, 2], center = true);
}
}
}
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 16, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
}
}
}
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cylinder($fn = 16, $fa = 12, $fs = 2, h = 2, r1 = 1, r2 = 1, center = true);
}
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group();
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
group() {
multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
sphere($fn = 16, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
cube(size = [1, 1, 1], center = true);
}
cube(size = [1, 1, 1], center = true);
}
}
}

View file

@ -1,40 +1,38 @@
group() {
circle($fn = 0, $fa = 12, $fs = 2, r = 1);
circle($fn = 0, $fa = 12, $fs = 2, r = inf);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 1);
circle($fn = 0, $fa = 12, $fs = 2, r = inf);
multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 3);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 0);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 4, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 3], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 8, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 12, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 20, $fs = 0.3, r = 1);
}
multmatrix([[1, 0, 0, 3], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 30, $fs = 0.3, r = 1);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 40, $fs = 0.3, r = 1);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0.1, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 3], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 8, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 8, $fa = 12, $fs = 2, r = 1);
}
}
multmatrix([[1, 0, 0, 5], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 3);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -1], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 12, $fs = 2, r = 0);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 4, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 3], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 8, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 12, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 20, $fs = 0.3, r = 1);
}
multmatrix([[1, 0, 0, 3], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 30, $fs = 0.3, r = 1);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0, $fa = 40, $fs = 0.3, r = 1);
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 0.1, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 3], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 8, $fa = 12, $fs = 2, r = 1);
}
multmatrix([[1, 0, 0, 6], [0, 1, 0, -9], [0, 0, 1, 0], [0, 0, 0, 1]]) {
circle($fn = 8, $fa = 12, $fs = 2, r = 1);
}

View file

@ -1,65 +1,63 @@
group() {
color([-1, -1, -1, 1]);
color([-1, -1, -1, 1]);
multmatrix([[1, 0, 0, 12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([-1, -1, -1, 1]);
color([-1, -1, -1, 1]);
multmatrix([[1, 0, 0, 12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, 24], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
color([1, 0, 0, 1]) {
multmatrix([[1, 0, 0, 24], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([0.501961, 0, 0.501961, 1]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, 0], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([0.501961, 0, 0.501961, 1]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
}
color([0, 0, 1, 0.5]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([0, 0, 1, 0.5]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([0, 0, 1, 0.5]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([0, 0.501961, 0, 0.2]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([0, 0.501961, 0, 0.2]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, -12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([-1, -1, -1, 1]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, -12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([-1, -1, -1, 1]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([-1, -1, -1, 0.5]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([-1, -1, -1, 0.5]) {
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([1, 0, 0, 1]) {
color([0, 0, 1, 1]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
}
multmatrix([[1, 0, 0, 24], [0, 1, 0, -12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
color([1, 0, 0, 1]) {
color([0, 0, 1, 1]) {
group() {
cube(size = [10, 10, 10], center = false);
}
}
}
}
}

View file

@ -1,6 +1,4 @@
group() {
hull() {
circle($fn = 0, $fa = 12, $fs = 2, r = 1);
group();
}
hull() {
circle($fn = 0, $fa = 12, $fs = 2, r = 1);
group();
}

Some files were not shown because too many files have changed in this diff Show more