Merge remote-tracking branch 'origin/master' into csgterm-refactor
This commit is contained in:
commit
e9685b7001
187 changed files with 10797 additions and 10480 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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() {}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
541
src/export.cc
541
src/export.cc
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
35
src/export.h
35
src/export.h
|
|
@ -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
196
src/export_amf.cc
Normal 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
107
src/export_dxf.cc
Normal 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
56
src/export_nef.cc
Normal 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
106
src/export_off.cc
Normal 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
|
||||
|
|
@ -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
212
src/export_stl.cc
Normal 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
91
src/export_svg.cc
Normal 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
|
||||
}
|
||||
|
|
@ -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.");
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
10
src/module.h
10
src/module.h
|
|
@ -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:
|
||||
|
|
|
|||
18
src/node.cc
18
src/node.cc
|
|
@ -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() + "()";
|
||||
|
|
|
|||
27
src/node.h
27
src/node.h
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ public:
|
|||
break;
|
||||
default:
|
||||
assert(false && "PrimitiveNode::name(): Unknown primitive type");
|
||||
return AbstractPolyNode::name();
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
2
testdata/scad/stl/stl-export.scad
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
translate([1,1,9]) cube(8);
|
||||
cube(10);
|
||||
2
tests/.gitignore
vendored
2
tests/.gitignore
vendored
|
|
@ -25,4 +25,4 @@ out.*
|
|||
/test_pretty_print.log.txt
|
||||
/csgtermtest
|
||||
/echotest
|
||||
/dumptest
|
||||
/dumptest
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
0
tests/regression/cgalpngtest/issue1516-expected.png
Normal file
0
tests/regression/cgalpngtest/issue1516-expected.png
Normal file
|
|
@ -1 +1 @@
|
|||
group1
|
||||
root1
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
group1
|
||||
root1
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
group();
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
group();
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in a new issue