summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Camera.h12
-rw-r--r--src/CsgInfo.h19
-rw-r--r--src/GLView.cc17
-rw-r--r--src/OGL_helper.h1
-rw-r--r--src/OpenCSGRenderer.cc6
-rw-r--r--src/export_png.cc3
-rw-r--r--src/openscad.cc2
-rw-r--r--tests/csgtestcore.cc2
8 files changed, 26 insertions, 36 deletions
diff --git a/src/Camera.h b/src/Camera.h
index 3e71347..d79fc8f 100644
--- a/src/Camera.h
+++ b/src/Camera.h
@@ -12,12 +12,14 @@ There are two different types of cameras represented in this class:
*Gimbal camera - uses Euler Angles, object translation, and viewer distance
*Vector camera - uses 'eye', 'center', and 'up' vectors ('lookat' style)
-There are two modes of projection, Perspective and Orthogonal.
+They are not necessarily kept in sync. There are two modes of
+projection, Perspective and Orthogonal.
*/
#include <vector>
#include <Eigen/Geometry>
+#include "rendersettings.h"
class Camera
{
@@ -26,7 +28,6 @@ public:
enum ProjectionType { ORTHOGONAL, PERSPECTIVE } projection;
Camera() {
type = Camera::NONE;
- projection = Camera::PERSPECTIVE;
}
Camera( enum CameraType e )
{
@@ -40,8 +41,8 @@ public:
Eigen::Vector3d cameradir(1, 1, -0.5);
eye = center - 500 * cameradir;
}
- pixel_width = 512;
- pixel_height = 512;
+ pixel_width = RenderSettings::inst()->img_width;
+ pixel_height = RenderSettings::inst()->img_height;
projection = Camera::PERSPECTIVE;
}
@@ -58,12 +59,13 @@ public:
} else {
assert( "Gimbal cam needs 7 numbers, Vector camera needs 6" );
}
+ projection = Camera::PERSPECTIVE;
}
// Vectorcam
Eigen::Vector3d eye;
Eigen::Vector3d center; // (aka 'target')
- Eigen::Vector3d up;
+ Eigen::Vector3d up; // not used currently
// Gimbalcam
Eigen::Vector3d object_trans;
diff --git a/src/CsgInfo.h b/src/CsgInfo.h
index 0413bec..37fe0d0 100644
--- a/src/CsgInfo.h
+++ b/src/CsgInfo.h
@@ -29,20 +29,15 @@ public:
CSGChain *highlights_chain;
std::vector<shared_ptr<CSGTerm> > background_terms;
CSGChain *background_chain;
-
int normalizelimit;
- void (*progress_function)(void);
- void set_progress_function( void (*funcname)(void) )
- {
- progress_function = funcname;
- }
+ void (*progress_function)();
void call_progress_function()
{
if (progress_function) progress_function();
}
- bool prep_chains( const Tree &tree )
+ bool compile_chains( const Tree &tree )
{
const AbstractNode *root_node = tree.root();
CGALEvaluator cgalevaluator(tree);
@@ -50,7 +45,7 @@ public:
boost::shared_ptr<CSGTerm> root_raw_term = evaluator.evaluateCSGTerm( *root_node, this->highlight_terms, this->background_terms );
if (!root_raw_term) {
- fprintf(stderr, "Error: CSG generation failed! (no top level object found)\n");
+ PRINT("Error: CSG generation failed! (no top level object found)");
call_progress_function();
return false;
}
@@ -62,16 +57,16 @@ public:
if (this->root_norm_term) {
this->root_chain = new CSGChain();
this->root_chain->import(this->root_norm_term);
- fprintf(stderr, "Normalized CSG tree has %d elements\n", int(this->root_chain->polysets.size()));
+ fprintf(stderr, "Normalized CSG tree has %d elements", int(this->root_chain->polysets.size()));
}
else {
this->root_chain = NULL;
- fprintf(stderr, "WARNING: CSG normalization resulted in an empty tree\n");
+ PRINT("WARNING: CSG normalization resulted in an empty tree");
call_progress_function();
}
if (this->highlight_terms.size() > 0) {
- std::cerr << "Compiling highlights (" << this->highlight_terms.size() << " CSG Trees)...\n";
+ PRINTB("Compiling highlights (%i CSG Trees)...", this->highlight_terms.size() );
call_progress_function();
this->highlights_chain = new CSGChain();
for (unsigned int i = 0; i < this->highlight_terms.size(); i++) {
@@ -81,7 +76,7 @@ public:
}
if (this->background_terms.size() > 0) {
- std::cerr << "Compiling background (%d CSG Trees)..." << this->background_terms.size() << " CSG Trees)...\n";
+ PRINTB("Compiling background (%i CSG Trees)...", this->background_terms.size());
call_progress_function();
this->background_chain = new CSGChain();
for (unsigned int i = 0; i < this->background_terms.size(); i++) {
diff --git a/src/GLView.cc b/src/GLView.cc
index e7878ea..aff3583 100644
--- a/src/GLView.cc
+++ b/src/GLView.cc
@@ -87,8 +87,6 @@ void GLView::setupVectorCamOrtho(bool offset)
void GLView::setCamera( Camera &cam )
{
this->cam = cam;
- // kludge to make showAxes() work on vector camera
- cam.viewer_distance = 10*3*(cam.center - cam.eye).norm();
}
void GLView::paintGL()
@@ -412,10 +410,10 @@ void GLView::showSmallaxes()
// FIXME: This was an attempt to keep contrast with background, but is suboptimal
// (e.g. nearly invisible against a gray background).
-// int r,g,b;
-// r=g=b=0;
-// bgcol.getRgb(&r, &g, &b);
-// glColor3f((255.0f-r)/255.0f, (255.0f-g)/255.0f, (255.0f-b)/255.0f);
+ // int r,g,b;
+ // r=g=b=0;
+ // bgcol.getRgb(&r, &g, &b);
+ // glColor3f((255.0f-r)/255.0f, (255.0f-g)/255.0f, (255.0f-b)/255.0f);
glColor3f(0.0f, 0.0f, 0.0f);
glBegin(GL_LINES);
// X Label
@@ -428,6 +426,8 @@ void GLView::showSmallaxes()
glVertex3d(zlabel_x-3, zlabel_y-3, 0); glVertex3d(zlabel_x+3, zlabel_y-3, 0);
glVertex3d(zlabel_x-3, zlabel_y+3, 0); glVertex3d(zlabel_x+3, zlabel_y+3, 0);
glVertex3d(zlabel_x-3, zlabel_y-3, 0); glVertex3d(zlabel_x+3, zlabel_y+3, 0);
+ // FIXME - depends on gimbal camera 'viewer distance'.. how to fix this
+ // for VectorCamera?
glEnd();
//Restore perspective for next paint
@@ -437,10 +437,9 @@ void GLView::showSmallaxes()
void GLView::showAxes()
{
+ // FIXME: doesn't work under Vector Camera
// Large gray axis cross inline with the model
// FIXME: This is always gray - adjust color to keep contrast with background
- // FIXME - depends on gimbal camera 'viewer distance'.. how to fix this
- // for VectorCamera?
glLineWidth(1);
glColor3d(0.5, 0.5, 0.5);
glBegin(GL_LINES);
@@ -456,7 +455,7 @@ void GLView::showAxes()
void GLView::showCrosshairs()
{
- // FIXME: this might not work with non-gimbal camera?
+ // FIXME: this might not work with Vector camera
// FIXME: Crosshairs and axes are lighted, this doesn't make sense and causes them
// to change color based on view orientation.
glLineWidth(3);
diff --git a/src/OGL_helper.h b/src/OGL_helper.h
index 24611e7..74f92bf 100644
--- a/src/OGL_helper.h
+++ b/src/OGL_helper.h
@@ -544,7 +544,6 @@ namespace OGL {
if (switches[SNC_AXES]) glCallList(object_list_+3); // axis
}
-
void debug(std::ostream& os = std::cerr) const
{
os << "OGL::Polyhedron" << std::endl;
diff --git a/src/OpenCSGRenderer.cc b/src/OpenCSGRenderer.cc
index 8e4aba9..eb66687 100644
--- a/src/OpenCSGRenderer.cc
+++ b/src/OpenCSGRenderer.cc
@@ -38,7 +38,7 @@ class OpenCSGPrim : public OpenCSG::Primitive
public:
OpenCSGPrim(OpenCSG::Operation operation, unsigned int convexity) :
OpenCSG::Primitive(operation, convexity) { }
- boost::shared_ptr<PolySet> ps;
+ shared_ptr<PolySet> ps;
Transform3d m;
PolySet::csgmode_e csgmode;
virtual void render() {
@@ -71,10 +71,6 @@ void OpenCSGRenderer::draw(bool /*showfaces*/, bool showedges) const
}
}
-#include "CGALEvaluator.h"
-#include "CSGTermEvaluator.h"
-#include "csgtermnormalizer.h"
-
void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo,
bool highlight, bool background) const
{
diff --git a/src/export_png.cc b/src/export_png.cc
index 33fb85b..5c11b9f 100644
--- a/src/export_png.cc
+++ b/src/export_png.cc
@@ -59,7 +59,7 @@ void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
{
#ifdef ENABLE_OPENCSG
CsgInfo csgInfo = CsgInfo();
- if ( !csgInfo.prep_chains( tree ) ) {
+ if ( !csgInfo.compile_chains( tree ) ) {
fprintf(stderr,"Couldn't initialize OpenCSG chains\n");
return;
}
@@ -75,7 +75,6 @@ void export_png_with_opencsg(Tree &tree, Camera &cam, std::ostream &output)
if (cam.type == Camera::NONE) {
cam.type = Camera::VECTOR;
- cam.center << 0,0,0;
double radius = 1.0;
if (csgInfo.root_chain) {
BoundingBox bbox = csgInfo.root_chain->getBoundingBox();
diff --git a/src/openscad.cc b/src/openscad.cc
index c2aab3d..6c46bb4 100644
--- a/src/openscad.cc
+++ b/src/openscad.cc
@@ -124,7 +124,7 @@ Camera get_camera( po::variables_map vm )
string proj = vm["projection"].as<string>();
if (proj=="o" || proj=="ortho" || proj=="orthogonal")
camera.projection = Camera::ORTHOGONAL;
- else if (proj=="p" || proj == "perspective")
+ else if (proj=="p" || proj=="perspective")
camera.projection = Camera::PERSPECTIVE;
else {
fprintf(stderr,"projection needs to be 'o' or 'p' for ortho or perspective");
diff --git a/tests/csgtestcore.cc b/tests/csgtestcore.cc
index 5820e44..7583a41 100644
--- a/tests/csgtestcore.cc
+++ b/tests/csgtestcore.cc
@@ -167,7 +167,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type)
Tree tree(root_node);
CsgInfo csgInfo = CsgInfo();
- if ( !csgInfo.prep_chains( tree ) ) return 1;
+ if ( !csgInfo.compile_chains( tree ) ) return 1;
fs::current_path(original_path);
contact: Jan Huwald // Impressum