summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvo Noorhoff <ivo.knutsel@gmail.com>2013-07-28 11:42:35 (GMT)
committerIvo Noorhoff <ivo.knutsel@gmail.com>2013-07-28 11:42:35 (GMT)
commit61e6178d1b71d78832aab4fbe7bd2d3550626b87 (patch)
tree72e4ecc418c68187606d1c10e64dcd687e6b4651 /src
parentc3e7d4bf038d5e4998c4b938346f27bfa65af106 (diff)
In this commit i'll change just the Qt project, c and header files to get OpenSCAD
building and working on Windows 7 compiled with Visual Studio Express 2012. A couple of things needed changing : * MSVC 2012 has no trunc or round, i have added those to mathc99 and included mathc99 to the files needed. The implementations were taken from boost. * MSVC 2012 stl does now allow accessing out of bounds elements in std:vector as an array, so "chain->objects[i]" will fail in "OpenCSGRenderer::renderCSGChain". Whatever the platform, it will me a good idea to change this code to something that does not trigger undefined behavior. * MSVC 2012 cannot figure out the types involved in "if (file_size == 80 + 4 + 50*facenum) {", i have added a cast to force it to "if (file_size == static_cast<std::streamoff>(80 + 4 + 50*facenum)) {". The next round would be regression testing and debugging and possibly more changes to the OpenSCAD main code. The round after that would be changing the .pro and .pri files to create correct visual studio solutions.
Diffstat (limited to 'src')
-rw-r--r--src/GLView.cc1
-rw-r--r--src/OpenCSGRenderer.cc2
-rw-r--r--src/control.cc1
-rw-r--r--src/import.cc4
-rw-r--r--src/lexer.l2
-rw-r--r--src/mathc99.cc6
-rw-r--r--src/mathc99.h1
7 files changed, 13 insertions, 4 deletions
diff --git a/src/GLView.cc b/src/GLView.cc
index b4fb8d6..822a246 100644
--- a/src/GLView.cc
+++ b/src/GLView.cc
@@ -2,6 +2,7 @@
#include "stdio.h"
#include "rendersettings.h"
+#include "mathc99.h"
#ifdef _WIN32
#include <GL/wglew.h>
diff --git a/src/OpenCSGRenderer.cc b/src/OpenCSGRenderer.cc
index b4acf82..e65a259 100644
--- a/src/OpenCSGRenderer.cc
+++ b/src/OpenCSGRenderer.cc
@@ -77,8 +77,8 @@ void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo,
std::vector<OpenCSG::Primitive*> primitives;
size_t j = 0;
for (size_t i = 0;; i++) {
- const CSGChainObject &i_obj = chain->objects[i];
bool last = i == chain->objects.size();
+ const CSGChainObject &i_obj = last ? chain->objects[i-1] : chain->objects[i];
if (last || i_obj.type == CSGTerm::TYPE_UNION) {
if (j+1 != i) {
OpenCSG::render(primitives);
diff --git a/src/control.cc b/src/control.cc
index c5ad09b..50e5eae 100644
--- a/src/control.cc
+++ b/src/control.cc
@@ -31,6 +31,7 @@
#include "builtin.h"
#include "printutils.h"
#include <sstream>
+#include "mathc99.h"
enum control_type_e {
CHILD,
diff --git a/src/import.cc b/src/import.cc
index b5d67d2..3897331 100644
--- a/src/import.cc
+++ b/src/import.cc
@@ -212,7 +212,9 @@ PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const
#ifdef BOOST_BIG_ENDIAN
uint32_byte_swap( facenum );
#endif
- if (file_size == 80 + 4 + 50*facenum) binary = true;
+ if (file_size == static_cast<std::streamoff>(80 + 4 + 50*facenum)) {
+ binary = true;
+ }
}
f.seekg(0);
diff --git a/src/lexer.l b/src/lexer.l
index 3dd3b6b..e08c6c7 100644
--- a/src/lexer.l
+++ b/src/lexer.l
@@ -30,7 +30,7 @@
#include "handle_dep.h"
#include "printutils.h"
#include "parsersettings.h"
-#include "parser_yacc.h"
+#include "parser_yacc.hpp"
#include "module.h"
#include <assert.h>
#include <boost/foreach.hpp>
diff --git a/src/mathc99.cc b/src/mathc99.cc
index 335446e..13f4c64 100644
--- a/src/mathc99.cc
+++ b/src/mathc99.cc
@@ -3,8 +3,12 @@
#ifdef WIN32
#include <algorithm>
+double trunc(double a) {
+ return (a >= 0) ? floor(a) : ceil(a);
+}
+
double round(double a) {
- return a > 0 ? floor(a+0.5) : ceil(a-0.5);
+ return a < 0 ? ceil(a - 0.5f) : floor(a + 0.5f);
}
float fmin(float a, float b) {
diff --git a/src/mathc99.h b/src/mathc99.h
index ebc2d66..ae31a22 100644
--- a/src/mathc99.h
+++ b/src/mathc99.h
@@ -5,6 +5,7 @@
#include <cmath>
//for native win32 builds we need to provide C99 math functions by ourselves
+double trunc(double a);
double round(double a);
float fmin(float a, float b);
float fmax(float a, float b);
contact: Jan Huwald // Impressum