FreeCAD
1/***************************************************************************
2* Copyright (c) 2024 Kacper Donat <kacper@kadet.net> *
3* *
4* This file is part of the FreeCAD CAx development system. *
5* *
6* This library is free software; you can redistribute it and/or *
7* modify it under the terms of the GNU Library General Public *
8* License as published by the Free Software Foundation; either *
9* version 2 of the License, or (at your option) any later version. *
10* *
11* This library is distributed in the hope that it will be useful, *
12* but WITHOUT ANY WARRANTY; without even the implied warranty of *
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14* GNU Library General Public License for more details. *
15* *
16* You should have received a copy of the GNU Library General Public *
17* License along with this library; see the file COPYING.LIB. If not, *
18* write to the Free Software Foundation, Inc., 59 Temple Place, *
19* Suite 330, Boston, MA 02111-1307, USA *
20* *
21***************************************************************************/
22
23#include "PreCompiled.h"24
25#ifndef _PreComp_26#include <QtOpenGL>27#include <Inventor/elements/SoCacheElement.h>28#endif29
30#include "SoFCDB.h"31#include "So3DAnnotation.h"32
33using namespace Gui;34
35SO_NODE_SOURCE(So3DAnnotation);36
37So3DAnnotation::So3DAnnotation()38{
39SO_NODE_CONSTRUCTOR(So3DAnnotation);40}
41
42void So3DAnnotation::initClass()43{
44SO_NODE_INIT_CLASS(So3DAnnotation, SoSeparator, "3DAnnotation");45}
46
47void So3DAnnotation::GLRender(SoGLRenderAction* action)48{
49switch (action->getCurPathCode()) {50case SoAction::NO_PATH:51case SoAction::BELOW_PATH:52this->GLRenderBelowPath(action);53break;54case SoAction::OFF_PATH:55// do nothing. Separator will reset state.56break;57case SoAction::IN_PATH:58this->GLRenderInPath(action);59break;60}61}
62
63void So3DAnnotation::GLRenderBelowPath(SoGLRenderAction* action)64{
65if (action->isRenderingDelayedPaths()) {66glClear(GL_DEPTH_BUFFER_BIT);67inherited::GLRenderBelowPath(action);68}69else {70SoCacheElement::invalidate(action->getState());71action->addDelayedPath(action->getCurPath()->copy());72}73}
74
75void So3DAnnotation::GLRenderInPath(SoGLRenderAction* action)76{
77if (action->isRenderingDelayedPaths()) {78glClear(GL_DEPTH_BUFFER_BIT);79inherited::GLRenderInPath(action);80}81else {82SoCacheElement::invalidate(action->getState());83action->addDelayedPath(action->getCurPath()->copy());84}85}
86
87void So3DAnnotation::GLRenderOffPath(SoGLRenderAction* /* action */)88{
89// should never render, this is a separator node90}