summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bison.pri10
-rw-r--r--boost.pri7
-rw-r--r--cgal.pri6
-rw-r--r--flex.pri2
-rw-r--r--glew.pri2
-rw-r--r--mjau.gdb2
-rw-r--r--openscad.pro2
-rw-r--r--src/dxfrotextrude.cc15
-rw-r--r--src/grid.h14
-rw-r--r--src/lexer.l7
-rw-r--r--src/openscad.cc180
-rw-r--r--src/parser.y2
12 files changed, 149 insertions, 100 deletions
diff --git a/bison.pri b/bison.pri
index cf67768..003e09b 100644
--- a/bison.pri
+++ b/bison.pri
@@ -1,15 +1,17 @@
#setup bison for qmake
bison.name = Bison ${QMAKE_FILE_IN}
bison.input = BISONSOURCES
-bison.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.parser.cpp
-bison.commands = bison -d -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.parser.cpp ${QMAKE_FILE_IN}
+bison.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp
+bison.commands = bison -d -p ${QMAKE_FILE_BASE} -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp ${QMAKE_FILE_IN}
+bison.commands += && mv ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h
bison.CONFIG += target_predeps
bison.variable_out = GENERATED_SOURCES
silent:bison.commands = @echo Bison ${QMAKE_FILE_IN} && $$bison.commands
QMAKE_EXTRA_COMPILERS += bison
bison_header.input = BISONSOURCES
-bison_header.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.parser.hpp
-bison_header.commands = bison -d -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.parser.cpp ${QMAKE_FILE_IN}
+bison_header.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h
+bison_header.commands = bison -d -p ${QMAKE_FILE_BASE} -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp ${QMAKE_FILE_IN}
+bison_header.commands += && mv ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h
bison_header.CONFIG += target_predeps no_link
silent:bison_header.commands = @echo Bison ${QMAKE_FILE_IN} && $$bison.commands
QMAKE_EXTRA_COMPILERS += bison_header
diff --git a/boost.pri b/boost.pri
index 8907b2d..b9f47d0 100644
--- a/boost.pri
+++ b/boost.pri
@@ -6,6 +6,13 @@ boost {
!isEmpty(BOOST_DIR) {
INCLUDEPATH += $$BOOST_DIR
message("boost location: $$BOOST_DIR")
+ win32:LIBS += -L$$BOOST_DIR/lib
}
}
+
+ win32 {
+ LIBS += -llibboost_thread-vc90-mt-s-1_46_1 -llibboost_program_options-vc90-mt-s-1_46_1
+ } else {
+ LIBS += -lboost_thread -lboost_program_options
+ }
}
diff --git a/cgal.pri b/cgal.pri
index ed01a44..3a30b22 100644
--- a/cgal.pri
+++ b/cgal.pri
@@ -7,16 +7,16 @@ cgal {
CGAL_DIR = $$(CGALDIR)
!isEmpty(CGAL_DIR) {
INCLUDEPATH += $$CGAL_DIR/include
+ win32: INCLUDEPATH += $$CGAL_DIR/auxiliary/gmp/include
LIBS += -L$$CGAL_DIR/lib
message("CGAL location: $$CGAL_DIR")
}
}
- LIBS += -lCGAL -lmpfr -lboost_thread
win32 {
- LIBS += -lmpir
+ LIBS += $$CGAL_DIR/auxiliary/gmp/lib/libmpfr-4.lib -lCGAL-vc90-mt-gd
} else {
- LIBS += -lgmp
+ LIBS += -lgmp -lmpfr -lCGAL
}
QMAKE_CXXFLAGS += -frounding-math
}
diff --git a/flex.pri b/flex.pri
index 11f6878..15fccd0 100644
--- a/flex.pri
+++ b/flex.pri
@@ -3,7 +3,7 @@
flex.name = Flex ${QMAKE_FILE_IN}
flex.input = FLEXSOURCES
flex.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.lexer.cpp
-flex.commands = flex -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.lexer.cpp ${QMAKE_FILE_IN}
+flex.commands = flex -P ${QMAKE_FILE_BASE} -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.lexer.cpp ${QMAKE_FILE_IN}
flex.CONFIG += target_predeps
flex.variable_out = GENERATED_SOURCES
silent:flex.commands = @echo Lex ${QMAKE_FILE_IN} && $$flex.commands
diff --git a/glew.pri b/glew.pri
index 189b953..f2aca4e 100644
--- a/glew.pri
+++ b/glew.pri
@@ -15,5 +15,5 @@ glew {
}
unix:LIBS += -lGLEW
- win32:LIBS += -lglew32
+ win32:LIBS += -lglew32s
}
diff --git a/mjau.gdb b/mjau.gdb
index 6d749f1..7e420bb 100644
--- a/mjau.gdb
+++ b/mjau.gdb
@@ -1 +1 @@
-set environment DYLD_LIBRARY_PATH=/Users/kintel/code/metalab/checkout/OpenSCAD/OpenCSG-1.3.0/lib:/Users/kintel/code/metalab/checkout/OpenSCAD/qcodeedit-2.2.3/install/lib \ No newline at end of file
+set environment DYLD_LIBRARY_PATH=/Users/kintel/code/metalab/checkout/OpenSCAD/libraries/install/lib
diff --git a/openscad.pro b/openscad.pro
index d83606f..5b3a398 100644
--- a/openscad.pro
+++ b/openscad.pro
@@ -32,7 +32,7 @@ win32 {
}
DEFINES += OPENSCAD_VERSION=$$VERSION
-win32:DEFINES += _USE_MATH_DEFINES NOMINMAX _CRT_SECURE_NO_WARNINGS
+win32:DEFINES += _USE_MATH_DEFINES NOMINMAX _CRT_SECURE_NO_WARNINGS YY_NO_UNISTD_H
#disable warning about too long decorated names
win32:QMAKE_CXXFLAGS += -wd4503
diff --git a/src/dxfrotextrude.cc b/src/dxfrotextrude.cc
index a7a6cf1..1be2265 100644
--- a/src/dxfrotextrude.cc
+++ b/src/dxfrotextrude.cc
@@ -159,7 +159,13 @@ PolySet *DxfRotateExtrudeNode::render_polyset(render_mode_e) const
int fragments = get_fragments_from_r(max_x, fn, fs, fa);
- double points[fragments][dxf->paths[i].points.count()][3];
+ double ***points;
+ points = new double**[fragments];
+ for (int j=0; j < fragments; j++) {
+ points[j] = new double*[dxf->paths[i].points.count()];
+ for (int k=0; k < dxf->paths[i].points.count(); k++)
+ points[j][k] = new double[3];
+ }
for (int j = 0; j < fragments; j++) {
double a = (j*2*M_PI) / fragments;
@@ -203,6 +209,13 @@ PolySet *DxfRotateExtrudeNode::render_polyset(render_mode_e) const
}
}
}
+
+ for (int j=0; j < fragments; j++) {
+ for (int k=0; k < dxf->paths[i].points.count(); k++)
+ delete[] points[j][k];
+ delete[] points[j];
+ }
+ delete[] points;
}
PolySet::ps_cache.insert(key, new PolySet::ps_cache_entry(ps->link()));
diff --git a/src/grid.h b/src/grid.h
index 306751f..703e006 100644
--- a/src/grid.h
+++ b/src/grid.h
@@ -2,7 +2,11 @@
#define GRID_H_
#include "mathc99.h"
+#ifdef WIN32
+typedef __int64 int64_t;
+#else
#include <stdint.h>
+#endif
#include <stdlib.h>
#include <QHash>
@@ -33,8 +37,9 @@ public:
for (int64_t jy = iy - 1; jy <= iy + 1; jy++) {
if (!db.contains(QPair<int64_t,int64_t>(jx, jy)))
continue;
- if (abs(ix-jx) + abs(iy-jy) < dist) {
- dist = abs(ix-jx) + abs(iy-jy);
+ int d = abs(int(ix-jx)) + abs(int(iy-jy));
+ if (d < dist) {
+ dist = d;
ix = jx;
iy = jy;
}
@@ -92,8 +97,9 @@ public:
for (int64_t jz = iz - 1; jz <= iz + 1; jz++) {
if (!db.contains(QPair<QPair<int64_t,int64_t>,int64_t>(QPair<int64_t,int64_t>(jx, jy), jz)))
continue;
- if (abs(ix-jx) + abs(iy-jy) + abs(iz-jz) < dist) {
- dist = abs(ix-jx) + abs(iy-jy) + abs(iz-jz);
+ int d = abs(int(ix-jx)) + abs(int(iy-jy)) + abs(int(iz-jz));
+ if (d < dist) {
+ dist = d;
ix = jx;
iy = jy;
iz = jz;
diff --git a/src/lexer.l b/src/lexer.l
index 985dbbe..0da3f5d 100644
--- a/src/lexer.l
+++ b/src/lexer.l
@@ -32,6 +32,13 @@
#include <QStack>
#include <QFileInfo>
#include <QDir>
+
+//isatty for visual c++
+#ifdef _MSC_VER
+int __cdecl _isatty(int _FileHandle);
+#define isatty _isatty
+#endif
+
QString* stringcontents;
int lexerget_lineno(void);
#ifdef __GNUC__
diff --git a/src/openscad.cc b/src/openscad.cc
index 7bae683..54e80ae 100644
--- a/src/openscad.cc
+++ b/src/openscad.cc
@@ -33,6 +33,9 @@
#include "export.h"
#include "builtin.h"
+#include <string>
+#include <vector>
+
#ifdef ENABLE_CGAL
#include "cgal.h"
#include <CGAL/assertions_behaviour.h>
@@ -43,17 +46,23 @@
#include <QDir>
#include <QSet>
#include <QSettings>
-#include <getopt.h>
+#include <boost/program_options.hpp>
#ifdef Q_WS_MAC
#include "EventFilter.h"
#include "AppleEvents.h"
#endif
+#ifdef _MSC_VER
+#define snprintf _snprintf
+#endif
+
+namespace po = boost::program_options;
+
static void help(const char *progname)
{
fprintf(stderr, "Usage: %s [ { -s stl_file | -o off_file | -x dxf_file } [ -d deps_file ] ]\\\n"
- "%*s[ -m make_command ] [ -D var=val [..] ] filename\n",
- progname, int(strlen(progname))+8, "");
+ "%*s[ -m make_command ] [ -D var=val [..] ] filename\n",
+ progname, int(strlen(progname))+8, "");
exit(1);
}
@@ -72,6 +81,9 @@ QString currentdir;
QString examplesdir;
QString librarydir;
+using std::string;
+using std::vector;
+
void handle_dep(QString filename)
{
if (filename.startsWith("/"))
@@ -123,75 +135,70 @@ int main(int argc, char **argv)
const char *off_output_file = NULL;
const char *dxf_output_file = NULL;
const char *deps_output_file = NULL;
+
+ po::options_description desc("Allowed options");
+ desc.add_options()
+ ("help,h", "help message")
+ ("version,v", "print the version")
+ ("s", po::value<string>(), "stl-file")
+ ("o", po::value<string>(), "off-file")
+ ("x", po::value<string>(), "dxf-file")
+ ("d", po::value<string>(), "deps-file")
+ ("m", po::value<string>(), "make file")
+ ("D", po::value<vector<string> >(), "var=val")
+ ;
+
+ po::positional_options_description p;
+ p.add("input-file", -1);
+
+ po::variables_map vm;
+ po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
+// po::notify(vm);
- static struct option long_options[] =
- {
- {"version", no_argument, 0, 'v'},
- {"help", no_argument, 0, 'h'},
- {0, 0, 0, 0}
- };
- int option_index = 0;
-
- int opt;
- while ((opt = getopt_long(argc, argv, "s:o:x:d:m:D:vh", long_options, &option_index)) != -1)
- {
- switch (opt)
- {
- case 0:
- switch (option_index)
- {
- case 'v':
- version();
- break;
- case 'h':
- help(argv[0]);
- break;
- }
- break;
- case 'v':
- version();
- break;
- case 'h':
+ if (vm.count("help")) help(argv[0]);
+ if (vm.count("version")) version();
+
+ if (vm.count("s")) {
+ if (stl_output_file || off_output_file || dxf_output_file)
help(argv[0]);
- break;
- case 's':
- if (stl_output_file || off_output_file || dxf_output_file)
- help(argv[0]);
- stl_output_file = optarg;
- break;
- case 'o':
- if (stl_output_file || off_output_file || dxf_output_file)
- help(argv[0]);
- off_output_file = optarg;
- break;
- case 'x':
- if (stl_output_file || off_output_file || dxf_output_file)
- help(argv[0]);
- dxf_output_file = optarg;
- break;
- case 'd':
- if (deps_output_file)
- help(argv[0]);
- deps_output_file = optarg;
- break;
- case 'm':
- if (make_command)
- help(argv[0]);
- make_command = optarg;
- break;
- case 'D':
- commandline_commands += QString(optarg) + QString(";\n");
- break;
- default:
+ stl_output_file = vm["s"].as<string>().c_str();
+ }
+ if (vm.count("o")) {
+ if (stl_output_file || off_output_file || dxf_output_file)
help(argv[0]);
+ off_output_file = vm["o"].as<string>().c_str();
+ }
+ if (vm.count("x")) {
+ if (stl_output_file || off_output_file || dxf_output_file)
+ help(argv[0]);
+ dxf_output_file = vm["x"].as<string>().c_str();
+ }
+ if (vm.count("d")) {
+ if (deps_output_file)
+ help(argv[0]);
+ deps_output_file = vm["d"].as<string>().c_str();
+ }
+ if (vm.count("m")) {
+ if (make_command)
+ help(argv[0]);
+ make_command = vm["m"].as<string>().c_str();
+ }
+
+ if (vm.count("D")) {
+ const vector<string> &commands = vm["D"].as<vector<string> >();
+
+ for (vector<string>::const_iterator i = commands.begin(); i != commands.end(); i++) {
+ commandline_commands.append(i->c_str());
+ commandline_commands.append(";\n");
}
}
- if (optind < argc)
- filename = argv[optind++];
+ if (vm.count("input-file")) {
+ filename = vm["input-file"].as< vector<string> >().begin()->c_str();
+ }
#ifndef ENABLE_MDI
- if (optind != argc)
+ if (vm["input-file"].as<vector<string> >().size() > 1)
help(argv[0]);
#endif
@@ -205,16 +212,16 @@ int main(int argc, char **argv)
if (exdir.cd("../share/openscad/examples")) {
examplesdir = exdir.path();
} else
- if (exdir.cd("../../share/openscad/examples")) {
- examplesdir = exdir.path();
- } else
- if (exdir.cd("../../examples")) {
- examplesdir = exdir.path();
- } else
+ if (exdir.cd("../../share/openscad/examples")) {
+ examplesdir = exdir.path();
+ } else
+ if (exdir.cd("../../examples")) {
+ examplesdir = exdir.path();
+ } else
#endif
- if (exdir.cd("examples")) {
- examplesdir = exdir.path();
- }
+ if (exdir.cd("examples")) {
+ examplesdir = exdir.path();
+ }
QDir libdir(QApplication::instance()->applicationDirPath());
#ifdef Q_WS_MAC
@@ -224,16 +231,16 @@ int main(int argc, char **argv)
if (libdir.cd("../share/openscad/libraries")) {
librarydir = libdir.path();
} else
- if (libdir.cd("../../share/openscad/libraries")) {
- librarydir = libdir.path();
- } else
- if (libdir.cd("../../libraries")) {
- librarydir = libdir.path();
- } else
+ if (libdir.cd("../../share/openscad/libraries")) {
+ librarydir = libdir.path();
+ } else
+ if (libdir.cd("../../libraries")) {
+ librarydir = libdir.path();
+ } else
#endif
- if (libdir.cd("libraries")) {
- librarydir = libdir.path();
- }
+ if (libdir.cd("libraries")) {
+ librarydir = libdir.path();
+ }
if (stl_output_file || off_output_file || dxf_output_file)
{
@@ -338,8 +345,13 @@ int main(int argc, char **argv)
#endif
#ifdef ENABLE_MDI
new MainWindow(qfilename);
- while (optind < argc)
- new MainWindow(QFileInfo(original_path, argv[optind++]).absoluteFilePath());
+ vector<string> inputFiles;
+ if (vm.count("input-file")) {
+ inputFiles = vm["input-files"].as<vector<string> >();
+ for (vector<string>::const_iterator i = inputFiles.begin()+1; i != inputFiles.end(); i++) {
+ new MainWindow(QFileInfo(original_path, i->c_str()).absoluteFilePath());
+ }
+ }
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
#else
MainWindow *m = new MainWindow(qfilename);
diff --git a/src/parser.y b/src/parser.y
index 26cd118..aad5ba0 100644
--- a/src/parser.y
+++ b/src/parser.y
@@ -35,7 +35,9 @@
#include <sys/types.h>
#include <sys/stat.h>
+#ifndef _MSC_VER
#include <unistd.h>
+#endif
#include "module.h"
#include "expression.h"
contact: Jan Huwald // Impressum