Adaption of FreeCAD to QuarterWidget

-removes all soqtviewer references
-create a quarter adaptor class which implements missing functionality
-adopts freecad code to make use of SoRenderManager and changed View3DInventorViewer  interface
This commit is contained in:
Stefan Tröger
2014-07-19 15:18:14 +02:00
committed by wmayer
parent e1265c874d
commit 72cab0c002
74 changed files with 1855 additions and 1180 deletions

View File

@@ -53,7 +53,6 @@
# include <Inventor/events/SoEvent.h>
# include <Inventor/fields/SoSFString.h>
# include <Inventor/fields/SoSFColor.h>
# include <Inventor/Qt/SoQtBasic.h>
#endif
# include <QStackedWidget>
@@ -74,7 +73,6 @@
#include "SoFCVectorizeSVGAction.h"
// build in Inventor
#include "Inventor/Qt/viewers/SoQtExaminerViewer.h"
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoOrthographicCamera.h>
@@ -112,15 +110,29 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W
hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
hGrp->Attach(this);
//anti aliasing settings
QGLFormat f;
switch( hGrp->GetInt("AntiAliasing",0) ) {
case View3DInventorViewer::MSAA2x:
f.setSampleBuffers(true);
f.setSamples(2);
break;
case View3DInventorViewer::MSAA4x:
f.setSampleBuffers(true);
f.setSamples(4);
break;
case View3DInventorViewer::MSAA8x:
f.setSampleBuffers(true);
f.setSamples(8);
break;
case View3DInventorViewer::None:
default:
break;
};
// create the inventor widget and set the defaults
#if !defined (NO_USE_QT_MDI_AREA)
#if SOQT_MAJOR_VERSION > 1 || (SOQT_MAJOR_VERSION == 1 && SOQT_MINOR_VERSION >= 5)
// #0000282: Window gets smaller on loading files
// #0001028: Main window resized when a document is opened
_viewer = new View3DInventorViewer(this);
#else
_viewer = new View3DInventorViewer(0);
#endif
#if !defined (NO_USE_QT_MDI_AREA)
_viewer = new View3DInventorViewer(f,this);
_viewer->setDocument(this->_pcDocument);
stack->addWidget(_viewer->getWidget());
// http://forum.freecadweb.org/viewtopic.php?f=3&t=6055&sid=150ed90cbefba50f1e2ad4b4e6684eba
@@ -131,7 +143,7 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W
//_viewer->getGLWidget()->setAttribute(Qt::WA_NoMousePropagation);
setCentralWidget(stack);
#else
_viewer = new View3DInventorViewer(this);
_viewer = new View3DInventorViewer(f,this);
_viewer->setDocument(this->_pcDocument);
#endif
// apply the user settings
@@ -144,7 +156,6 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W
OnChange(*hGrp,"BackgroundColor3");
OnChange(*hGrp,"BackgroundColor4");
OnChange(*hGrp,"UseBackgroundColorMid");
OnChange(*hGrp,"AntiAliasing");
OnChange(*hGrp,"ShowFPS");
OnChange(*hGrp,"Orthographic");
OnChange(*hGrp,"HeadlightColor");
@@ -322,7 +333,7 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M
_viewer->navigationStyle()->setZoomStep(val);
}
else if (strcmp(Reason,"EyeDistance") == 0) {
_viewer->setStereoOffset(rGrp.GetFloat("EyeDistance",5.0));
_viewer->getSoRenderManager()->setStereoOffset(rGrp.GetFloat("EyeDistance",5.0));
}
else if (strcmp(Reason,"CornerCoordSystem") == 0) {
_viewer->setFeedbackVisibility(rGrp.GetBool("CornerCoordSystem",true));
@@ -333,9 +344,6 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M
else if (strcmp(Reason,"Gradient") == 0) {
_viewer->setGradientBackground((rGrp.GetBool("Gradient",true)));
}
else if (strcmp(Reason,"AntiAliasing") == 0) {
_viewer->setAntiAliasingMode(View3DInventorViewer::AntiAliasing(rGrp.GetInt("AntiAliasing",0)));
}
else if (strcmp(Reason,"ShowFPS") == 0) {
_viewer->setEnabledFPSCounter(rGrp.GetBool("ShowFPS",false));
}
@@ -377,7 +385,7 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M
r2 = ((col2 >> 24) & 0xff) / 255.0; g2 = ((col2 >> 16) & 0xff) / 255.0; b2 = ((col2 >> 8) & 0xff) / 255.0;
r3 = ((col3 >> 24) & 0xff) / 255.0; g3 = ((col3 >> 16) & 0xff) / 255.0; b3 = ((col3 >> 8) & 0xff) / 255.0;
r4 = ((col4 >> 24) & 0xff) / 255.0; g4 = ((col4 >> 16) & 0xff) / 255.0; b4 = ((col4 >> 8) & 0xff) / 255.0;
_viewer->setBackgroundColor(SbColor(r1, g1, b1));
_viewer->setBackgroundColor(QColor::fromRgbF(r1, g1, b1));
if (rGrp.GetBool("UseBackgroundColorMid",false) == false)
_viewer->setGradientBackgroundColor(SbColor(r2, g2, b2), SbColor(r3, g3, b3));
else
@@ -399,7 +407,7 @@ void View3DInventor::onUpdate(void)
Base::Console().Log("Acti: Gui::View3DInventor::onUpdate()");
#endif
update();
_viewer->render();
_viewer->redraw();
}
void View3DInventor::viewAll()
@@ -527,9 +535,9 @@ void View3DInventor::print(QPrinter* printer)
void View3DInventor::previewFromFramebuffer(const QRect& rect, QImage& img)
{
QGLFramebufferObject fbo(rect.width(), rect.height(), QGLFramebufferObject::Depth);
const SbColor col = _viewer->getBackgroundColor();
const QColor col = _viewer->backgroundColor();
bool on = _viewer->hasGradientBackground();
_viewer->setBackgroundColor(SbColor(1.0f,1.0f,1.0f));
_viewer->setBackgroundColor(QColor(255,255,255));
_viewer->setGradientBackground(false);
_viewer->renderToFramebuffer(&fbo);
_viewer->setBackgroundColor(col);
@@ -553,51 +561,27 @@ bool View3DInventor::onMsg(const char* pMsg, const char** ppReturn)
else if(strcmp("ViewSelection",pMsg) == 0) {
_viewer->viewSelection();
return true;
// comment out on older Inventor
#if SOQT_MAJOR_VERSION > 1 || (SOQT_MAJOR_VERSION == 1 && SOQT_MINOR_VERSION >= 2)
}
else if(strcmp("SetStereoRedGreen",pMsg) == 0 ) {
_viewer->setStereoType(SoQtViewer::STEREO_ANAGLYPH);
_viewer->setProperty("StereoMode", Quarter::SoQTQuarterAdaptor::ANAGLYPH);
return true;
}
else if(strcmp("SetStereoQuadBuff",pMsg) == 0 ) {
_viewer->setStereoType(SoQtViewer::STEREO_QUADBUFFER );
_viewer->setProperty("StereoMode", Quarter::SoQTQuarterAdaptor::QUAD_BUFFER );
return true;
}
else if(strcmp("SetStereoInterleavedRows",pMsg) == 0 ) {
_viewer->setStereoType(SoQtViewer::STEREO_INTERLEAVED_ROWS );
_viewer->setProperty("StereoMode", Quarter::SoQTQuarterAdaptor::INTERLEAVED_ROWS );
return true;
}
else if(strcmp("SetStereoInterleavedColumns",pMsg) == 0 ) {
_viewer->setStereoType(SoQtViewer::STEREO_INTERLEAVED_COLUMNS );
_viewer->setProperty("StereoMode", Quarter::SoQTQuarterAdaptor::INTERLEAVED_COLUMNS );
return true;
}
else if(strcmp("SetStereoOff",pMsg) == 0 ) {
_viewer->setStereoType(SoQtViewer::STEREO_NONE );
_viewer->setProperty("StereoMode", Quarter::SoQTQuarterAdaptor::MONO );
return true;
#else
}
else if(strcmp("SetStereoRedGreen",pMsg) == 0 ) {
Base::Console().Warning("Use SoQt 1.2.x or later!\n");
return true;
}
else if(strcmp("SetStereoQuadBuff",pMsg) == 0 ) {
Base::Console().Warning("Use SoQt 1.2.x or later!\n");
return true;
}
else if(strcmp("SetStereoInterleavedRows",pMsg) == 0 ) {
Base::Console().Warning("Use SoQt 1.2.x or later!\n");
return true;
}
else if(strcmp("SetStereoInterleavedColumns",pMsg) == 0 ) {
Base::Console().Warning("Use SoQt 1.2.x or later!\n");
return true;
}
else if(strcmp("SetStereoOff",pMsg) == 0 ) {
Base::Console().Warning("Use SoQt 1.2.x or later!\n");
return true;
#endif
}
}
else if(strcmp("Example1",pMsg) == 0 ) {
SoSeparator * root = new SoSeparator;
Texture3D(root);
@@ -617,7 +601,7 @@ bool View3DInventor::onMsg(const char* pMsg, const char** ppReturn)
return true;
}
else if(strcmp("GetCamera",pMsg) == 0 ) {
SoCamera * Cam = _viewer->getCamera();
SoCamera * Cam = _viewer->getSoRenderManager()->getCamera();
if (!Cam) return false;
*ppReturn = SoFCDB::writeNodesToString(Cam).c_str();
return true;
@@ -766,7 +750,7 @@ bool View3DInventor::onHasMsg(const char* pMsg) const
bool View3DInventor::setCamera(const char* pCamera)
{
SoCamera * CamViewer = _viewer->getCamera();
SoCamera * CamViewer = _viewer->getSoRenderManager()->getCamera();
if (!CamViewer) {
throw Base::Exception("No camera set so far...");
}
@@ -785,7 +769,7 @@ bool View3DInventor::setCamera(const char* pCamera)
if (Cam->getTypeId() != CamViewer->getTypeId())
{
_viewer->setCameraType(Cam->getTypeId());
CamViewer = _viewer->getCamera();
CamViewer = _viewer->getSoRenderManager()->getCamera();
}
SoPerspectiveCamera * CamViewerP = 0;