code reduction w.r.t offscreen rendering
This commit is contained in:
@@ -476,60 +476,6 @@ void View3DInventor::printPreview()
|
||||
|
||||
void View3DInventor::print(QPrinter* printer)
|
||||
{
|
||||
// The SVG output needs to be improved
|
||||
#if 0
|
||||
SoFCVectorizeSVGAction action;
|
||||
SoSVGVectorOutput* out = action.getSVGOutput();
|
||||
std::string tmp = Base::FileInfo::getTempFileName();
|
||||
if (!out || !out->openFile(tmp.c_str()))
|
||||
return;
|
||||
SoVectorizeAction::PageSize ps;
|
||||
switch (printer->pageSize()) {
|
||||
case QPrinter::A0:
|
||||
ps = SoVectorizeAction::A0;
|
||||
break;
|
||||
case QPrinter::A1:
|
||||
ps = SoVectorizeAction::A1;
|
||||
break;
|
||||
case QPrinter::A2:
|
||||
ps = SoVectorizeAction::A2;
|
||||
break;
|
||||
case QPrinter::A3:
|
||||
ps = SoVectorizeAction::A3;
|
||||
break;
|
||||
case QPrinter::A4:
|
||||
ps = SoVectorizeAction::A4;
|
||||
break;
|
||||
case QPrinter::A5:
|
||||
ps = SoVectorizeAction::A5;
|
||||
break;
|
||||
case QPrinter::A6:
|
||||
ps = SoVectorizeAction::A6;
|
||||
break;
|
||||
case QPrinter::A7:
|
||||
ps = SoVectorizeAction::A7;
|
||||
break;
|
||||
case QPrinter::A8:
|
||||
ps = SoVectorizeAction::A8;
|
||||
break;
|
||||
case QPrinter::A9:
|
||||
ps = SoVectorizeAction::A9;
|
||||
break;
|
||||
default:
|
||||
ps = SoVectorizeAction::A4;
|
||||
break;
|
||||
}
|
||||
QColor c = Qt::white;
|
||||
_viewer->saveGraphic(ps,c,&action);
|
||||
out->closeFile();
|
||||
QSvgRenderer svg;
|
||||
if (svg.load(QString::fromUtf8(tmp.c_str()))) {
|
||||
QPainter p(printer);
|
||||
svg.render(&p);
|
||||
p.end();
|
||||
}
|
||||
#else
|
||||
QImage img;
|
||||
QPainter p(printer);
|
||||
p.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing);
|
||||
if (!p.isActive() && !printer->outputFileName().isEmpty()) {
|
||||
@@ -539,56 +485,12 @@ void View3DInventor::print(QPrinter* printer)
|
||||
qApp->restoreOverrideCursor();
|
||||
return;
|
||||
}
|
||||
|
||||
QRect rect = printer->pageRect();
|
||||
|
||||
#if !defined(HAVE_QT5_OPENGL)
|
||||
bool pbuffer = QGLPixelBuffer::hasOpenGLPbuffers();
|
||||
#else
|
||||
bool pbuffer = false;
|
||||
#endif
|
||||
if (App::GetApplication().GetParameterGroupByPath
|
||||
("User parameter:BaseApp/Preferences/Document")->GetBool("DisablePBuffers",!pbuffer)) {
|
||||
previewFromFramebuffer(rect, img);
|
||||
}
|
||||
else {
|
||||
try {
|
||||
_viewer->savePicture(rect.width(), rect.height(), QColor(Qt::white), img);
|
||||
}
|
||||
catch (...) {
|
||||
previewFromFramebuffer(rect, img);
|
||||
}
|
||||
}
|
||||
|
||||
QImage img;
|
||||
_viewer->imageFromFramebuffer(rect.width(), rect.height(), 8, QColor(255,255,255), img);
|
||||
p.drawImage(0,0,img);
|
||||
p.end();
|
||||
#endif
|
||||
}
|
||||
|
||||
void View3DInventor::previewFromFramebuffer(const QRect& rect, QImage& img)
|
||||
{
|
||||
static_cast<QtGLWidget*>(_viewer->getGLWidget())->makeCurrent();
|
||||
|
||||
#if QT_VERSION >= 0x040600
|
||||
QtGLFramebufferObjectFormat format;
|
||||
format.setSamples(8);
|
||||
format.setAttachment(QtGLFramebufferObject::Depth);
|
||||
#if defined(HAVE_QT5_OPENGL)
|
||||
format.setInternalTextureFormat(GL_RGB32F_ARB);
|
||||
#else
|
||||
format.setInternalTextureFormat(GL_RGB);
|
||||
#endif
|
||||
QtGLFramebufferObject fbo(rect.width(), rect.height(), format);
|
||||
#else
|
||||
QtGLFramebufferObject fbo(rect.width(), rect.height(), QtGLFramebufferObject::Depth);
|
||||
#endif
|
||||
const QColor col = _viewer->backgroundColor();
|
||||
bool on = _viewer->hasGradientBackground();
|
||||
_viewer->setBackgroundColor(QColor(255,255,255));
|
||||
_viewer->setGradientBackground(false);
|
||||
_viewer->renderToFramebuffer(&fbo);
|
||||
_viewer->setBackgroundColor(col);
|
||||
_viewer->setGradientBackground(on);
|
||||
img = fbo.toImage();
|
||||
}
|
||||
|
||||
// **********************************************************************************
|
||||
|
||||
Reference in New Issue
Block a user