diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/AppleEvents.cc | 2 | ||||
-rw-r--r-- | src/CGALEvaluator.cc | 13 | ||||
-rw-r--r-- | src/CGAL_Nef_polyhedron.h | 2 | ||||
-rw-r--r-- | src/CSGTermEvaluator.cc | 3 | ||||
-rw-r--r-- | src/MainWindow.h | 20 | ||||
-rw-r--r-- | src/ModuleCache.cc | 1 | ||||
-rw-r--r-- | src/cgal.h | 10 | ||||
-rw-r--r-- | src/cgalutils.cc | 3 | ||||
-rw-r--r-- | src/cgalutils.h | 2 | ||||
-rw-r--r-- | src/lexer.l | 2 | ||||
-rw-r--r-- | src/mainwin.cc | 252 | ||||
-rw-r--r-- | src/module.h | 1 | ||||
-rw-r--r-- | src/parsersettings.cc | 8 | ||||
-rw-r--r-- | src/svg.cc | 40 |
14 files changed, 221 insertions, 138 deletions
diff --git a/src/AppleEvents.cc b/src/AppleEvents.cc index 1fb4f99..3102792 100644 --- a/src/AppleEvents.cc +++ b/src/AppleEvents.cc @@ -15,7 +15,7 @@ OSErr eventHandler(const AppleEvent *, AppleEvent *, SRefCon ) if (mainwin) break; } if (mainwin) { - mainwin->actionReloadCompile(); + mainwin->actionReloadRenderCSG(); } return noErr; } diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index 686bde1..8e1b5eb 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -202,30 +202,31 @@ CGAL_Nef_polyhedron CGALEvaluator::applyResize(const CgaladvNode &node) if ( N.dim == 2 ) { CGAL_Iso_rectangle_2e bbox = bounding_box( *N.p2 ); CGAL_Point_2e min2(bbox.min()), max2(bbox.max()); - CGAL_Point_3 min3(min2.x(),min2.y(),0), max3(max2.x(),max2.y(),0); + CGAL_Point_3 min3(CGAL::to_double(min2.x()), CGAL::to_double(min2.y()), 0), + max3(CGAL::to_double(max2.x()), CGAL::to_double(max2.y()), 0); bb = CGAL_Iso_cuboid_3( min3, max3 ); } else { bb = bounding_box( *N.p3 ); } - std::vector<NT> scale, bbox_size; - for (int i=0;i<3;i++) scale.push_back( NT(1) ); + std::vector<NT3> scale, bbox_size; + for (int i=0;i<3;i++) scale.push_back( NT3(1) ); bbox_size.push_back( bb.xmax()-bb.xmin() ); bbox_size.push_back( bb.ymax()-bb.ymin() ); bbox_size.push_back( bb.zmax()-bb.zmin() ); for (int i=0;i<3;i++) { if (node.newsize[i]) { - if (bbox_size[i]==NT(0)) { + if (bbox_size[i]==NT3(0)) { PRINT("WARNING: Cannot resize in direction normal to flat object"); return N; } else { - scale[i] = NT(node.newsize[i]) / bbox_size[i]; + scale[i] = NT3(node.newsize[i]) / bbox_size[i]; } } } - NT autoscale = std::max( scale[0], std::max( scale[1], scale[2] )); + NT3 autoscale = std::max( scale[0], std::max( scale[1], scale[2] )); for (int i=0;i<3;i++) { if (node.autosize[i]) scale[i] = autoscale; } diff --git a/src/CGAL_Nef_polyhedron.h b/src/CGAL_Nef_polyhedron.h index cfab993..7f59861 100644 --- a/src/CGAL_Nef_polyhedron.h +++ b/src/CGAL_Nef_polyhedron.h @@ -1,7 +1,7 @@ #ifndef CGAL_NEF_POLYHEDRON_H_ #define CGAL_NEF_POLYHEDRON_H_ -#include "cgalfwd.h" +#include "cgal.h" #include "memory.h" #include <string> #include "linalg.h" diff --git a/src/CSGTermEvaluator.cc b/src/CSGTermEvaluator.cc index a6b654c..71cf149 100644 --- a/src/CSGTermEvaluator.cc +++ b/src/CSGTermEvaluator.cc @@ -115,6 +115,7 @@ Response CSGTermEvaluator::visit(State &state, const AbstractPolyNode &node) if (ps) { t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background, ps, node.modinst, node); + node.progress_report(); } } this->stored_term[node.index()] = t1; @@ -178,6 +179,7 @@ Response CSGTermEvaluator::visit(State &state, const RenderNode &node) shared_ptr<PolySet> ps; if (this->psevaluator) { ps = this->psevaluator->getPolySet(node, true); + node.progress_report(); } if (ps) { t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background, @@ -201,6 +203,7 @@ Response CSGTermEvaluator::visit(State &state, const CgaladvNode &node) if (ps) { t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background, ps, node.modinst, node); + node.progress_report(); } this->stored_term[node.index()] = t1; addToParent(state, node); diff --git a/src/MainWindow.h b/src/MainWindow.h index 1dcffeb..79e2080 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -28,6 +28,7 @@ public: QTimer *autoReloadTimer; std::string autoReloadId; + QTimer *waitAfterReloadTimer; ModuleContext top_ctx; FileModule *root_module; // Result of parsing @@ -76,8 +77,8 @@ private: void refreshDocument(); void updateTemporalVariables(); bool fileChangedOnDisk(); - bool compileTopLevelDocument(bool reload); - bool compile(bool reload, bool procevents); + void compileTopLevelDocument(); + void compile(bool reload, bool forcedone = false); void compileCSG(bool procevents); bool maybeSave(); bool checkEditorModified(); @@ -102,6 +103,10 @@ private slots: void actionReload(); void actionShowLibraryFolder(); + void instantiateRoot(); + void compileDone(bool didchange); + void compileEnded(); + private slots: void pasteViewportTranslation(); void pasteViewportRotation(); @@ -109,10 +114,13 @@ private slots: void preferences(); private slots: - void actionCompile(); + void actionRenderCSG(); + void csgRender(); + void csgReloadRender(); #ifdef ENABLE_CGAL void actionRenderCGAL(); void actionRenderCGALDone(class CGAL_Nef_polyhedron *); + void cgalRender(); #endif void actionDisplayAST(); void actionDisplayCSGTree(); @@ -131,6 +139,7 @@ public: void clearCurrentOutput(); public slots: + void actionReloadRenderCSG(); #ifdef ENABLE_OPENCSG void viewModeOpenCSG(); #endif @@ -163,13 +172,16 @@ public slots: void helpManual(); void helpLibrary(); void quit(); - void actionReloadCompile(); void checkAutoReload(); + void waitAfterReload(); void autoReloadSet(bool); private: static void report_func(const class AbstractNode*, void *vp, int mark); + char const * afterCompileSlot; + bool procevents; + class ProgressWidget *progresswidget; class CGALWorker *cgalworker; QMutex consolemutex; diff --git a/src/ModuleCache.cc b/src/ModuleCache.cc index 99c0b20..de9af01 100644 --- a/src/ModuleCache.cc +++ b/src/ModuleCache.cc @@ -53,7 +53,6 @@ FileModule *ModuleCache::evaluate(const std::string &filename) if (lib_mod) { if (this->entries[filename].cache_id == cache_id) { shouldCompile = false; - if (lib_mod->includesChanged()) { lib_mod = NULL; shouldCompile = true; @@ -39,8 +39,8 @@ using boost::uintmax_t; #include <CGAL/assertions_behaviour.h> #include <CGAL/exceptions.h> -typedef CGAL::Gmpq NT; -typedef CGAL::Extended_cartesian<NT> CGAL_Kernel2; +typedef CGAL::Gmpq NT2; +typedef CGAL::Extended_cartesian<NT2> CGAL_Kernel2; typedef CGAL::Nef_polyhedron_2<CGAL_Kernel2> CGAL_Nef_polyhedron2; typedef CGAL_Kernel2::Aff_transformation_2 CGAL_Aff_transformation2; @@ -48,7 +48,9 @@ typedef CGAL::Exact_predicates_exact_constructions_kernel CGAL_ExactKernel2; typedef CGAL::Polygon_2<CGAL_ExactKernel2> CGAL_Poly2; typedef CGAL::Polygon_with_holes_2<CGAL_ExactKernel2> CGAL_Poly2h; -typedef CGAL::Cartesian<NT> CGAL_Kernel3; + //typedef CGAL::Cartesian<NT> CGAL_Kernel3; +typedef CGAL::Exact_predicates_exact_constructions_kernel CGAL_Kernel3; +typedef CGAL::Exact_predicates_exact_constructions_kernel::FT NT3; typedef CGAL::Nef_polyhedron_3<CGAL_Kernel3> CGAL_Nef_polyhedron3; typedef CGAL_Nef_polyhedron3::Aff_transformation_3 CGAL_Aff_transformation; @@ -63,7 +65,7 @@ typedef CGAL::Iso_cuboid_3<CGAL_Kernel3> CGAL_Iso_cuboid_3; // CGAL_Nef_polyhedron2::Explorer::Point which is different than // CGAL_Kernel2::Point. Hence the suffix 'e' typedef CGAL_Nef_polyhedron2::Explorer::Point CGAL_Point_2e; -typedef CGAL::Iso_rectangle_2< CGAL::Simple_cartesian<NT> > CGAL_Iso_rectangle_2e; +typedef CGAL::Iso_rectangle_2<CGAL::Simple_cartesian<NT2> > CGAL_Iso_rectangle_2e; #ifdef PREV_NDEBUG diff --git a/src/cgalutils.cc b/src/cgalutils.cc index 8b4c476..bb46f1c 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -193,7 +193,8 @@ void ZRemover::visit( CGAL_Nef_polyhedron3::Halffacet_const_handle hfacet ) std::vector<CGAL_Nef_polyhedron2::Explorer::Point> contour; CGAL_For_all( c1, cend ) { CGAL_Nef_polyhedron3::Point_3 point3d = c1->source()->target()->point(); - CGAL_Nef_polyhedron2::Explorer::Point point2d( point3d.x(), point3d.y() ); + CGAL_Nef_polyhedron2::Explorer::Point point2d(CGAL::to_double(point3d.x()), + CGAL::to_double(point3d.y())); contour.push_back( point2d ); } if (contour.size()==0) continue; diff --git a/src/cgalutils.h b/src/cgalutils.h index 6ea7711..d25fd4c 100644 --- a/src/cgalutils.h +++ b/src/cgalutils.h @@ -1,7 +1,7 @@ #ifndef CGALUTILS_H_ #define CGALUTILS_H_ -#include <cgalfwd.h> +#include <cgal.h> class PolySet *createPolySetFromPolyhedron(const CGAL_Polyhedron &p); CGAL_Polyhedron *createPolyhedronFromPolySet(const class PolySet &ps); CGAL_Iso_cuboid_3 bounding_box( const CGAL_Nef_polyhedron3 &N ); diff --git a/src/lexer.l b/src/lexer.l index 0b8048f..3dd3b6b 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -100,7 +100,7 @@ E [Ee][+-]?{D}+ %% -include[ \t\r\n>]*"<" { BEGIN(cond_include); filepath = filename = "";} +include[ \t\r\n>]*"<" { BEGIN(cond_include); filepath = filename = ""; } <cond_include>{ [^\t\r\n>]*"/" { filepath = yytext; } [^\t\r\n>/]+ { filename = yytext; } diff --git a/src/mainwin.cc b/src/mainwin.cc index 95f7242..3d50d6f 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -206,9 +206,15 @@ MainWindow::MainWindow(const QString &filename) autoReloadTimer = new QTimer(this); autoReloadTimer->setSingleShot(false); + autoReloadTimer->setInterval(200); connect(autoReloadTimer, SIGNAL(timeout()), this, SLOT(checkAutoReload())); - connect(this->e_tval, SIGNAL(textChanged(QString)), this, SLOT(actionCompile())); + waitAfterReloadTimer = new QTimer(this); + waitAfterReloadTimer->setSingleShot(true); + waitAfterReloadTimer->setInterval(200); + connect(waitAfterReloadTimer, SIGNAL(timeout()), this, SLOT(waitAfterReload())); + + connect(this->e_tval, SIGNAL(textChanged(QString)), this, SLOT(actionRenderCSG())); connect(this->e_fps, SIGNAL(textChanged(QString)), this, SLOT(updatedFps())); animate_panel->hide(); @@ -288,8 +294,8 @@ MainWindow::MainWindow(const QString &filename) // Design menu connect(this->designActionAutoReload, SIGNAL(toggled(bool)), this, SLOT(autoReloadSet(bool))); - connect(this->designActionReloadAndCompile, SIGNAL(triggered()), this, SLOT(actionReloadCompile())); - connect(this->designActionCompile, SIGNAL(triggered()), this, SLOT(actionCompile())); + connect(this->designActionReloadAndCompile, SIGNAL(triggered()), this, SLOT(actionReloadRenderCSG())); + connect(this->designActionCompile, SIGNAL(triggered()), this, SLOT(actionRenderCSG())); #ifdef ENABLE_CGAL connect(this->designActionCompileAndRender, SIGNAL(triggered()), this, SLOT(actionRenderCGAL())); #else @@ -580,7 +586,7 @@ void MainWindow::updateTVal() double fps = this->e_fps->text().toDouble(&fps_ok); if (fps_ok) { if (fps <= 0) { - actionCompile(); + actionRenderCSG(); } else { double s = this->e_fsteps->text().toDouble(); double t = this->e_tval->text().toDouble() + 1/s; @@ -612,14 +618,96 @@ void MainWindow::refreshDocument() } /*! - Parse and evaluate the design => this->root_node - - Returns true if something was compiled, false if nothing was changed - and the root_node was left untouched. + compiles the design. Calls compileDone() if anything was compiled */ -bool MainWindow::compile(bool reload, bool procevents) +void MainWindow::compile(bool reload, bool forcedone) +{ + bool shouldcompiletoplevel = false; + bool didcompile = false; + + // Reload checks the timestamp of the toplevel file and refreshes if necessary, + if (reload) { + // Refresh files if it has changed on disk + if (fileChangedOnDisk() && checkEditorModified()) { + shouldcompiletoplevel = true; + refreshDocument(); + } + // If the file hasn't changed, we might still need to compile it + // if we haven't yet compiled the current text. + else { + QString current_doc = editor->toPlainText(); + if (current_doc != last_compiled_doc) shouldcompiletoplevel = true; + } + } + else { + shouldcompiletoplevel = true; + } + + if (!shouldcompiletoplevel && this->root_module && this->root_module->includesChanged()) { + shouldcompiletoplevel = true; + } + + if (shouldcompiletoplevel) { + console->clear(); + compileTopLevelDocument(); + didcompile = true; + } + + if (this->root_module) { + if (this->root_module->handleDependencies()) { + PRINTB("Module cache size: %d modules", ModuleCache::instance()->size()); + didcompile = true; + } + } + + // If we're auto-reloading, listen for a cascade of changes by starting a timer + // if something changed _and_ there are any external dependencies + if (reload && didcompile && this->root_module) { + if (this->root_module->hasIncludes() || + this->root_module->usesLibraries()) { + this->waitAfterReloadTimer->start(); + return; + } + } + compileDone(didcompile | forcedone); +} + +void MainWindow::waitAfterReload() +{ + if (this->root_module->handleDependencies()) { + this->waitAfterReloadTimer->start(); + return; + } + else { + compile(true, true); // In case file itself or top-level includes changed during dependency updates + } +} + +void MainWindow::compileDone(bool didchange) +{ + const char *callslot; + if (didchange) { + instantiateRoot(); + callslot = afterCompileSlot; + } + else { + callslot = "compileEnded"; + } + + this->procevents = false; + QMetaObject::invokeMethod(this, callslot); +} + +void MainWindow::compileEnded() +{ + clearCurrentOutput(); + GuiLocker::unlock(); + if (designActionAutoReload->isChecked()) autoReloadTimer->start(); +} + +void MainWindow::instantiateRoot() { - if (!compileTopLevelDocument(reload)) return false; + // Go on and instantiate root_node, then call the continuation slot // Invalidate renderers before we kill the CSG tree this->qglview->setRenderer(NULL); @@ -652,7 +740,7 @@ bool MainWindow::compile(bool reload, bool procevents) if (this->root_module) { // Evaluate CSG tree PRINT("Compiling design (CSG Tree generation)..."); - if (procevents) QApplication::processEvents(); + if (this->procevents) QApplication::processEvents(); AbstractNode::resetIndexCounter(); @@ -681,10 +769,8 @@ bool MainWindow::compile(bool reload, bool procevents) } else { PRINT("ERROR: Compilation failed!"); } - if (procevents) QApplication::processEvents(); + if (this->procevents) QApplication::processEvents(); } - - return true; } /*! @@ -1043,77 +1129,42 @@ bool MainWindow::fileChangedOnDisk() } /*! - If reload is true, does a timestamp check on the document and tries to reload it. - Otherwise, just reparses the current document and any dependencies, updates the - GUI accordingly and populates this->root_module. - Returns true if anything was compiled. */ -bool MainWindow::compileTopLevelDocument(bool reload) +void MainWindow::compileTopLevelDocument() { - bool shouldcompiletoplevel = !reload; - - if (this->root_module && this->root_module->includesChanged()) { - shouldcompiletoplevel = true; - } - - if (reload) { - // Refresh file if it has changed on disk - if (fileChangedOnDisk() && checkEditorModified()) { - shouldcompiletoplevel = true; - refreshDocument(); - } - // If the file hasn't changed, we might still need to compile it - // if we haven't yet compiled the current text. - else if (!editor->isContentModified()) { - QString current_doc = editor->toPlainText(); - if (current_doc != last_compiled_doc) shouldcompiletoplevel = true; - } - } + updateTemporalVariables(); - if (shouldcompiletoplevel) { - console->clear(); - - updateTemporalVariables(); - - this->last_compiled_doc = editor->toPlainText(); - std::string fulltext = - std::string(this->last_compiled_doc.toLocal8Bit().constData()) + - "\n" + commandline_commands; - - delete this->root_module; - this->root_module = NULL; - - this->root_module = parse(fulltext.c_str(), - this->fileName.isEmpty() ? - "" : - QFileInfo(this->fileName).absolutePath().toLocal8Bit(), - false); - - if (!animate_panel->isVisible()) { - highlighter->unhighlightLastError(); - if (!this->root_module) { - QTextCursor cursor = editor->textCursor(); - cursor.setPosition(parser_error_pos); - editor->setTextCursor(cursor); - highlighter->highlightError( parser_error_pos ); - } + this->last_compiled_doc = editor->toPlainText(); + std::string fulltext = + std::string(this->last_compiled_doc.toLocal8Bit().constData()) + + "\n" + commandline_commands; + + delete this->root_module; + this->root_module = NULL; + + this->root_module = parse(fulltext.c_str(), + this->fileName.isEmpty() ? + "" : + QFileInfo(this->fileName).absolutePath().toLocal8Bit(), + false); + + if (!animate_panel->isVisible()) { + highlighter->unhighlightLastError(); + if (!this->root_module) { + QTextCursor cursor = editor->textCursor(); + cursor.setPosition(parser_error_pos); + editor->setTextCursor(cursor); + highlighter->highlightError( parser_error_pos ); } - - } - - bool changed = shouldcompiletoplevel; - if (this->root_module) { - changed |= this->root_module->handleDependencies(); - if (changed) PRINTB("Module cache size: %d modules", ModuleCache::instance()->size()); } - - return changed; } void MainWindow::checkAutoReload() { - if (!this->fileName.isEmpty()) actionReloadCompile(); + if (!this->fileName.isEmpty()) { + actionReloadRenderCSG(); + } } void MainWindow::autoReloadSet(bool on) @@ -1143,15 +1194,22 @@ bool MainWindow::checkEditorModified() return true; } -void MainWindow::actionReloadCompile() +void MainWindow::actionReloadRenderCSG() { if (GuiLocker::isLocked()) return; - GuiLocker lock; + GuiLocker::lock(); + autoReloadTimer->stop(); setCurrentOutput(); // PRINT("Parsing design (AST generation)..."); // QApplication::processEvents(); - if (!compile(true, true)) return; + this->afterCompileSlot = "csgReloadRender"; + this->procevents = true; + compile(true); +} + +void MainWindow::csgReloadRender() +{ if (this->root_node) compileCSG(true); // Go to non-CGAL view mode @@ -1165,20 +1223,25 @@ void MainWindow::actionReloadCompile() viewModeThrownTogether(); #endif } - - clearCurrentOutput(); + compileEnded(); } -void MainWindow::actionCompile() +void MainWindow::actionRenderCSG() { if (GuiLocker::isLocked()) return; - GuiLocker lock; + GuiLocker::lock(); + autoReloadTimer->stop(); setCurrentOutput(); - console->clear(); PRINT("Parsing design (AST generation)..."); QApplication::processEvents(); - compile(false, !viewActionAnimate->isChecked()); + this->afterCompileSlot = "csgRender"; + this->procevents = !viewActionAnimate->isChecked(); + compile(false); +} + +void MainWindow::csgRender() +{ if (this->root_node) compileCSG(!viewActionAnimate->isChecked()); // Go to non-CGAL view mode @@ -1202,7 +1265,7 @@ void MainWindow::actionCompile() img.save(filename, "PNG"); } - clearCurrentOutput(); + compileEnded(); } #ifdef ENABLE_CGAL @@ -1210,15 +1273,19 @@ void MainWindow::actionCompile() void MainWindow::actionRenderCGAL() { if (GuiLocker::isLocked()) return; - GuiLocker lock; - + GuiLocker::lock(); + autoReloadTimer->stop(); setCurrentOutput(); - console->clear(); PRINT("Parsing design (AST generation)..."); QApplication::processEvents(); - compile(false, true); + this->afterCompileSlot = "cgalRender"; + this->procevents = true; + compile(false); +} +void MainWindow::cgalRender() +{ if (!this->root_module || !this->root_node) { return; } @@ -1238,7 +1305,6 @@ void MainWindow::actionRenderCGAL() progress_report_prep(this->root_node, report_func, this); - GuiLocker::lock(); // Will be unlocked in actionRenderCGALDone() this->cgalworker->start(this->tree); } @@ -1301,9 +1367,7 @@ void MainWindow::actionRenderCGALDone(CGAL_Nef_polyhedron *root_N) this->statusBar()->removeWidget(this->progresswidget); delete this->progresswidget; this->progresswidget = NULL; - clearCurrentOutput(); - - GuiLocker::unlock(); + compileEnded(); } #endif /* ENABLE_CGAL */ @@ -1616,7 +1680,7 @@ void MainWindow::viewModeAnimate() { if (viewActionAnimate->isChecked()) { animate_panel->show(); - actionCompile(); + actionRenderCSG(); updatedFps(); } else { animate_panel->hide(); diff --git a/src/module.h b/src/module.h index 6027fe6..b5c58af 100644 --- a/src/module.h +++ b/src/module.h @@ -107,6 +107,7 @@ private: }; bool include_modified(const IncludeFile &inc) const; + typedef boost::unordered_map<std::string, struct IncludeFile> IncludeContainer; IncludeContainer includes; bool is_handling_dependencies; diff --git a/src/parsersettings.cc b/src/parsersettings.cc index ab93b78..5ad30e1 100644 --- a/src/parsersettings.cc +++ b/src/parsersettings.cc @@ -35,19 +35,19 @@ fs::path search_libs(const fs::path &localpath) static bool check_valid(const fs::path &p, const std::vector<std::string> *openfilenames) { if (p.empty()) { -// PRINTB("WARNING: File path is blank: %s",p); + //PRINTB("WARNING: File path is blank: %s",p); return false; } if (!p.has_parent_path()) { -// PRINTB("WARNING: No parent path: %s",p); + //PRINTB("WARNING: No parent path: %s",p); return false; } if (!fs::exists(p)) { -// PRINTB("WARNING: File not found: %s",p); + //PRINTB("WARNING: File not found: %s",p); return false; } if (fs::is_directory(p)) { -// PRINTB("WARNING: %s invalid - points to a directory",p); + //PRINTB("WARNING: %s invalid - points to a directory",p); return false; } std::string fullname = boosty::stringy(p); @@ -70,29 +70,29 @@ std::string svg_axes() return out.str(); } -CGAL_Point_2e project_svg_3to2( CGAL_Point_3 p, CGAL_Iso_cuboid_3 bbox ) +CGAL_Nef_polyhedron2::Explorer::Point project_svg_3to2( CGAL_Point_3 p, CGAL_Iso_cuboid_3 bbox ) { - NT screenw(svg_px_width); - NT screenh(svg_px_height); - NT screenxc = screenw / 2; - NT screenyc = screenh / 2; - NT bboxx = ( bbox.xmax() - bbox.xmin() ); - NT bboxy = ( bbox.ymax() - bbox.ymin() ); - NT bboxz = ( bbox.zmax() - bbox.zmin() ); - NT largest_dim = CGAL::max( CGAL::max( bboxx, bboxy ), bboxz ); - NT bboxxc = bboxx / 2 + bbox.xmin(); - NT bboxyc = bboxy / 2 + bbox.ymin(); - NT bboxzc = bboxz / 2 + bbox.zmin(); - NT xinbox = ( p.x() - bboxxc ) / largest_dim; - NT yinbox = ( p.y() - bboxyc ) / largest_dim; - NT zinbox = ( p.z() - bboxzc ) / largest_dim; + CGAL_Kernel3::FT screenw(svg_px_width); + CGAL_Kernel3::FT screenh(svg_px_height); + CGAL_Kernel3::FT screenxc = screenw / 2; + CGAL_Kernel3::FT screenyc = screenh / 2; + CGAL_Kernel3::FT bboxx = ( bbox.xmax() - bbox.xmin() ); + CGAL_Kernel3::FT bboxy = ( bbox.ymax() - bbox.ymin() ); + CGAL_Kernel3::FT bboxz = ( bbox.zmax() - bbox.zmin() ); + CGAL_Kernel3::FT largest_dim = CGAL::max( CGAL::max( bboxx, bboxy ), bboxz ); + CGAL_Kernel3::FT bboxxc = bboxx / 2 + bbox.xmin(); + CGAL_Kernel3::FT bboxyc = bboxy / 2 + bbox.ymin(); + CGAL_Kernel3::FT bboxzc = bboxz / 2 + bbox.zmin(); + CGAL_Kernel3::FT xinbox = ( p.x() - bboxxc ) / largest_dim; + CGAL_Kernel3::FT yinbox = ( p.y() - bboxyc ) / largest_dim; + CGAL_Kernel3::FT zinbox = ( p.z() - bboxzc ) / largest_dim; // do simple fake paralell projection - NT tx = screenxc + xinbox * screenw / 1.618 + yinbox * screenh / 3.2; - NT ty = screenyc - zinbox * screenh / 1.618 - yinbox * screenh / 3.2; - return CGAL_Point_2e( tx, ty ); + CGAL_Kernel3::FT tx = screenxc + xinbox * screenw / 1.618 + yinbox * screenh / 3.2; + CGAL_Kernel3::FT ty = screenyc - zinbox * screenh / 1.618 - yinbox * screenh / 3.2; + return CGAL_Point_2e(CGAL::to_double(tx), CGAL::to_double(ty)); } -CGAL_Point_2e project_svg_2to2( CGAL_Point_2e p, CGAL_Iso_rectangle_2e bbox ) +CGAL_Point_2e project_svg_2to2(const CGAL_Point_2e &p, const CGAL_Iso_rectangle_2e &bbox) { double screenw = svg_px_width; double screenh = svg_px_height; @@ -122,7 +122,7 @@ std::string dump_cgal_nef_polyhedron2_face_svg( std::stringstream out; CGAL_For_all(c1, c2) { if ( explorer.is_standard( explorer.target(c1) ) ) { - CGAL_Point_2e source = explorer.point( explorer.source( c1 ) ); +CGAL_Nef_polyhedron2::Explorer::Point source = explorer.point( explorer.source( c1 ) ); CGAL_Point_2e target = explorer.point( explorer.target( c1 ) ); out << " <!-- Halfedge. Mark: " << c1->mark() << " -->\n"; std::string he_mark = boost::lexical_cast<std::string>(c1->mark()); |