Merge remote-tracking branch 'origin/master' into c++11
|
@ -1,29 +1,49 @@
|
|||
/*.scad
|
||||
*.dmg
|
||||
*~
|
||||
*.tar*
|
||||
*.new
|
||||
Makefile
|
||||
objects
|
||||
.gdbinit
|
||||
/*.stl
|
||||
/*.dxf
|
||||
/lexer_lex.cpp
|
||||
/parser_yacc.cpp
|
||||
.qmake.stash
|
||||
parser_yacc.h
|
||||
/tmp
|
||||
/OpenSCAD.app
|
||||
*/#*#
|
||||
/locale/*/*/*.mo
|
||||
/locale/POTFILES
|
||||
/nbproject
|
||||
/openscad.pro.user
|
||||
/openscad
|
||||
/tests/openscad_nogui
|
||||
**/#*#
|
||||
testdata/scad/features/import_dxf-tests.scad
|
||||
testdata/scad/features/import_stl-tests.scad
|
||||
testdata/scad/misc/include-tests.scad
|
||||
testdata/scad/misc/use-tests.scad
|
||||
/mingw32
|
||||
/mingw64
|
||||
**/project.xcworkspace
|
||||
**/xcuserdata
|
||||
/*.scad
|
||||
/*.stl
|
||||
/*.dxf
|
||||
/*.off
|
||||
/*.amf
|
||||
/*.png
|
||||
/*.csg
|
||||
/*.nef3
|
||||
/*.blend
|
||||
/*.obj
|
||||
/*.rcad
|
||||
/*.xml
|
||||
/*.dat
|
||||
/*.gcode
|
||||
/*.py
|
||||
/*.svg
|
||||
/*.h
|
||||
/*.dump
|
||||
/*.pl
|
||||
/lexer_lex.cpp
|
||||
/parser_yacc.cpp
|
||||
/OpenSCAD.app
|
||||
/openscad.pro.user
|
||||
/openscad
|
||||
/locale/*/*/*.mo
|
||||
/locale/POTFILES
|
||||
/tmp
|
||||
/nbproject
|
||||
/mingw32
|
||||
/mingw64
|
||||
src/*.org
|
||||
src/*.old
|
||||
src/*.debug
|
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 64 KiB |
BIN
Open-128.png
Before Width: | Height: | Size: 64 KiB |
73
README.md
|
@ -88,24 +88,23 @@ libraries from aptitude. If you're using Mac, or an older Linux/BSD, there
|
|||
are build scripts that download and compile the libraries from source.
|
||||
Follow the instructions for the platform you're compiling on below.
|
||||
|
||||
* [Qt4 (4.4 - 5.3)](http://www.qt.nokia.com/)
|
||||
* [QScintilla2 (2.7)](http://www.riverbankcomputing.co.uk/software/qscintilla/)
|
||||
* [CGAL (3.6 - 4.4)](http://www.cgal.org/)
|
||||
* [Qt4 (4.4 - 5.4)](http://www.qt.nokia.com/)
|
||||
* [QScintilla2 (2.7 - 2.8)](http://www.riverbankcomputing.co.uk/software/qscintilla/)
|
||||
* [CGAL (3.6 - 4.5)](http://www.cgal.org/)
|
||||
* [GMP (5.x)](http://www.gmplib.org/)
|
||||
* [MPFR (3.x)](http://www.mpfr.org/)
|
||||
* [cmake (2.8, required by CGAL and the test framework)](http://www.cmake.org/)
|
||||
* [boost (1.35 - 1.55)](http://www.boost.org/)
|
||||
* [cmake (2.8 - 3.0, required by CGAL and the test framework)](http://www.cmake.org/)
|
||||
* [boost (1.35 - 1.57)](http://www.boost.org/)
|
||||
* [OpenCSG (1.3.2 ->)](http://www.opencsg.org/)
|
||||
* [GLEW (1.5.4 ->)](http://glew.sourceforge.net/)
|
||||
* [Eigen (3.x)](http://eigen.tuxfamily.org/)
|
||||
* [glib2 (2.x)](https://developer.gnome.org/glib/)
|
||||
* [fontconfig (2.10)](http://fontconfig.org/)
|
||||
* [freetype2 (2.4)](http://freetype.org/)
|
||||
* [harfbuzz (0.9.19)](http://harfbuzz.org/)
|
||||
* [GCC C++ Compiler (4.2 ->)](http://gcc.gnu.org/)
|
||||
* [Bison (2.4)](http://www.gnu.org/software/bison/)
|
||||
* [Flex (2.5.35)](http://flex.sourceforge.net/)
|
||||
* [pkg-config (0.26)](http://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
* [fontconfig (2.10 -> )](http://fontconfig.org/)
|
||||
* [freetype2 (2.4 -> )](http://freetype.org/)
|
||||
* [harfbuzz (0.9.19 -> )](http://harfbuzz.org/)
|
||||
* [Bison (2.4 -> )](http://www.gnu.org/software/bison/)
|
||||
* [Flex (2.5.35 -> )](http://flex.sourceforge.net/)
|
||||
* [pkg-config (0.26 -> )](http://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
|
||||
### Getting the source code
|
||||
|
||||
|
@ -123,29 +122,41 @@ To pull the MCAD library (http://reprap.org/wiki/MCAD), do the following:
|
|||
### Building for Mac OS X
|
||||
|
||||
Prerequisites:
|
||||
* XCode, including XCode command-line tools (install from XCode Preferences).
|
||||
|
||||
Prerequisites that can be installed through MacPorts/homebrew:
|
||||
* [CMake](http://cmake.org/)
|
||||
* [automake](http://www.gnu.org/software/automake/)
|
||||
* [pkg-config](http://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
* [libtool](https://www.gnu.org/software/libtool/)
|
||||
* XCode, including XCode command-line tools.
|
||||
|
||||
Then after you've cloned this git repository, run the script that sets up the
|
||||
environment variables.
|
||||
Install Dependencies:
|
||||
|
||||
source setenv_mac-qt5.sh
|
||||
Run the script that sets up the environment variables:
|
||||
```source setenv_mac-qt5.sh```
|
||||
|
||||
Then run the script to compile all the prerequisite libraries above:
|
||||
Then run the script to compile all the dependencies:
|
||||
```./scripts/macosx-build-dependencies.sh```
|
||||
|
||||
./scripts/macosx-build-dependencies.sh
|
||||
|
||||
You can also install the prerequisites using
|
||||
[MacPorts](http://www.macports.org). Unfortunately,
|
||||
[brew](http://mxcl.github.com/homebrew/) doesn't yet support CGAL and
|
||||
OpenCSG.
|
||||
After building dependencies, follow the instructions in the *Compilation* section.
|
||||
|
||||
For the adventurous, it might be possible to build OpenSCAD using _MacPorts_ or _Homebrew_. The main challenge is that both these systems have partially broken libraries, but that tends to change from time to time.
|
||||
|
||||
1. **MacPorts** (assumes [MacPorts](http://macports.org) is already installed)
|
||||
|
||||
NB! MacPorts currently doesn't support Qt5 very well, so using Qt4
|
||||
is the only working option at the moment. However, MacPorts' Qt4
|
||||
has a broken ```moc``` command, causing OpenSCAD compilation to
|
||||
break. This may be fixed in MacPorts by the time you read this.
|
||||
|
||||
```sudo port install opencsg qscintilla boost cgal pkgconfig eigen3 harfbuzz fontconfig```
|
||||
|
||||
1. **Homebrew** (assumes [Homebrew](http://brew.sh)) is already installed)
|
||||
|
||||
NB! Homebrew's ```qscintilla2``` component doesn't support Qt5, so using Qt4 is currently necessary.
|
||||
However, Homebrew's Qt4 has a broken ```moc``` command, causing OpenSCAD compilation to
|
||||
break. This may be fixed in Homebrew by the time you read this.
|
||||
NB! Homebrew's ```harfbuzz``` package requires X11, so you may have to install an X11 server.
|
||||
NB! Homebrew doesnt have an OpenCSG package
|
||||
|
||||
```brew install cgal qscintilla2 eigen harfbuzz```
|
||||
|
||||
After that, follow the Compilation instructions below.
|
||||
|
||||
### Building for Linux/BSD
|
||||
|
||||
|
@ -220,9 +231,9 @@ For a 64-bit Windows cross-build, replace 32 with 64 in the above instructions.
|
|||
|
||||
### Compilation
|
||||
|
||||
First, run 'qmake openscad.pro' from Qt4 to generate a Makefile. On some systems
|
||||
you need to run 'qmake4', 'qmake-qt4' or something alike to run the qt4 version
|
||||
of the tool.
|
||||
First, run 'qmake openscad.pro' from Qt4 to generate a Makefile.
|
||||
|
||||
On some systems, depending on which version(s) of Qt you have installed, you may need to specify which version you want to use, e.g. by running 'qmake4', 'qmake-qt4' or something alike.
|
||||
|
||||
Then run make. Finally you might run 'make install' as root or simply copy the
|
||||
'openscad' binary (OpenSCAD.app on Mac OS X) to the bin directory of your choice.
|
||||
|
|
BIN
Save-128.png
Before Width: | Height: | Size: 64 KiB |
|
@ -7,9 +7,9 @@
|
|||
<item>
|
||||
<title>OpenSCAD @VERSION@</title>
|
||||
<pubDate>@VERSIONDATE@</pubDate>
|
||||
<sparkle:releaseNotesLink>https://raw.github.com/openscad/openscad/master/RELEASE_NOTES</sparkle:releaseNotesLink>
|
||||
<sparkle:releaseNotesLink>https://raw.github.com/openscad/openscad/master/releases/2014.QX.md</sparkle:releaseNotesLink>
|
||||
<sparkle:minimumSystemVersion>10.7.0</sparkle:minimumSystemVersion>
|
||||
<enclosure url="http://files.openscad.org/OpenSCAD-@VERSION@.dmg"
|
||||
<enclosure url="http://files.openscad.org/snapshots/OpenSCAD-@VERSION@.dmg"
|
||||
sparkle:version="@VERSIONDATE@"
|
||||
sparkle:shortVersionString="@VERSION@"
|
||||
sparkle:dsaSignature="@DSASIGNATURE@"
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
/*.stl
|
||||
/*.scad
|
||||
/*.polygon
|
||||
polyhole-tessellator
|
||||
polyhole-tessellator-libtess2
|
||||
minkowski
|
||||
decompose
|
||||
export_nef
|
|
@ -0,0 +1,4 @@
|
|||
-76.547562539078825239,38.705110299157155396,5.353092412611622386
|
||||
-76.547562541749158527,38.705110304107662955,5.3530924135499766692
|
||||
-76.5475616455078125,38.705108642578125,0
|
||||
-76.5475616455078125,38.705108642578125,0.020000000000000000416
|
|
@ -0,0 +1,4 @@
|
|||
0,0,0
|
||||
0,1,0
|
||||
1,1,1
|
||||
0,1,0
|
|
@ -0,0 +1,4 @@
|
|||
0,1,0
|
||||
0,0,0
|
||||
0,1,0
|
||||
1,1,0
|
|
@ -0,0 +1,4 @@
|
|||
0 0 0
|
||||
1 0 0
|
||||
1 1 0
|
||||
1 1 0
|
|
@ -0,0 +1,4 @@
|
|||
0 0 0
|
||||
1 0 0
|
||||
0 1 0
|
||||
1 1 0
|
|
@ -0,0 +1,8 @@
|
|||
11.8244953852727654464160877978,-33.4423534623057960857295256574,28
|
||||
11.8244953852727654464160877978,-34,28
|
||||
11.8244953852727654464160877978,-36.5576465376941897034157591406,28
|
||||
7.99999999999999911182158029987,-35.6847304231704427479598962236,23.516743531220182461538570351
|
||||
8,-35,23.516743531220182461538570351
|
||||
5.99999999999999911182158029987,-35,21.1722478437400596362749638502
|
||||
6,-35,21.1722478437400596362749638502
|
||||
5.8577590289166048265201425238,-34.8042220990505484223831444979,21.0055061720960587479112291476
|
|
@ -0,0 +1,4 @@
|
|||
9.5,7.5,-0.5
|
||||
9.5,2,-0.5
|
||||
9.5,2,-0.4999999701976776123
|
||||
9.5,7.5,-0.4999999701976776123
|
|
@ -0,0 +1,5 @@
|
|||
50.9504,53.0377,9.35305
|
||||
50.2251,53.0492,9.4122
|
||||
50.9537,53.0376,9.35278
|
||||
55.2851,53.5142,9.35278
|
||||
50.9537,53.0376,9.35278
|
|
@ -0,0 +1,5 @@
|
|||
50.95040130615234375,53.037654876708984375,9.35305023193359375
|
||||
50.225086212158203125,53.049152374267578125,9.4121952056884765625
|
||||
50.953746795654296875,53.037601470947265625,9.3527774810791015625
|
||||
55.285125732421875,53.514209747314453125,9.3527774810791015625
|
||||
50.953746795654296875,53.037601470947265625,9.3527774810791015625
|
|
@ -0,0 +1,180 @@
|
|||
#include <boost/foreach.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <locale.h>
|
||||
|
||||
#include "cgalutils.h"
|
||||
#include "export.h"
|
||||
#include "polyset.h"
|
||||
#include "CGAL_Nef_polyhedron.h"
|
||||
#include "boosty.h"
|
||||
|
||||
#include <CGAL/IO/Nef_polyhedron_iostream_3.h>
|
||||
|
||||
using namespace CGALUtils;
|
||||
|
||||
#define STL_FACET_NUMBYTES 4*3*4+2
|
||||
// as there is no 'float32_t' standard, we assume the systems 'float'
|
||||
// is a 'binary32' aka 'single' standard IEEE 32-bit floating point type
|
||||
union stl_facet {
|
||||
uint8_t data8[ STL_FACET_NUMBYTES ];
|
||||
uint32_t data32[4*3];
|
||||
struct facet_data {
|
||||
float i, j, k;
|
||||
float x1, y1, z1;
|
||||
float x2, y2, z2;
|
||||
float x3, y3, z3;
|
||||
uint16_t attribute_byte_count;
|
||||
} data;
|
||||
};
|
||||
|
||||
void uint32_byte_swap( uint32_t &x )
|
||||
{
|
||||
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 3
|
||||
x = __builtin_bswap32( x );
|
||||
#elif defined(__clang__)
|
||||
x = __builtin_bswap32( x );
|
||||
#elif defined(_MSC_VER)
|
||||
x = _byteswap_ulong( x );
|
||||
#else
|
||||
uint32_t b1 = ( 0x000000FF & x ) << 24;
|
||||
uint32_t b2 = ( 0x0000FF00 & x ) << 8;
|
||||
uint32_t b3 = ( 0x00FF0000 & x ) >> 8;
|
||||
uint32_t b4 = ( 0xFF000000 & x ) >> 24;
|
||||
x = b1 | b2 | b3 | b4;
|
||||
#endif
|
||||
}
|
||||
|
||||
void read_stl_facet( std::ifstream &f, stl_facet &facet )
|
||||
{
|
||||
f.read( (char*)facet.data8, STL_FACET_NUMBYTES );
|
||||
#ifdef BOOST_BIG_ENDIAN
|
||||
for ( int i = 0; i < 12; i++ ) {
|
||||
uint32_byte_swap( facet.data32[ i ] );
|
||||
}
|
||||
// we ignore attribute byte count
|
||||
#endif
|
||||
}
|
||||
|
||||
PolySet *import_stl(const std::string &filename)
|
||||
{
|
||||
PolySet *p = new PolySet(3);
|
||||
|
||||
// Open file and position at the end
|
||||
std::ifstream f(filename.c_str(), std::ios::in | std::ios::binary | std::ios::ate);
|
||||
if (!f.good()) {
|
||||
PRINTB("WARNING: Can't open import file '%s'.", filename);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
boost::regex ex_sfe("solid|facet|endloop");
|
||||
boost::regex ex_outer("outer loop");
|
||||
boost::regex ex_vertex("vertex");
|
||||
boost::regex ex_vertices("\\s*vertex\\s+([^\\s]+)\\s+([^\\s]+)\\s+([^\\s]+)");
|
||||
|
||||
bool binary = false;
|
||||
std::streampos file_size = f.tellg();
|
||||
f.seekg(80);
|
||||
if (f.good() && !f.eof()) {
|
||||
uint32_t facenum = 0;
|
||||
f.read((char *)&facenum, sizeof(uint32_t));
|
||||
#ifdef BOOST_BIG_ENDIAN
|
||||
uint32_byte_swap( facenum );
|
||||
#endif
|
||||
if (file_size == static_cast<std::streamoff>(80 + 4 + 50*facenum)) {
|
||||
binary = true;
|
||||
}
|
||||
}
|
||||
f.seekg(0);
|
||||
|
||||
char data[5];
|
||||
f.read(data, 5);
|
||||
if (!binary && !f.eof() && f.good() && !memcmp(data, "solid", 5)) {
|
||||
int i = 0;
|
||||
double vdata[3][3];
|
||||
std::string line;
|
||||
std::getline(f, line);
|
||||
while (!f.eof()) {
|
||||
std::getline(f, line);
|
||||
boost::trim(line);
|
||||
if (boost::regex_search(line, ex_sfe)) {
|
||||
continue;
|
||||
}
|
||||
if (boost::regex_search(line, ex_outer)) {
|
||||
i = 0;
|
||||
continue;
|
||||
}
|
||||
boost::smatch results;
|
||||
if (boost::regex_search(line, results, ex_vertices)) {
|
||||
try {
|
||||
for (int v=0;v<3;v++) {
|
||||
vdata[i][v] = boost::lexical_cast<double>(results[v+1]);
|
||||
}
|
||||
}
|
||||
catch (const boost::bad_lexical_cast &blc) {
|
||||
PRINTB("WARNING: Can't parse vertex line '%s'.", line);
|
||||
i = 10;
|
||||
continue;
|
||||
}
|
||||
if (++i == 3) {
|
||||
p->append_poly();
|
||||
p->append_vertex(vdata[0][0], vdata[0][1], vdata[0][2]);
|
||||
p->append_vertex(vdata[1][0], vdata[1][1], vdata[1][2]);
|
||||
p->append_vertex(vdata[2][0], vdata[2][1], vdata[2][2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (binary && !f.eof() && f.good())
|
||||
{
|
||||
f.ignore(80-5+4);
|
||||
while (1) {
|
||||
stl_facet facet;
|
||||
read_stl_facet( f, facet );
|
||||
if (f.eof()) break;
|
||||
p->append_poly();
|
||||
p->append_vertex(facet.data.x1, facet.data.y1, facet.data.z1);
|
||||
p->append_vertex(facet.data.x2, facet.data.y2, facet.data.z2);
|
||||
p->append_vertex(facet.data.x3, facet.data.y3, facet.data.z3);
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
OpenSCAD::debug = "export_nef";
|
||||
CGAL_Nef_polyhedron *N = NULL;
|
||||
|
||||
PolySet *ps = NULL;
|
||||
if (argc == 2) {
|
||||
std::string filename(argv[1]);
|
||||
std::string suffix = boosty::extension_str(filename);
|
||||
boost::algorithm::to_lower(suffix);
|
||||
if (suffix == ".stl") {
|
||||
if (!(ps = import_stl(filename))) {
|
||||
std::cerr << "Error importing STL " << argv[1] << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
std::cerr << "Imported " << ps->numPolygons() << " polygons" << std::endl;
|
||||
}
|
||||
else if (suffix == ".nef3") {
|
||||
N = new CGAL_Nef_polyhedron(new CGAL_Nef_polyhedron3);
|
||||
std::ifstream stream(filename.c_str());
|
||||
stream >> *N->p3;
|
||||
std::cerr << "Imported Nef polyhedron" << std::endl;
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::cerr << "Usage: " << argv[0] << " <file.stl>" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (ps && !N) N = createNefPolyhedronFromGeometry(*ps);
|
||||
|
||||
export_stl(N, std::cout);
|
||||
std::cerr << "Done." << std::endl;
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
CONFIG += debug
|
||||
CONFIG -= qt
|
||||
debug: DEFINES += DEBUG
|
||||
|
||||
TEMPLATE = app
|
||||
|
||||
INCLUDEPATH += ../src
|
||||
DEPENDPATH += ../src
|
||||
|
||||
# Handle custom library location.
|
||||
# Used when manually installing 3rd party libraries
|
||||
isEmpty(OPENSCAD_LIBDIR) OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES)
|
||||
macx:isEmpty(OPENSCAD_LIBDIR) {
|
||||
exists(/opt/local):exists(/usr/local/Cellar) {
|
||||
error("It seems you might have libraries in both /opt/local and /usr/local. Please specify which one to use with qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
} else {
|
||||
exists(/opt/local) {
|
||||
#Default to MacPorts on Mac OS X
|
||||
message("Automatically searching for libraries in /opt/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /opt/local
|
||||
} else:exists(/usr/local/Cellar) {
|
||||
message("Automatically searching for libraries in /usr/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /usr/local
|
||||
}
|
||||
}
|
||||
}
|
||||
!isEmpty(OPENSCAD_LIBDIR) {
|
||||
QMAKE_INCDIR = $$OPENSCAD_LIBDIR/include
|
||||
QMAKE_LIBDIR = $$OPENSCAD_LIBDIR/lib
|
||||
}
|
||||
|
||||
TARGET = export_nef
|
||||
mac {
|
||||
CONFIG -= app_bundle
|
||||
}
|
||||
|
||||
macx {
|
||||
# Mac needs special care to link against the correct C++ library
|
||||
# We attempt to auto-detect it by inspecting Boost
|
||||
dirs = $${BOOSTDIR} $${QMAKE_LIBDIR}
|
||||
for(dir, dirs) {
|
||||
system(grep -q __112basic_string $${dir}/libboost_thread* >& /dev/null) {
|
||||
message("Detected libc++-linked boost in $${dir}")
|
||||
CONFIG += libc++
|
||||
}
|
||||
}
|
||||
|
||||
libc++ {
|
||||
QMAKE_CXXFLAGS += -stdlib=libc++
|
||||
QMAKE_LFLAGS += -stdlib=libc++
|
||||
QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++
|
||||
# libc++ on requires Mac OS X 10.7+
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
|
||||
}
|
||||
}
|
||||
|
||||
# See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs.
|
||||
*g++* {
|
||||
QMAKE_CXXFLAGS *= -fno-strict-aliasing
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-local-typedefs # ignored before 4.8
|
||||
}
|
||||
|
||||
*clang* {
|
||||
# http://llvm.org/bugs/show_bug.cgi?id=9182
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual
|
||||
# disable enormous amount of warnings about CGAL / boost / etc
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-variable
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-c++11-extensions
|
||||
# might want to actually turn this on once in a while
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-sign-compare
|
||||
}
|
||||
|
||||
# Application configuration
|
||||
CONFIG += cgal
|
||||
CONFIG += boost
|
||||
CONFIG += eigen
|
||||
CONFIG += gettext
|
||||
|
||||
mac: {
|
||||
LIBS += -framework OpenGL
|
||||
}
|
||||
|
||||
include(../common.pri)
|
||||
|
||||
HEADERS += ../src/cgal.h \
|
||||
../src/cgalutils.h \
|
||||
../src/linalg.h \
|
||||
../src/polyset.h \
|
||||
../src/polyset-utils.h \
|
||||
../src/printutils.h
|
||||
|
||||
SOURCES += export_nef.cpp \
|
||||
../src/polygon2d.cc \
|
||||
../src/polygon2d-CGAL.cc \
|
||||
../src/CGAL_Nef_polyhedron.cc \
|
||||
../src/CGAL_Nef_polyhedron_DxfData.cc \
|
||||
../src/cgalutils.cc \
|
||||
../src/cgalutils-tess.cc \
|
||||
../src/cgalutils-polyhedron.cc \
|
||||
../src/polyset.cc \
|
||||
../src/svg.cc \
|
||||
../src/node.cc \
|
||||
../src/export.cc \
|
||||
../src/polyset-utils.cc \
|
||||
../src/progress.cc \
|
||||
../src/printutils.cc \
|
||||
../src/grid.cc
|
|
@ -0,0 +1,159 @@
|
|||
#include <boost/foreach.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <locale.h>
|
||||
|
||||
#include "GeometryUtils.h"
|
||||
#include "Reindexer.h"
|
||||
#include "linalg.h"
|
||||
#include "grid.h"
|
||||
#include "printutils.h"
|
||||
|
||||
static void export_stl(const IndexedTriangleMesh &trimesh, std::ostream &output)
|
||||
{
|
||||
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
|
||||
output << "solid OpenSCAD_Model\n";
|
||||
const Vector3f *verts = &trimesh.vertices.front();
|
||||
BOOST_FOREACH(const IndexedTriangle &t, trimesh.triangles) {
|
||||
assert(t[0] < trimesh.vertices.size());
|
||||
assert(t[1] < trimesh.vertices.size());
|
||||
assert(t[2] < trimesh.vertices.size());
|
||||
|
||||
Vector3f p[3];
|
||||
p[0] = verts[t[0]];
|
||||
p[1] = verts[t[1]];
|
||||
p[2] = verts[t[2]];
|
||||
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.
|
||||
Vector3f normal = (p[1] - p[0]).cross(p[2] - p[0]);
|
||||
normal.normalize();
|
||||
output << " facet normal " << normal[0] << " " << normal[1] << " " << normal[2] << "\n";
|
||||
output << " outer loop\n";
|
||||
|
||||
for (int i=0;i<3;i++) {
|
||||
output << " vertex " << p[i][0] << " " << p[i][1] << " " << p[i][2] << "\n";
|
||||
}
|
||||
output << " endloop\n";
|
||||
output << " endfacet\n";
|
||||
// }
|
||||
}
|
||||
output << "endsolid OpenSCAD_Model\n";
|
||||
setlocale(LC_NUMERIC, ""); // Set default locale
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
file format:
|
||||
1. polygon coordinates (x,y,z) are comma separated (+/- spaces) and
|
||||
each coordinate is on a separate line
|
||||
2. each polygon is separated by one or more blank lines
|
||||
*/
|
||||
bool import_polygon(IndexedPolygons &polyhole, const std::string &filename)
|
||||
{
|
||||
Reindexer<Vector3f> uniqueVertices;
|
||||
std::ifstream ifs(filename.c_str());
|
||||
if (!ifs) return false;
|
||||
|
||||
std::string line;
|
||||
IndexedFace polygon;
|
||||
while (std::getline(ifs, line)) {
|
||||
std::stringstream ss(line);
|
||||
double X = 0.0, Y = 0.0, Z = 0.0;
|
||||
if (!(ss >> X)) {
|
||||
//ie blank lines => flag start of next polygon
|
||||
if (polygon.size() > 0) polyhole.faces.push_back(polygon);
|
||||
polygon.clear();
|
||||
continue;
|
||||
}
|
||||
char c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Y)) {
|
||||
std::cerr << "Y error\n";
|
||||
return false;
|
||||
}
|
||||
c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Z)) {
|
||||
std::cerr << "Z error\n";
|
||||
return false;
|
||||
}
|
||||
polygon.push_back(uniqueVertices.lookup(Vector3f(X, Y, Z)));
|
||||
}
|
||||
if (polygon.size() > 0) polyhole.faces.push_back(polygon);
|
||||
ifs.close();
|
||||
uniqueVertices.copy(std::back_inserter(polyhole.vertices));
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
OpenSCAD::debug = "GeometryUtils";
|
||||
|
||||
IndexedPolygons polyhole;
|
||||
Vector3f *normal = NULL;
|
||||
if (argc >= 2) {
|
||||
if (!import_polygon(polyhole, argv[1])) {
|
||||
std::cerr << "Error importing polygon" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
std::cerr << "Imported " << polyhole.faces.size() << " polygons" << std::endl;
|
||||
|
||||
if (argc == 3) {
|
||||
std::vector<std::string> strs;
|
||||
std::vector<double> normalvec;
|
||||
std::string arg(argv[2]);
|
||||
boost::split(strs, arg, boost::is_any_of(","));
|
||||
assert(strs.size() == 3);
|
||||
BOOST_FOREACH(const std::string &s, strs) normalvec.push_back(boost::lexical_cast<double>(s));
|
||||
normal = new Vector3f(normalvec[0], normalvec[1], normalvec[2]);
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
//construct two non-intersecting nested polygons
|
||||
Reindexer<Vector3f> uniqueVertices;
|
||||
IndexedFace polygon1;
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(0,0,0)));
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(2,0,0)));
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(2,2,0)));
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(0,2,0)));
|
||||
IndexedFace polygon2;
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(0.5,0.5,0)));
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(1.5,0.5,0)));
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(1.5,1.5,0)));
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(0.5,1.5,0)));
|
||||
polyhole.faces.push_back(polygon1);
|
||||
polyhole.faces.push_back(polygon2);
|
||||
uniqueVertices.copy(std::back_inserter(polyhole.vertices));
|
||||
}
|
||||
|
||||
std::vector<IndexedTriangle> triangles;
|
||||
bool ok = GeometryUtils::tessellatePolygonWithHoles(polyhole, triangles, normal);
|
||||
std::cerr << "Tessellated into " << triangles.size() << " triangles" << std::endl;
|
||||
|
||||
IndexedTriangleMesh trimesh;
|
||||
trimesh.vertices = polyhole.vertices;
|
||||
trimesh.triangles = triangles;
|
||||
|
||||
export_stl(trimesh, std::cout);
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
debug: DEFINES += DEBUG
|
||||
|
||||
TEMPLATE = app
|
||||
|
||||
INCLUDEPATH += ../src ../src/libtess2/Include
|
||||
DEPENDPATH += ../src
|
||||
|
||||
# Handle custom library location.
|
||||
# Used when manually installing 3rd party libraries
|
||||
isEmpty(OPENSCAD_LIBDIR) OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES)
|
||||
macx:isEmpty(OPENSCAD_LIBDIR) {
|
||||
exists(/opt/local):exists(/usr/local/Cellar) {
|
||||
error("It seems you might have libraries in both /opt/local and /usr/local. Please specify which one to use with qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
} else {
|
||||
exists(/opt/local) {
|
||||
#Default to MacPorts on Mac OS X
|
||||
message("Automatically searching for libraries in /opt/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /opt/local
|
||||
} else:exists(/usr/local/Cellar) {
|
||||
message("Automatically searching for libraries in /usr/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /usr/local
|
||||
}
|
||||
}
|
||||
}
|
||||
!isEmpty(OPENSCAD_LIBDIR) {
|
||||
QMAKE_INCDIR = $$OPENSCAD_LIBDIR/include
|
||||
QMAKE_LIBDIR = $$OPENSCAD_LIBDIR/lib
|
||||
}
|
||||
|
||||
TARGET = polyhole-tessellator-libtess2
|
||||
mac {
|
||||
CONFIG -= app_bundle
|
||||
}
|
||||
|
||||
macx {
|
||||
# Mac needs special care to link against the correct C++ library
|
||||
# We attempt to auto-detect it by inspecting Boost
|
||||
dirs = $${BOOSTDIR} $${QMAKE_LIBDIR}
|
||||
for(dir, dirs) {
|
||||
system(grep -q __112basic_string $${dir}/libboost_thread* >& /dev/null) {
|
||||
message("Detected libc++-linked boost in $${dir}")
|
||||
CONFIG += libc++
|
||||
}
|
||||
}
|
||||
|
||||
libc++ {
|
||||
QMAKE_CXXFLAGS += -stdlib=libc++
|
||||
QMAKE_LFLAGS += -stdlib=libc++
|
||||
QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++
|
||||
# libc++ on requires Mac OS X 10.7+
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
|
||||
}
|
||||
}
|
||||
|
||||
# See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs.
|
||||
*g++* {
|
||||
QMAKE_CXXFLAGS *= -fno-strict-aliasing
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-local-typedefs # ignored before 4.8
|
||||
}
|
||||
|
||||
*clang* {
|
||||
# http://llvm.org/bugs/show_bug.cgi?id=9182
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual
|
||||
# disable enormous amount of warnings about CGAL / boost / etc
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-variable
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-c++11-extensions
|
||||
# might want to actually turn this on once in a while
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-format-security
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Application configuration
|
||||
CONFIG += cgal
|
||||
CONFIG += boost
|
||||
CONFIG += eigen
|
||||
CONFIG += gettext
|
||||
|
||||
include(../common.pri)
|
||||
|
||||
HEADERS += ../src/GeometryUtils.cc \
|
||||
../src/linalg.h \
|
||||
../src/printutils.h \
|
||||
../src/grid.h \
|
||||
../src/libtess2/Include/tesselator.h \
|
||||
../src/libtess2/Source/bucketalloc.h \
|
||||
../src/libtess2/Source/dict.h \
|
||||
../src/libtess2/Source/geom.h \
|
||||
../src/libtess2/Source/mesh.h \
|
||||
../src/libtess2/Source/priorityq.h \
|
||||
../src/libtess2/Source/sweep.h \
|
||||
../src/libtess2/Source/tess.h
|
||||
|
||||
SOURCES += polyhole-tessellator-libtess2.cpp \
|
||||
../src/GeometryUtils.cc \
|
||||
../src/printutils.cc \
|
||||
../src/grid.cc \
|
||||
../src/libtess2/Source/bucketalloc.c \
|
||||
../src/libtess2/Source/dict.c \
|
||||
../src/libtess2/Source/geom.c \
|
||||
../src/libtess2/Source/mesh.c \
|
||||
../src/libtess2/Source/priorityq.c \
|
||||
../src/libtess2/Source/sweep.c \
|
||||
../src/libtess2/Source/tess.c
|
|
@ -1,4 +1,4 @@
|
|||
.TH OPENSCAD 1 "2014.03"
|
||||
.TH OPENSCAD 1 "2015.02"
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.SH NAME
|
||||
openscad \- script file based graphical CAD environment
|
||||
|
@ -19,7 +19,7 @@ the OpenSCAD user manual at http://en.wikibooks.org/wiki/OpenSCAD_User_Manual.
|
|||
|
||||
.TP
|
||||
\fB-o\fP \fIoutputfile\fP
|
||||
Export the given file to \fIoutputfile\fP in STL, OFF, DXF, or PNG
|
||||
Export the given file to \fIoutputfile\fP in STL, OFF, AMF, DXF, SVG, or PNG
|
||||
format, depending on file extension of \fIoutputfile\fP. If this
|
||||
option is given, the GUI will not be started.
|
||||
|
||||
|
@ -49,10 +49,10 @@ strings, care has to be taken that the shell does not consume quotation marks.
|
|||
More than one \fB-D\fP option can be given.
|
||||
.TP
|
||||
.B \-\-render
|
||||
If exporting an image, use a full CGAL render. (Default is an OpenCSG compile)
|
||||
If exporting an image, render the model fully. (Default is preview)
|
||||
.TP
|
||||
.B \-\-preview[=throwntogether]
|
||||
If exporting an image, use an OpenCSG previce (optionally in throwntogether mode for quicker rendering).
|
||||
If exporting an image, use an OpenCSG preview (optionally in throwntogether mode for quicker rendering).
|
||||
.TP
|
||||
.B \-\-csglimit=limit
|
||||
If exporting an image as an OpenCSG preview, stop rendering after encountering \fIlimit\fP elements to avoid runaway resource usage.
|
||||
|
@ -69,6 +69,12 @@ The first three are for the Eye position, while the next three are for
|
|||
the Center (or target) that the camera will look at. The 'up' vector is
|
||||
not currently supported.
|
||||
.TP
|
||||
.B \-\-viewall
|
||||
If exporting an image, adjust camera distance to fit the whole design in the frame
|
||||
.TP
|
||||
.B \-\-autocenter
|
||||
If exporting an image, center the design in the frame
|
||||
.TP
|
||||
.B \-\-imgsize=width,height
|
||||
If exporting an image, specify the pixel width and height
|
||||
.TP
|
||||
|
@ -76,6 +82,9 @@ If exporting an image, specify the pixel width and height
|
|||
If exporting an image, specify whether to use orthographic or perspective
|
||||
projection
|
||||
.TP
|
||||
.B \-\-colorscheme=[Cornfield|Sunset|Metallic|Starnight|BeforeDawn|Nature|DeepOcean]
|
||||
If exporting an image, use the specified color scheme for the rendering.
|
||||
.TP
|
||||
.B \-v, \-\-version
|
||||
Show version of program.
|
||||
.TP
|
||||
|
|
|
@ -70,6 +70,8 @@ o Notify package managers
|
|||
- OpenSUSE: Pavol Rusnak <prusnak@opensuse.org>
|
||||
- MacPorts: Frank Schima <macports2000@gmail.com>
|
||||
- Arch Linux: Kyle Keen <keenerd@gmail.com>
|
||||
o Update dev version to release version in documentation
|
||||
- https://en.wikibooks.org/wiki/OpenSCAD_User_Manual
|
||||
|
||||
Build and Upload Release Binaries
|
||||
---------------------------------
|
||||
|
|
|
@ -11,3 +11,15 @@ intersection()
|
|||
linear_extrude(height = 100, center = true, convexity= 3)
|
||||
import(file = "advance_intersection.dxf");
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -31,3 +31,15 @@ module demo_cut()
|
|||
|
||||
translate([ -30, 0, 0 ]) demo_proj();
|
||||
translate([ +30, 0, 0 ]) demo_cut();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -75,3 +75,15 @@ translate([ 30, 0, 0 ])
|
|||
nut();
|
||||
|
||||
spring();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
// Menger Sponge
|
||||
// By Nathan Hellweg, Emmett Lalish and Marius Kintel May 13, 2013
|
||||
// CC-BY-SA license
|
||||
|
||||
// Size of edge of sponge
|
||||
D=100;
|
||||
|
@ -32,3 +30,14 @@ difference() {
|
|||
rotate([45, atan(1/sqrt(2)), 0]) menger();
|
||||
translate([0,0,-D]) cube(2*D, center=true);
|
||||
}
|
||||
|
||||
// Written by Nathan Hellweg, Emmett Lalish and Marius Kintel May 13, 2013
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -8,3 +8,14 @@ intersection_for(i = [
|
|||
])
|
||||
rotate(i) cube([100, 20, 20], center = true);
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -43,3 +43,14 @@ module example006()
|
|||
|
||||
example006();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
// Example for offset() usage
|
||||
// (c) 2014 Torsten Paul
|
||||
// CC-BY-SA 4.0
|
||||
// offset.scad - Example for offset() usage in OpenSCAD
|
||||
|
||||
$fn = 40;
|
||||
|
||||
|
@ -31,3 +29,16 @@ translate([0, 0, foot_height]) {
|
|||
|
||||
%cylinder(r = 14, h = 100);
|
||||
%translate([0, 0, 100]) sphere(r = 30);
|
||||
|
||||
|
||||
|
||||
// Written in 2014 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -20,3 +20,15 @@ module clock_hour_words(word_offset=20.0,word_height=2.0) {
|
|||
}
|
||||
|
||||
clock_hour_words(word_offset=16.0,word_height=5.0);
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -22,3 +22,15 @@ for (i = [1:4])
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
echo(version=version());
|
||||
|
||||
module LetterBlock(letter, size=30) {
|
||||
difference() {
|
||||
translate([0,0,size/4])
|
||||
cube([size,size,size/2], center=true);
|
||||
translate([0,0,size/6])
|
||||
linear_extrude(height=size, convexity=3)
|
||||
text(letter,
|
||||
size=size*22/30,
|
||||
font="Tahoma",
|
||||
halign="center",
|
||||
valign="center");
|
||||
}
|
||||
}
|
||||
|
||||
LetterBlock("M");
|
||||
|
||||
// Written by Marius Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
|
@ -1,3 +1,5 @@
|
|||
// difference_cube.scad - Example for difference() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
module difference_cube()
|
||||
|
@ -10,3 +12,16 @@ module difference_cube()
|
|||
|
||||
difference_cube();
|
||||
|
||||
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// difference_sphere.scad - Example for difference() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
module difference_sphere()
|
||||
|
@ -25,3 +27,16 @@ module difference_sphere()
|
|||
|
||||
difference_sphere();
|
||||
|
||||
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// intersection.scad - Example for intersection() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
module example_intersection()
|
||||
|
@ -22,3 +24,16 @@ module example_intersection()
|
|||
|
||||
example_intersection();
|
||||
|
||||
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
// Example for text() usage
|
||||
// (c) 2014 Torsten Paul
|
||||
// CC-BY-SA 4.0
|
||||
// logo_and_text.scad - Example for text() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
|
@ -46,3 +44,15 @@ translate([110, 0, 80]) {
|
|||
translate([160, 0, -40]) black() t("Solid 3D CAD Modeller");
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Written in 2014 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// surface.scad - Example for surface() usage in OpenSCAD
|
||||
//
|
||||
// surface.dat generated using octave:
|
||||
// d = (sin(1:0.2:10)' * cos(1:0.2:10)) * 10;
|
||||
// save("surface.dat", "d");
|
||||
|
@ -13,3 +15,17 @@ intersection()
|
|||
surface(file = "surface.dat",
|
||||
center = true, convexity = 5);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
// Example for text() usage
|
||||
// (c) 2014 Torsten Paul
|
||||
// CC-BY-SA 4.0
|
||||
// text_on_cube.scad - Example for text() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
|
@ -38,3 +36,16 @@ difference() {
|
|||
translate([0, 0, o]) letter("\u263A");
|
||||
translate([0, 0, -o - letter_height]) letter("\u263C");
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Written in 2014 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// translate.scad - Example for translate() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
module example_translate()
|
||||
|
@ -19,3 +21,17 @@ module example_translate()
|
|||
}
|
||||
|
||||
example_translate();
|
||||
|
||||
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// union.scad - Example for union() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
module example_union()
|
||||
|
@ -19,3 +21,16 @@ module example_union()
|
|||
|
||||
example_union();
|
||||
|
||||
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
|
@ -64,3 +64,14 @@ translate([0, 0, -10])
|
|||
|
||||
// cutview();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -29,3 +29,14 @@ intersection()
|
|||
import(file = "fan_view.dxf", layer = "fan_side", origin = fan_side_center);
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -31,3 +31,15 @@ difference()
|
|||
import(file = "text.dxf", layer = "X");
|
||||
}
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -0,0 +1,450 @@
|
|||
solid OpenSCAD_Model
|
||||
facet normal -1 0 0
|
||||
outer loop
|
||||
vertex -15 15 0
|
||||
vertex -15 -15 0
|
||||
vertex -15 -15 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 -0 -0
|
||||
outer loop
|
||||
vertex -15 15 15
|
||||
vertex -15 15 0
|
||||
vertex -15 -15 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 6.88264 -10.8438 15
|
||||
vertex -6.49335 -10.8438 15
|
||||
vertex 15 -15 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -9.24535 11.3642 15
|
||||
vertex -15 15 15
|
||||
vertex -9.24535 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 5.72964 11.3642 15
|
||||
vertex -5.22034 11.3642 15
|
||||
vertex 0.351639 -0.977737 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -15 15 15
|
||||
vertex -15 -15 15
|
||||
vertex -9.24535 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -5.22034 11.3642 15
|
||||
vertex -15 15 15
|
||||
vertex -9.24535 11.3642 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 15 15 15
|
||||
vertex -15 15 15
|
||||
vertex -5.22034 11.3642 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -0 1
|
||||
outer loop
|
||||
vertex 9.82664 11.3642 15
|
||||
vertex 15 15 15
|
||||
vertex 5.72964 11.3642 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 15 15 15
|
||||
vertex -5.22034 11.3642 15
|
||||
vertex 5.72964 11.3642 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 9.82664 -10.8438 15
|
||||
vertex 15 15 15
|
||||
vertex 9.82664 11.3642 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 15 -15 15
|
||||
vertex 9.82664 -10.8438 15
|
||||
vertex 6.88264 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -0 1
|
||||
outer loop
|
||||
vertex 15 -15 15
|
||||
vertex 15 15 15
|
||||
vertex 9.82664 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -15 -15 15
|
||||
vertex 15 -15 15
|
||||
vertex -6.49335 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -6.49335 -10.8438 15
|
||||
vertex 1.07065 -4.69974 15
|
||||
vertex -0.726349 -4.69974 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -0 1
|
||||
outer loop
|
||||
vertex 6.88264 -10.8438 15
|
||||
vertex 6.88264 8.29724 15
|
||||
vertex 1.07065 -4.69974 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -15 -15 15
|
||||
vertex -6.49335 -10.8438 15
|
||||
vertex -9.24535 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 6.88264 -10.8438 15
|
||||
vertex 1.07065 -4.69974 15
|
||||
vertex -6.49335 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -6.49335 8.29724 15
|
||||
vertex -6.49335 -10.8438 15
|
||||
vertex -0.726349 -4.69974 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 15 -15 15
|
||||
vertex 15 -15 0
|
||||
vertex 15 15 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 15 15 15
|
||||
vertex 15 -15 15
|
||||
vertex 15 15 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 15 15 0
|
||||
vertex -15 15 0
|
||||
vertex -15 15 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 15 15 15
|
||||
vertex 15 15 0
|
||||
vertex -15 15 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 -1
|
||||
outer loop
|
||||
vertex 15 -15 0
|
||||
vertex -15 -15 0
|
||||
vertex -15 15 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0 -0 -1
|
||||
outer loop
|
||||
vertex 15 15 0
|
||||
vertex 15 -15 0
|
||||
vertex -15 15 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -1 0
|
||||
outer loop
|
||||
vertex -15 -15 15
|
||||
vertex -15 -15 0
|
||||
vertex 15 -15 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0 -1 -0
|
||||
outer loop
|
||||
vertex 15 -15 15
|
||||
vertex -15 -15 15
|
||||
vertex 15 -15 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -6.49335 8.29724 5
|
||||
vertex -9.24535 -10.8438 5
|
||||
vertex -6.49335 -10.8438 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -6.49335 8.29724 5
|
||||
vertex -9.24535 11.3642 5
|
||||
vertex -9.24535 -10.8438 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 1.07065 -4.69974 5
|
||||
vertex 0.351639 -0.977737 5
|
||||
vertex -0.726349 -4.69974 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 0.351639 -0.977737 5
|
||||
vertex -6.49335 8.29724 5
|
||||
vertex -0.726349 -4.69974 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex -5.22034 11.3642 5
|
||||
vertex -9.24535 11.3642 5
|
||||
vertex -6.49335 8.29724 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 9.82664 -10.8438 5
|
||||
vertex 6.88264 8.29724 5
|
||||
vertex 6.88264 -10.8438 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 9.82664 11.3642 5
|
||||
vertex 6.88264 8.29724 5
|
||||
vertex 9.82664 -10.8438 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 9.82664 11.3642 5
|
||||
vertex 5.72964 11.3642 5
|
||||
vertex 6.88264 8.29724 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 6.88264 8.29724 5
|
||||
vertex 0.351639 -0.977737 5
|
||||
vertex 1.07065 -4.69974 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 5.72964 11.3642 5
|
||||
vertex 0.351639 -0.977737 5
|
||||
vertex 6.88264 8.29724 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 0.351639 -0.977737 5
|
||||
vertex -5.22034 11.3642 5
|
||||
vertex -6.49335 8.29724 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.914058 0.405584 0
|
||||
outer loop
|
||||
vertex -0.726349 -4.69974 5
|
||||
vertex -6.49335 8.29724 5
|
||||
vertex -6.49335 8.29724 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.914058 0.405584 0
|
||||
outer loop
|
||||
vertex -0.726349 -4.69974 15
|
||||
vertex -0.726349 -4.69974 5
|
||||
vertex -6.49335 8.29724 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 1.07065 -4.69974 5
|
||||
vertex -0.726349 -4.69974 5
|
||||
vertex -0.726349 -4.69974 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 1.07065 -4.69974 15
|
||||
vertex 1.07065 -4.69974 5
|
||||
vertex -0.726349 -4.69974 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.912882 0.408223 0
|
||||
outer loop
|
||||
vertex 6.88264 8.29724 5
|
||||
vertex 1.07065 -4.69974 5
|
||||
vertex 1.07065 -4.69974 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.912882 0.408223 0
|
||||
outer loop
|
||||
vertex 6.88264 8.29724 15
|
||||
vertex 6.88264 8.29724 5
|
||||
vertex 1.07065 -4.69974 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 6.88264 -10.8438 15
|
||||
vertex 6.88264 -10.8438 5
|
||||
vertex 6.88264 8.29724 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 6.88264 8.29724 15
|
||||
vertex 6.88264 -10.8438 15
|
||||
vertex 6.88264 8.29724 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 9.82664 -10.8438 5
|
||||
vertex 6.88264 -10.8438 5
|
||||
vertex 6.88264 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 9.82664 -10.8438 15
|
||||
vertex 9.82664 -10.8438 5
|
||||
vertex 6.88264 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 0 0
|
||||
outer loop
|
||||
vertex 9.82664 11.3642 5
|
||||
vertex 9.82664 -10.8438 5
|
||||
vertex 9.82664 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 -0 -0
|
||||
outer loop
|
||||
vertex 9.82664 11.3642 15
|
||||
vertex 9.82664 11.3642 5
|
||||
vertex 9.82664 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -1 0
|
||||
outer loop
|
||||
vertex 5.72964 11.3642 15
|
||||
vertex 5.72964 11.3642 5
|
||||
vertex 9.82664 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0 -1 -0
|
||||
outer loop
|
||||
vertex 9.82664 11.3642 15
|
||||
vertex 5.72964 11.3642 15
|
||||
vertex 9.82664 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.916746 -0.399471 0
|
||||
outer loop
|
||||
vertex 0.351639 -0.977737 15
|
||||
vertex 0.351639 -0.977737 5
|
||||
vertex 5.72964 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0.916746 -0.399471 0
|
||||
outer loop
|
||||
vertex 5.72964 11.3642 15
|
||||
vertex 0.351639 -0.977737 15
|
||||
vertex 5.72964 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.911421 -0.411475 -0
|
||||
outer loop
|
||||
vertex -5.22034 11.3642 15
|
||||
vertex -5.22034 11.3642 5
|
||||
vertex 0.351639 -0.977737 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0.911421 -0.411475 -0
|
||||
outer loop
|
||||
vertex 0.351639 -0.977737 15
|
||||
vertex -5.22034 11.3642 15
|
||||
vertex 0.351639 -0.977737 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -1 0
|
||||
outer loop
|
||||
vertex -9.24535 11.3642 15
|
||||
vertex -9.24535 11.3642 5
|
||||
vertex -5.22034 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0 -1 -0
|
||||
outer loop
|
||||
vertex -5.22034 11.3642 15
|
||||
vertex -9.24535 11.3642 15
|
||||
vertex -5.22034 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex -9.24535 -10.8438 15
|
||||
vertex -9.24535 -10.8438 5
|
||||
vertex -9.24535 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex -9.24535 11.3642 15
|
||||
vertex -9.24535 -10.8438 15
|
||||
vertex -9.24535 11.3642 5
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex -6.49335 -10.8438 5
|
||||
vertex -9.24535 -10.8438 5
|
||||
vertex -9.24535 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex -6.49335 -10.8438 15
|
||||
vertex -6.49335 -10.8438 5
|
||||
vertex -9.24535 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 0 0
|
||||
outer loop
|
||||
vertex -6.49335 8.29724 5
|
||||
vertex -6.49335 -10.8438 5
|
||||
vertex -6.49335 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 -0 -0
|
||||
outer loop
|
||||
vertex -6.49335 8.29724 15
|
||||
vertex -6.49335 8.29724 5
|
||||
vertex -6.49335 -10.8438 15
|
||||
endloop
|
||||
endfacet
|
||||
endsolid OpenSCAD_Model
|
|
@ -1,10 +1,5 @@
|
|||
// chopped_blocks.stl is derived from Mblock.stl
|
||||
// (c) 2009 Will Langford licensed under
|
||||
// the Creative Commons - GNU GPL license.
|
||||
// http://www.thingiverse.com/thing:753
|
||||
//
|
||||
// Jonas Pfeil converted the file to binary
|
||||
// STL and duplicated its content.
|
||||
// chopped_blocks.stl is derived from Basics/LetterBlock.scad
|
||||
// The exported STL was converted to binary using MeshLab
|
||||
|
||||
echo(version=version());
|
||||
|
||||
|
@ -21,7 +16,7 @@ module blk2() {
|
|||
}
|
||||
|
||||
module chop() {
|
||||
translate([ -14, 0, 0 ])
|
||||
translate([ -18, 0, 0 ])
|
||||
import(file = "chopped_blocks.stl", convexity = 12);
|
||||
}
|
||||
|
||||
|
@ -36,3 +31,14 @@ difference() {
|
|||
}
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -13,3 +13,14 @@ for (i = [-100:5:+100]) {
|
|||
translate([ i, 0, -30 ]) cylinder(r1 = 6, r2 = 2, h = get_cylinder_h(i)*3);
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -27,3 +27,14 @@ module shape()
|
|||
// linear_extrude(convexity = 10, center = true)
|
||||
shape();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -16,3 +16,15 @@ polyhedron(
|
|||
[4, 0, 3]
|
||||
]
|
||||
);
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -36,3 +36,14 @@ module roundedBox(size, radius, sidesonly)
|
|||
translate([-15,0,0])roundedBox([20,30,40], 5, true);
|
||||
translate([15,0,0]) roundedBox([20,30,40], 5, false);
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
// example012.stl is Mblock.stl, (c) 2009 Will Langford
|
||||
// licensed under the Creative Commons - GNU GPL license.
|
||||
// http://www.thingiverse.com/thing:753
|
||||
// M.stl is generated from Basics/LetterBlock.scad
|
||||
|
||||
echo(version=version());
|
||||
|
||||
|
@ -8,6 +6,18 @@ difference()
|
|||
{
|
||||
sphere(20);
|
||||
|
||||
translate([ -2.92, 0.5, +20 ]) rotate([180, 0, 180])
|
||||
import("sphere.stl", convexity = 5);
|
||||
translate([ 0, 0.5, +20 ]) rotate([180, 0, 180])
|
||||
import("M.stl", convexity = 5);
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -156,3 +156,14 @@ if (mode == "exploded")
|
|||
if (mode == "assembled")
|
||||
assembled();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
|
|
@ -19,8 +19,9 @@ macx: {
|
|||
GETTEXT_LIBPATH = $$OPENSCAD_LIBRARIES_DIR/lib
|
||||
}
|
||||
}
|
||||
GETTEXT_CXXFLAGS=-I$$GETTEXT_INCLUDEPATH
|
||||
GETTEXT_LIBS=-L$$GETTEXT_LIBPATH -lintl -liconv
|
||||
!isEmpty(GETTEXT_INCLUDEPATH): GETTEXT_CXXFLAGS = -I$$GETTEXT_INCLUDEPATH
|
||||
!isEmpty(GETTEXT_LIBPATH): GETTEXT_LIBS = -L$$GETTEXT_LIBPATH
|
||||
GETTEXT_LIBS += -lintl -liconv
|
||||
}
|
||||
|
||||
QMAKE_CXXFLAGS += $$GETTEXT_CXXFLAGS
|
||||
|
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 42 KiB |
|
@ -1,3 +1,14 @@
|
|||
Taken from http://tango.freedesktop.org/Tango_Icon_Library, version 0.8.90 / public domain:
|
||||
|
||||
- prefsFeatures.png (converted from preferences-system.svg)
|
||||
|
||||
https://openclipart.org/detail/2281/information-icons-set-by-kuba / public domain:
|
||||
|
||||
- information-icons-error.png
|
||||
- information-icons-question.png
|
||||
- information-icons-info.png
|
||||
- information-icons-warning.png
|
||||
|
||||
https://openclipart.org/detail/171382/cross-icon-by-zawertun-171382 / public domain:
|
||||
|
||||
- close.png
|
||||
|
|
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 629 B |
Before Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 726 B |
After Width: | Height: | Size: 722 B |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 726 B |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 620 B |
After Width: | Height: | Size: 580 B |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 577 B |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 611 B |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 665 B |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 586 B |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 723 B |
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 529 B |
Before Width: | Height: | Size: 500 B After Width: | Height: | Size: 503 B |
After Width: | Height: | Size: 732 B |
After Width: | Height: | Size: 705 B |
After Width: | Height: | Size: 775 B |