Skip to content

Commit

Permalink
+ remove SoFCSelection from ViewProviderGeometryObject
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed May 20, 2015
1 parent 2786340 commit ef610c8
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 58 deletions.
49 changes: 4 additions & 45 deletions src/Gui/ViewProviderGeometryObject.cpp
Expand Up @@ -85,11 +85,8 @@ ViewProviderGeometryObject::ViewProviderGeometryObject() : pcBoundSwitch(0)
ADD_PROPERTY(BoundingBox,(false));
ADD_PROPERTY(Selectable,(true));

// Create the selection node
pcHighlight = createFromSettings();
pcHighlight->ref();
if (pcHighlight->selectionMode.getValue() == Gui::SoFCSelection::SEL_OFF)
Selectable.setValue(false);
bool enableSel = hGrp->GetBool("EnableSelection", true);
Selectable.setValue(enableSel);

pcShapeMaterial = new SoMaterial;
pcShapeMaterial->ref();
Expand All @@ -104,7 +101,6 @@ ViewProviderGeometryObject::ViewProviderGeometryObject() : pcBoundSwitch(0)
ViewProviderGeometryObject::~ViewProviderGeometryObject()
{
pcShapeMaterial->unref();
pcHighlight->unref();
pcBoundingBox->unref();
}

Expand Down Expand Up @@ -157,9 +153,6 @@ void ViewProviderGeometryObject::onChanged(const App::Property* prop)
void ViewProviderGeometryObject::attach(App::DocumentObject *pcObj)
{
ViewProviderDocumentObject::attach(pcObj);
pcHighlight->objectName = pcObj->getNameInDocument();
pcHighlight->documentName = pcObj->getDocument()->getName();
pcHighlight->subElementName = "Main";
}

void ViewProviderGeometryObject::updateData(const App::Property* prop)
Expand Down Expand Up @@ -516,7 +509,7 @@ SoPickedPointList ViewProviderGeometryObject::getPickedPoints(const SbVec2s& pos
root->ref();
root->addChild(viewer.getHeadlight());
root->addChild(viewer.getSoRenderManager()->getCamera());
root->addChild(this->pcHighlight);
root->addChild(const_cast<ViewProviderGeometryObject*>(this)->getRoot());

SoRayPickAction rp(viewer.getSoRenderManager()->getViewportRegion());
rp.setPickAll(pickAll);
Expand All @@ -534,7 +527,7 @@ SoPickedPoint* ViewProviderGeometryObject::getPickedPoint(const SbVec2s& pos, co
root->ref();
root->addChild(viewer.getHeadlight());
root->addChild(viewer.getSoRenderManager()->getCamera());
root->addChild(this->pcHighlight);
root->addChild(const_cast<ViewProviderGeometryObject*>(this)->getRoot());

SoRayPickAction rp(viewer.getSoRenderManager()->getViewportRegion());
rp.setPoint(pos);
Expand Down Expand Up @@ -578,40 +571,6 @@ void ViewProviderGeometryObject::showBoundingBox(bool show)
}
}

SoFCSelection* ViewProviderGeometryObject::createFromSettings() const
{
SoFCSelection* sel = new SoFCSelection();

float transparency;
ParameterGrp::handle hGrp = Gui::WindowParameter::getDefaultParameter()->GetGroup("View");
bool enablePre = hGrp->GetBool("EnablePreselection", true);
bool enableSel = hGrp->GetBool("EnableSelection", true);
if (!enablePre) {
sel->highlightMode = Gui::SoFCSelection::OFF;
}
else {
// Search for a user defined value with the current color as default
SbColor highlightColor = sel->colorHighlight.getValue();
unsigned long highlight = (unsigned long)(highlightColor.getPackedValue());
highlight = hGrp->GetUnsigned("HighlightColor", highlight);
highlightColor.setPackedValue((uint32_t)highlight, transparency);
sel->colorHighlight.setValue(highlightColor);
}
if (!enableSel || !Selectable.getValue()) {
sel->selectionMode = Gui::SoFCSelection::SEL_OFF;
}
else {
// Do the same with the selection color
SbColor selectionColor = sel->colorSelection.getValue();
unsigned long selection = (unsigned long)(selectionColor.getPackedValue());
selection = hGrp->GetUnsigned("SelectionColor", selection);
selectionColor.setPackedValue((uint32_t)selection, transparency);
sel->colorSelection.setValue(selectionColor);
}

return sel;
}

void ViewProviderGeometryObject::setSelectable(bool selectable)
{
SoSearchAction sa;
Expand Down
5 changes: 1 addition & 4 deletions src/Gui/ViewProviderGeometryObject.h
Expand Up @@ -67,11 +67,10 @@ class GuiExport ViewProviderGeometryObject : public ViewProviderDocumentObject
void attach(App::DocumentObject *pcObject);
void updateData(const App::Property*);

SoFCSelection* getHighlightNode() const { return pcHighlight; }
bool isSelectable(void) const {return Selectable.getValue();}

/**
* Returns a list of picked points from the geometry under \a pcHighlight.
* Returns a list of picked points from the geometry under \a getRoot().
* If \a pickAll is false (the default) only the intersection point closest to the camera will be picked, otherwise
* all intersection points will be picked.
*/
Expand All @@ -98,7 +97,6 @@ class GuiExport ViewProviderGeometryObject : public ViewProviderDocumentObject
void showBoundingBox(bool);
/// get called by the container whenever a property has been changed
void onChanged(const App::Property* prop);
SoFCSelection* createFromSettings() const;
void setSelectable(bool Selectable=true);

private:
Expand All @@ -108,7 +106,6 @@ class GuiExport ViewProviderGeometryObject : public ViewProviderDocumentObject
static void dragMotionCallback(void * data, SoDragger * d);

protected:
SoFCSelection * pcHighlight;
SoMaterial * pcShapeMaterial;
SoFCBoundingBox * pcBoundingBox;
SoSwitch * pcBoundSwitch;
Expand Down
2 changes: 0 additions & 2 deletions src/Mod/Fem/Gui/ViewProviderFemMesh.cpp
Expand Up @@ -254,8 +254,6 @@ void ViewProviderFemMesh::attach(App::DocumentObject *pcObj)
SoPointSet * pointset = new SoPointSet;
pcAnotRoot->addChild(pointset);

//pcHighlight->addChild(pcFaces);

// flat
SoGroup* pcFlatRoot = new SoGroup();
// face nodes
Expand Down
45 changes: 45 additions & 0 deletions src/Mod/Mesh/Gui/ViewProvider.cpp
Expand Up @@ -242,6 +242,12 @@ ViewProviderMesh::ViewProviderMesh() : pcOpenEdge(0)
Lighting.setEnums(LightingEnums);
ADD_PROPERTY(LineColor,(0,0,0));

// Create the selection node
pcHighlight = createFromSettings();
pcHighlight->ref();
if (pcHighlight->selectionMode.getValue() == Gui::SoFCSelection::SEL_OFF)
Selectable.setValue(false);

pOpenColor = new SoBaseColor();
setOpenEdgeColorFrom(ShapeColor.getValue());
pOpenColor->ref();
Expand Down Expand Up @@ -307,6 +313,7 @@ ViewProviderMesh::ViewProviderMesh() : pcOpenEdge(0)

ViewProviderMesh::~ViewProviderMesh()
{
pcHighlight->unref();
pOpenColor->unref();
pcLineStyle->unref();
pcPointStyle->unref();
Expand All @@ -315,6 +322,40 @@ ViewProviderMesh::~ViewProviderMesh()
pLineColor->unref();
}

Gui::SoFCSelection* ViewProviderMesh::createFromSettings() const
{
Gui::SoFCSelection* sel = new Gui::SoFCSelection();

float transparency;
ParameterGrp::handle hGrp = Gui::WindowParameter::getDefaultParameter()->GetGroup("View");
bool enablePre = hGrp->GetBool("EnablePreselection", true);
bool enableSel = hGrp->GetBool("EnableSelection", true);
if (!enablePre) {
sel->highlightMode = Gui::SoFCSelection::OFF;
}
else {
// Search for a user defined value with the current color as default
SbColor highlightColor = sel->colorHighlight.getValue();
unsigned long highlight = (unsigned long)(highlightColor.getPackedValue());
highlight = hGrp->GetUnsigned("HighlightColor", highlight);
highlightColor.setPackedValue((uint32_t)highlight, transparency);
sel->colorHighlight.setValue(highlightColor);
}
if (!enableSel || !Selectable.getValue()) {
sel->selectionMode = Gui::SoFCSelection::SEL_OFF;
}
else {
// Do the same with the selection color
SbColor selectionColor = sel->colorSelection.getValue();
unsigned long selection = (unsigned long)(selectionColor.getPackedValue());
selection = hGrp->GetUnsigned("SelectionColor", selection);
selectionColor.setPackedValue((uint32_t)selection, transparency);
sel->colorSelection.setValue(selectionColor);
}

return sel;
}

void ViewProviderMesh::onChanged(const App::Property* prop)
{
// we gonna change the number of colors to one
Expand Down Expand Up @@ -389,6 +430,10 @@ void ViewProviderMesh::attach(App::DocumentObject *pcFeat)
{
ViewProviderGeometryObject::attach(pcFeat);

pcHighlight->objectName = pcFeat->getNameInDocument();
pcHighlight->documentName = pcFeat->getDocument()->getName();
pcHighlight->subElementName = "Main";

// Note: Since for mesh data the SoFCSelection node has no SoSeparator but
// an SoGroup as parent the EMISSIVE style if set has fundamentally no effect.
// This behaviour is given due to the fact that SoFCSelection inherits from
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/Mesh/Gui/ViewProvider.h
Expand Up @@ -123,6 +123,7 @@ class MeshGuiExport ViewProviderMesh : public Gui::ViewProviderGeometryObject

virtual void attach(App::DocumentObject *);
virtual bool useNewSelectionModel(void) const {return false;}
Gui::SoFCSelection* getHighlightNode() const { return pcHighlight; }
virtual QIcon getIcon() const;
/// Sets the correct display mode
virtual void setDisplayMode(const char* ModeName);
Expand Down Expand Up @@ -175,6 +176,7 @@ class MeshGuiExport ViewProviderMesh : public Gui::ViewProviderGeometryObject

virtual SoShape* getShapeNode() const;
virtual SoNode* getCoordNode() const;
Gui::SoFCSelection* createFromSettings() const;

public:
static void faceInfoCallback(void * ud, SoEventCallback * n);
Expand All @@ -195,6 +197,7 @@ class MeshGuiExport ViewProviderMesh : public Gui::ViewProviderGeometryObject
static void panCamera(SoCamera*, float, const SbPlane&, const SbVec2f&, const SbVec2f&);

protected:
Gui::SoFCSelection * pcHighlight;
SoDrawStyle * pcLineStyle;
SoDrawStyle * pcPointStyle;
SoSeparator * pcOpenEdge;
Expand Down
2 changes: 1 addition & 1 deletion src/Mod/Mesh/Gui/ViewProviderCurvature.cpp
Expand Up @@ -315,7 +315,7 @@ void ViewProviderMeshCurvature::updateData(const App::Property* prop)
// get the view provider of the associated mesh feature
App::Document* rDoc = pcObject->getDocument();
Gui::Document* pDoc = Gui::Application::Instance->getDocument(rDoc);
Gui::ViewProviderGeometryObject* view = static_cast<Gui::ViewProviderGeometryObject*>(pDoc->getViewProvider(object));
ViewProviderMesh* view = static_cast<ViewProviderMesh*>(pDoc->getViewProvider(object));
this->pcLinkRoot->addChild(view->getHighlightNode());
}
}
Expand Down
1 change: 0 additions & 1 deletion src/Mod/Mesh/Gui/ViewProviderDefects.cpp
Expand Up @@ -41,7 +41,6 @@
#include <Base/Sequencer.h>
#include <App/Application.h>
#include <Gui/Selection.h>
#include <Gui/SoFCSelection.h>

#include <Mod/Mesh/App/Core/Degeneration.h>
#include <Mod/Mesh/App/Core/Evaluation.h>
Expand Down
46 changes: 46 additions & 0 deletions src/Mod/Points/Gui/ViewProvider.cpp
Expand Up @@ -50,6 +50,7 @@
#include <Gui/Application.h>
#include <Gui/Document.h>
#include <Gui/SoFCSelection.h>
#include <Gui/Window.h>

#include <Gui/View3DInventorViewer.h>
#include <Mod/Points/App/PointsFeature.h>
Expand All @@ -72,6 +73,12 @@ ViewProviderPoints::ViewProviderPoints()
ADD_PROPERTY(PointSize,(2.0f));
PointSize.setConstraints(&floatRange);

// Create the selection node
pcHighlight = createFromSettings();
pcHighlight->ref();
if (pcHighlight->selectionMode.getValue() == Gui::SoFCSelection::SEL_OFF)
Selectable.setValue(false);

pcPointsCoord = new SoCoordinate3();
pcPointsCoord->ref();
pcPoints = new SoPointSet();
Expand All @@ -89,13 +96,48 @@ ViewProviderPoints::ViewProviderPoints()

ViewProviderPoints::~ViewProviderPoints()
{
pcHighlight->unref();
pcPointsCoord->unref();
pcPoints->unref();
pcPointsNormal->unref();
pcColorMat->unref();
pcPointStyle->unref();
}

Gui::SoFCSelection* ViewProviderPoints::createFromSettings() const
{
Gui::SoFCSelection* sel = new Gui::SoFCSelection();

float transparency;
ParameterGrp::handle hGrp = Gui::WindowParameter::getDefaultParameter()->GetGroup("View");
bool enablePre = hGrp->GetBool("EnablePreselection", true);
bool enableSel = hGrp->GetBool("EnableSelection", true);
if (!enablePre) {
sel->highlightMode = Gui::SoFCSelection::OFF;
}
else {
// Search for a user defined value with the current color as default
SbColor highlightColor = sel->colorHighlight.getValue();
unsigned long highlight = (unsigned long)(highlightColor.getPackedValue());
highlight = hGrp->GetUnsigned("HighlightColor", highlight);
highlightColor.setPackedValue((uint32_t)highlight, transparency);
sel->colorHighlight.setValue(highlightColor);
}
if (!enableSel || !Selectable.getValue()) {
sel->selectionMode = Gui::SoFCSelection::SEL_OFF;
}
else {
// Do the same with the selection color
SbColor selectionColor = sel->colorSelection.getValue();
unsigned long selection = (unsigned long)(selectionColor.getPackedValue());
selection = hGrp->GetUnsigned("SelectionColor", selection);
selectionColor.setPackedValue((uint32_t)selection, transparency);
sel->colorSelection.setValue(selectionColor);
}

return sel;
}

void ViewProviderPoints::onChanged(const App::Property* prop)
{
if ( prop == &PointSize ) {
Expand Down Expand Up @@ -162,6 +204,10 @@ void ViewProviderPoints::attach(App::DocumentObject* pcObj)
// call parent's attach to define display modes
ViewProviderGeometryObject::attach(pcObj);

pcHighlight->objectName = pcObj->getNameInDocument();
pcHighlight->documentName = pcObj->getDocument()->getName();
pcHighlight->subElementName = "Main";

SoGroup* pcPointRoot = new SoGroup();
SoGroup* pcPointShadedRoot = new SoGroup();
SoGroup* pcColorShadedRoot = new SoGroup();
Expand Down
16 changes: 11 additions & 5 deletions src/Mod/Points/Gui/ViewProvider.h
Expand Up @@ -41,6 +41,10 @@ namespace App {
class PropertyColorList;
}

namespace Gui {
class SoFCSelection;
}

namespace Points {
class PropertyGreyValueList;
class PropertyNormalList;
Expand Down Expand Up @@ -96,18 +100,20 @@ class PointsGuiExport ViewProviderPoints : public Gui::ViewProviderGeometryObjec
static void clipPointsCallback(void * ud, SoEventCallback * n);

protected:
Gui::SoFCSelection* createFromSettings() const;
void onChanged(const App::Property* prop);
void setVertexColorMode(App::PropertyColorList*);
void setVertexGreyvalueMode(Points::PropertyGreyValueList*);
void setVertexNormalMode(Points::PropertyNormalList*);
virtual void cut( const std::vector<SbVec2f>& picked, Gui::View3DInventorViewer &Viewer);

protected:
SoCoordinate3 *pcPointsCoord;
SoPointSet *pcPoints;
SoMaterial *pcColorMat;
SoNormal *pcPointsNormal;
SoDrawStyle *pcPointStyle;
Gui::SoFCSelection * pcHighlight;
SoCoordinate3 * pcPointsCoord;
SoPointSet * pcPoints;
SoMaterial * pcColorMat;
SoNormal * pcPointsNormal;
SoDrawStyle * pcPointStyle;

private:
static App::PropertyFloatConstraint::Constraints floatRange;
Expand Down

0 comments on commit ef610c8

Please sign in to comment.