mirror of https://github.com/vitalif/openscad
42 lines
831 B
C++
42 lines
831 B
C++
#include "cgalworker.h"
|
|
#include <QThread>
|
|
|
|
#include "Tree.h"
|
|
#include "GeometryEvaluator.h"
|
|
#include "progress.h"
|
|
#include "printutils.h"
|
|
|
|
CGALWorker::CGALWorker()
|
|
{
|
|
this->thread = new QThread();
|
|
if (this->thread->stackSize() < 1024*1024) this->thread->setStackSize(1024*1024);
|
|
connect(this->thread, SIGNAL(started()), this, SLOT(work()));
|
|
moveToThread(this->thread);
|
|
}
|
|
|
|
CGALWorker::~CGALWorker()
|
|
{
|
|
delete this->thread;
|
|
}
|
|
|
|
void CGALWorker::start(const Tree &tree)
|
|
{
|
|
this->tree = &tree;
|
|
this->thread->start();
|
|
}
|
|
|
|
void CGALWorker::work()
|
|
{
|
|
shared_ptr<const Geometry> root_geom;
|
|
try {
|
|
GeometryEvaluator evaluator(*this->tree);
|
|
root_geom = evaluator.evaluateGeometry(*this->tree->root(), true);
|
|
}
|
|
catch (const ProgressCancelException &e) {
|
|
PRINT("Rendering cancelled.");
|
|
}
|
|
|
|
emit done(root_geom);
|
|
thread->quit();
|
|
}
|