Files
create/src/Gui/SoFCSelectionAction.h
2023-08-23 19:51:44 +02:00

373 lines
9.8 KiB
C++

/***************************************************************************
* Copyright (c) 2005 Jürgen Riegel <juergen.riegel@web.de> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef _SoFCSelectionAction_h
#define _SoFCSelectionAction_h
#include <Inventor/SbColor.h>
#include <Inventor/actions/SoGLRenderAction.h>
#include <Inventor/fields/SoSFColor.h>
#include <Inventor/fields/SoSFString.h>
#include <vector>
#include <FCGlobal.h>
class SoSFString;
class SoSFColor;
namespace Gui {
class SelectionChanges;
/**
* The SoFCHighlightAction class is used to inform an SoFCSelection node
* whether an object gets highlighted.
* @author Jürgen Riegel
*/
class GuiExport SoFCHighlightAction : public SoAction
{
SO_ACTION_HEADER(SoFCHighlightAction);
public:
SoFCHighlightAction (const SelectionChanges &SelCh);
~SoFCHighlightAction() override;
static void initClass();
static void finish();
const SelectionChanges &SelChange;
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
/**
* The SoFCSelectionAction class is used to inform an SoFCSelection node
* whether an object gets selected.
* @author Jürgen Riegel
*/
class GuiExport SoFCSelectionAction : public SoAction
{
SO_ACTION_HEADER(SoFCSelectionAction);
public:
SoFCSelectionAction (const SelectionChanges &SelCh);
~SoFCSelectionAction() override;
static void initClass();
static void finish();
const SelectionChanges &SelChange;
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
/**
* The SoFCEnableSelectionAction class is used to inform an SoFCSelection node
* whether selection is enabled or disabled.
* @author Werner Mayer
*/
class GuiExport SoFCEnableSelectionAction : public SoAction
{
SO_ACTION_HEADER(SoFCEnableSelectionAction);
public:
SoFCEnableSelectionAction (const SbBool& sel);
~SoFCEnableSelectionAction() override;
SbBool selection;
static void initClass();
static void finish();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
/**
* The SoFCEnableHighlightAction class is used to inform an SoFCSelection node
* whether preselection is enabled or disabled.
* @author Werner Mayer
*/
class GuiExport SoFCEnableHighlightAction : public SoAction
{
SO_ACTION_HEADER(SoFCEnableHighlightAction);
public:
SoFCEnableHighlightAction (const SbBool& sel);
~SoFCEnableHighlightAction() override;
SbBool highlight;
static void initClass();
static void finish();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
/**
* The SoFCSelectionColorAction class is used to inform an SoFCSelection node
* which selection color is used.
* @author Werner Mayer
*/
class GuiExport SoFCSelectionColorAction : public SoAction
{
SO_ACTION_HEADER(SoFCSelectionColorAction);
public:
SoFCSelectionColorAction (const SoSFColor& col);
~SoFCSelectionColorAction() override;
SoSFColor selectionColor;
static void initClass();
static void finish();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
/**
* The SoFCHighlightColorAction class is used to inform an SoFCSelection node
* which preselection color is used.
* @author Werner Mayer
*/
class GuiExport SoFCHighlightColorAction : public SoAction
{
SO_ACTION_HEADER(SoFCHighlightColorAction);
public:
SoFCHighlightColorAction (const SoSFColor& col);
~SoFCHighlightColorAction() override;
SoSFColor highlightColor;
static void initClass();
static void finish();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
/**
* The SoFCDocumentAction class is used to inform an SoFCSelection node
* when a document has been renamed.
* @author Werner Mayer
*/
class GuiExport SoFCDocumentAction : public SoAction
{
SO_ACTION_HEADER(SoFCDocumentAction);
public:
SoFCDocumentAction (const SoSFString& docName);
~SoFCDocumentAction() override;
SoSFString documentName;
static void initClass();
static void finish();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
/**
* The SoFCDocumentObjectAction class is used to get the name of the document,
* object and component at a certain position of an SoFCSelection node.
* @author Werner Mayer
*/
class GuiExport SoFCDocumentObjectAction : public SoAction
{
SO_ACTION_HEADER(SoFCDocumentObjectAction);
public:
SoFCDocumentObjectAction ();
~SoFCDocumentObjectAction() override;
void setHandled();
SbBool isHandled() const;
static void initClass();
static void finish();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
public:
SbString documentName;
SbString objectName;
SbString componentName;
private:
SbBool _handled{false};
};
/**
* The SoGLSelectAction class is used to get all data under a selected area.
* @author Werner Mayer
*/
class GuiExport SoGLSelectAction : public SoAction
{
SO_ACTION_HEADER(SoGLSelectAction);
public:
SoGLSelectAction (const SbViewportRegion& region, const SbViewportRegion& select);
~SoGLSelectAction() override;
void setHandled();
SbBool isHandled() const;
const SbViewportRegion& getViewportRegion () const;
static void initClass();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
public:
std::vector<unsigned long> indices;
private:
const SbViewportRegion& vpregion;
const SbViewportRegion& vpselect;
SbBool _handled{false};
};
/**
* @author Werner Mayer
*/
class GuiExport SoVisibleFaceAction : public SoAction
{
SO_ACTION_HEADER(SoVisibleFaceAction);
public:
SoVisibleFaceAction ();
~SoVisibleFaceAction() override;
void setHandled();
SbBool isHandled() const;
static void initClass();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
private:
SbBool _handled{false};
};
class SoBoxSelectionRenderActionP;
/**
* The SoBoxSelectionRenderAction class renders the scene with highlighted boxes around selections.
* @author Werner Mayer
*/
class GuiExport SoBoxSelectionRenderAction : public SoGLRenderAction {
using inherited = SoGLRenderAction;
SO_ACTION_HEADER(SoBoxSelectionRenderAction);
public:
SoBoxSelectionRenderAction();
SoBoxSelectionRenderAction(const SbViewportRegion & viewportregion);
~SoBoxSelectionRenderAction() override;
static void initClass();
void apply(SoNode * node) override;
void apply(SoPath * path) override;
void apply(const SoPathList & pathlist, SbBool obeysrules = false) override;
void setVisible(SbBool b) { hlVisible = b; }
SbBool isVisible() const { return hlVisible; }
void setColor(const SbColor & color);
const SbColor & getColor();
void setLinePattern(unsigned short pattern);
unsigned short getLinePattern() const;
void setLineWidth(const float width);
float getLineWidth() const;
protected:
SbBool hlVisible;
private:
void constructorCommon();
void drawBoxes(SoPath * pathtothis, const SoPathList * pathlist);
SoBoxSelectionRenderActionP * pimpl;
};
/**
* Helper class no notify nodes to update VBO.
* @author Werner Mayer
*/
class GuiExport SoUpdateVBOAction : public SoAction
{
SO_ACTION_HEADER(SoUpdateVBOAction);
public:
SoUpdateVBOAction ();
~SoUpdateVBOAction() override;
static void initClass();
static void finish();
protected:
void beginTraversal(SoNode *node) override;
private:
static void callDoAction(SoAction *action,SoNode *node);
};
} // namespace Gui
#endif // _SoFCSelectionAction_h