From 9925e9028eb40ff11b8635468d749f15c417c746 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 9 Feb 2017 18:30:48 +0100 Subject: [PATCH] issue #0002183: Mesh View . Use Bounding-Box Not Working For Flat Lines --- src/Mod/Mesh/Gui/ViewProvider.cpp | 24 ++++++++++++++++---- src/Mod/Mesh/Gui/ViewProvider.h | 2 ++ src/Mod/Mesh/Gui/ViewProviderMeshFaceSet.cpp | 20 ++++++++-------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/Mod/Mesh/Gui/ViewProvider.cpp b/src/Mod/Mesh/Gui/ViewProvider.cpp index 5eac8d57e..c31bc7c0b 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.cpp +++ b/src/Mod/Mesh/Gui/ViewProvider.cpp @@ -249,6 +249,10 @@ ViewProviderMesh::ViewProviderMesh() : pcOpenEdge(0) if (pcHighlight->selectionMode.getValue() == Gui::SoFCSelection::SEL_OFF) Selectable.setValue(false); + pcShapeGroup = new SoGroup(); + pcShapeGroup->ref(); + pcHighlight->addChild(pcShapeGroup); + pOpenColor = new SoBaseColor(); setOpenEdgeColorFrom(ShapeColor.getValue()); pOpenColor->ref(); @@ -317,6 +321,7 @@ ViewProviderMesh::ViewProviderMesh() : pcOpenEdge(0) ViewProviderMesh::~ViewProviderMesh() { pcHighlight->unref(); + pcShapeGroup->unref(); pOpenColor->unref(); pcLineStyle->unref(); pcPointStyle->unref(); @@ -423,7 +428,10 @@ void ViewProviderMesh::attach(App::DocumentObject *pcFeat) // points SoGroup* pcPointRoot = new SoGroup(); pcPointRoot->addChild(pcPointStyle); - pcPointRoot->addChild(pcFlatRoot); + pcPointRoot->addChild(pShapeHints); + pcPointRoot->addChild(pcShapeMaterial); + pcPointRoot->addChild(pcMatBinding); + pcPointRoot->addChild(pcHighlight); addDisplayMaskMode(pcPointRoot, "Point"); // wires @@ -447,12 +455,20 @@ void ViewProviderMesh::attach(App::DocumentObject *pcFeat) offset->factor = 1.0f; offset->units = 1.0f; - SoGroup* pcFlatWireRoot = new SoGroup(); SoSeparator* pcWireSep = new SoSeparator(); - pcWireSep->addChild(pcWireRoot); + pcWireSep->addChild(pcLineStyle); + pcWireSep->addChild(pcLightModel); + pcWireSep->addChild(binding); + pcWireSep->addChild(pLineColor); + pcWireSep->addChild(pcHighlight); + + SoGroup* pcFlatWireRoot = new SoGroup(); pcFlatWireRoot->addChild(pcWireSep); pcFlatWireRoot->addChild(offset); - pcFlatWireRoot->addChild(pcFlatRoot); + pcFlatWireRoot->addChild(pShapeHints); + pcFlatWireRoot->addChild(pcShapeMaterial); + pcFlatWireRoot->addChild(pcMatBinding); + pcFlatWireRoot->addChild(pcShapeGroup); addDisplayMaskMode(pcFlatWireRoot, "FlatWireframe"); if (getColorProperty()) { diff --git a/src/Mod/Mesh/Gui/ViewProvider.h b/src/Mod/Mesh/Gui/ViewProvider.h index 95d4ffa5c..e8dd0992c 100644 --- a/src/Mod/Mesh/Gui/ViewProvider.h +++ b/src/Mod/Mesh/Gui/ViewProvider.h @@ -32,6 +32,7 @@ #include +class SoGroup; class SoSeparator; class SoEventCallback; class SbViewVolume; @@ -210,6 +211,7 @@ private: protected: Gui::SoFCSelection * pcHighlight; + SoGroup * pcShapeGroup; SoDrawStyle * pcLineStyle; SoDrawStyle * pcPointStyle; SoSeparator * pcOpenEdge; diff --git a/src/Mod/Mesh/Gui/ViewProviderMeshFaceSet.cpp b/src/Mod/Mesh/Gui/ViewProviderMeshFaceSet.cpp index 62236eae4..dd04200e5 100644 --- a/src/Mod/Mesh/Gui/ViewProviderMeshFaceSet.cpp +++ b/src/Mod/Mesh/Gui/ViewProviderMeshFaceSet.cpp @@ -37,7 +37,7 @@ # include # include # include -# include +# include # include # include # include @@ -114,8 +114,8 @@ void ViewProviderMeshFaceSet::attach(App::DocumentObject *pcFeat) { ViewProviderMesh::attach(pcFeat); - pcHighlight->addChild(pcMeshCoord); - pcHighlight->addChild(pcMeshFaces); + pcShapeGroup->addChild(pcMeshCoord); + pcShapeGroup->addChild(pcMeshFaces); // read the threshold from the preferences Base::Reference hGrp = Gui::WindowParameter::getDefaultParameter()->GetGroup("Mod/Mesh"); @@ -141,21 +141,21 @@ void ViewProviderMeshFaceSet::updateData(const App::Property* prop) pcMeshFaces->coordIndex.setNum(0); } else { - ViewProviderMeshBuilder builder; - builder.createMesh(prop, pcMeshCoord, pcMeshFaces); + ViewProviderMeshBuilder builder; + builder.createMesh(prop, pcMeshCoord, pcMeshFaces); } if (direct != directRendering) { directRendering = direct; - pcHighlight->removeAllChildren(); + pcShapeGroup->removeAllChildren(); if (directRendering) { - pcHighlight->addChild(pcMeshNode); - pcHighlight->addChild(pcMeshShape); + pcShapeGroup->addChild(pcMeshNode); + pcShapeGroup->addChild(pcMeshShape); } else { - pcHighlight->addChild(pcMeshCoord); - pcHighlight->addChild(pcMeshFaces); + pcShapeGroup->addChild(pcMeshCoord); + pcShapeGroup->addChild(pcMeshFaces); } }