add 'no shading' and 'hidden line' styles
This commit is contained in:
@@ -125,6 +125,8 @@
|
||||
|
||||
#include <Inventor/draggers/SoCenterballDragger.h>
|
||||
#include <Inventor/annex/Profiler/SoProfiler.h>
|
||||
#include <Inventor/elements/SoOverrideElement.h>
|
||||
#include <Inventor/elements/SoLightModelElement.h>
|
||||
#include <QGesture>
|
||||
|
||||
#include "SoTouchEvents.h"
|
||||
@@ -351,6 +353,7 @@ View3DInventorViewer::View3DInventorViewer(const QGLFormat& format, QWidget* par
|
||||
|
||||
void View3DInventorViewer::init()
|
||||
{
|
||||
shading = true;
|
||||
fpsEnabled = false;
|
||||
vboEnabled = false;
|
||||
|
||||
@@ -707,8 +710,26 @@ void View3DInventorViewer::setOverrideMode(const std::string& mode)
|
||||
overrideMode = mode;
|
||||
|
||||
auto views = getDocument()->getViewProvidersOfType(Gui::ViewProvider::getClassTypeId());
|
||||
for (auto view : views)
|
||||
view->setOverrideMode(mode);
|
||||
if (mode == "No Shading") {
|
||||
this->shading = false;
|
||||
std::string flatLines = "Flat Lines";
|
||||
for (auto view : views)
|
||||
view->setOverrideMode(flatLines);
|
||||
this->getSoRenderManager()->setRenderMode(SoRenderManager::AS_IS);
|
||||
}
|
||||
else if (mode == "Hidden Line") {
|
||||
this->shading = true;
|
||||
std::string shaded = "Shaded";
|
||||
for (auto view : views)
|
||||
view->setOverrideMode(shaded);
|
||||
this->getSoRenderManager()->setRenderMode(SoRenderManager::HIDDEN_LINE);
|
||||
}
|
||||
else {
|
||||
this->shading = true;
|
||||
for (auto view : views)
|
||||
view->setOverrideMode(mode);
|
||||
this->getSoRenderManager()->setRenderMode(SoRenderManager::AS_IS);
|
||||
}
|
||||
}
|
||||
|
||||
/// update override mode. doesn't affect providers
|
||||
@@ -965,6 +986,12 @@ void View3DInventorViewer::savePicture(int w, int h, const QColor& bg, QImage& i
|
||||
root->addChild(cb);
|
||||
}
|
||||
|
||||
if (!this->shading) {
|
||||
SoLightModel* lm = new SoLightModel;
|
||||
lm->model = SoLightModel::BASE_COLOR;
|
||||
root->addChild(lm);
|
||||
}
|
||||
|
||||
root->addChild(getHeadlight());
|
||||
root->addChild(camera);
|
||||
SoCallback* gl = new SoCallback;
|
||||
@@ -1327,6 +1354,10 @@ void View3DInventorViewer::renderToFramebuffer(QGLFramebufferObject* fbo)
|
||||
uint32_t id = this->getSoRenderManager()->getGLRenderAction()->getCacheContext();
|
||||
gl.setCacheContext(id);
|
||||
gl.setTransparencyType(SoGLRenderAction::SORTED_OBJECT_SORTED_TRIANGLE_BLEND);
|
||||
if (!this->shading) {
|
||||
SoLightModelElement::set(gl.getState(), selectionRoot, SoLightModelElement::BASE_COLOR);
|
||||
SoOverrideElement::setLightModelOverride(gl.getState(), selectionRoot, true);
|
||||
}
|
||||
gl.apply(this->backgroundroot);
|
||||
gl.apply(this->getSoRenderManager()->getSceneGraph());
|
||||
gl.apply(this->foregroundroot);
|
||||
@@ -1451,13 +1482,20 @@ void View3DInventorViewer::renderScene(void)
|
||||
|
||||
// Render our scenegraph with the image.
|
||||
SoGLRenderAction* glra = this->getSoRenderManager()->getGLRenderAction();
|
||||
SoGLWidgetElement::set(glra->getState(), qobject_cast<QGLWidget*>(this->getGLWidget()));
|
||||
SoGLRenderActionElement::set(glra->getState(), glra);
|
||||
SoGLVBOActivatedElement::set(glra->getState(), this->vboEnabled);
|
||||
SoState* state = glra->getState();
|
||||
SoGLWidgetElement::set(state, qobject_cast<QGLWidget*>(this->getGLWidget()));
|
||||
SoGLRenderActionElement::set(state, glra);
|
||||
SoGLVBOActivatedElement::set(state, this->vboEnabled);
|
||||
glra->apply(this->backgroundroot);
|
||||
|
||||
navigation->updateAnimation();
|
||||
|
||||
if (!this->shading) {
|
||||
state->push();
|
||||
SoLightModelElement::set(state, selectionRoot, SoLightModelElement::BASE_COLOR);
|
||||
SoOverrideElement::setLightModelOverride(state, selectionRoot, true);
|
||||
}
|
||||
|
||||
try {
|
||||
// Render normal scenegraph.
|
||||
inherited::actualRedraw();
|
||||
@@ -1472,6 +1510,10 @@ void View3DInventorViewer::renderScene(void)
|
||||
QObject::tr("Not enough memory available to display the data."));
|
||||
}
|
||||
|
||||
if (!this->shading) {
|
||||
state->pop();
|
||||
}
|
||||
|
||||
#if defined (ENABLE_GL_DEPTH_RANGE)
|
||||
// using 10% of the z-buffer for the foreground node
|
||||
glDepthRange(0.0,0.1);
|
||||
|
||||
Reference in New Issue
Block a user