Skip to content

Commit

Permalink
+ add convenience method to get editing view of a view provider
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed Sep 15, 2015
1 parent cbfdfd5 commit 470b9ff
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 39 deletions.
17 changes: 9 additions & 8 deletions src/Gui/Document.cpp
Expand Up @@ -1272,17 +1272,18 @@ Gui::MDIView* Document::getViewOfViewProvider(Gui::ViewProvider* vp) const
return 0;
}

Gui::MDIView* Document::getFirstViewOfViewProvider(Gui::ViewProvider* vp) const
Gui::MDIView* Document::getEditingViewOfViewProvider(Gui::ViewProvider* vp) const
{
// first try the active view
Gui::MDIView* view = getActiveView();
if (view && view->isDerivedFrom(View3DInventor::getClassTypeId())) {
View3DInventor* view3d = static_cast<View3DInventor*>(view);
if (view3d->getViewer()->hasViewProvider(vp))
return view;
std::list<MDIView*> mdis = getMDIViewsOfType(View3DInventor::getClassTypeId());
for (std::list<MDIView*>::const_iterator it = mdis.begin(); it != mdis.end(); ++it) {
View3DInventor* view = static_cast<View3DInventor*>(*it);
View3DInventorViewer* viewer = view->getViewer();
// there is only one 3d view which is in edit mode
if (viewer->hasViewProvider(vp) && viewer->isEditingViewProvider())
return *it;
}

return getViewOfViewProvider(vp);
return 0;
}

std::list<MDIView*> Document::getViewsOfViewProvider(Gui::ViewProvider* vp) const
Expand Down
2 changes: 1 addition & 1 deletion src/Gui/Document.h
Expand Up @@ -148,7 +148,7 @@ class GuiExport Document : public Base::Persistence
//@{
/// Getter for the active view
Gui::MDIView* getActiveView(void) const;
Gui::MDIView* getFirstViewOfViewProvider(Gui::ViewProvider*) const;
Gui::MDIView* getEditingViewOfViewProvider(Gui::ViewProvider*) const;
Gui::MDIView* getViewOfViewProvider(Gui::ViewProvider*) const;
std::list<MDIView*> getViewsOfViewProvider(Gui::ViewProvider*) const;
/// Create a new view
Expand Down
7 changes: 7 additions & 0 deletions src/Gui/ViewProviderDocumentObject.cpp
Expand Up @@ -163,6 +163,13 @@ Gui::MDIView* ViewProviderDocumentObject::getActiveView() const
return pGuiDoc->getActiveView();
}

Gui::MDIView* ViewProviderDocumentObject::getEditingView() const
{
App::Document* pAppDoc = pcObject->getDocument();
Gui::Document* pGuiDoc = Gui::Application::Instance->getDocument(pAppDoc);
return pGuiDoc->getEditingViewOfViewProvider(const_cast<ViewProviderDocumentObject*>(this));
}

SoNode* ViewProviderDocumentObject::findFrontRootOfType(const SoType& type) const
{
// first get the document this object is part of and get its GUI counterpart
Expand Down
2 changes: 2 additions & 0 deletions src/Gui/ViewProviderDocumentObject.h
Expand Up @@ -92,6 +92,8 @@ class GuiExport ViewProviderDocumentObject : public ViewProvider
protected:
/// Get the active mdi view of a view provider
Gui::MDIView* getActiveView() const;
/// Get the editing mdi view of a view provider in edit mode
Gui::MDIView* getEditingView() const;
/// Gets called by the container whenever a property has been changed
virtual void onChanged(const App::Property* prop);
/** Searches in all view providers that are attached to an object that
Expand Down
52 changes: 22 additions & 30 deletions src/Mod/Sketcher/Gui/ViewProviderSketch.cpp
Expand Up @@ -832,11 +832,6 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe
} else if (edit->PreselectConstraintSet.empty() != true) {
return true;
} else {
//Get Viewer
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();
Gui::View3DInventorViewer *viewer;
viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer();

Gui::MenuItem *geom = new Gui::MenuItem();
geom->setCommand("Sketcher geoms");
*geom << "Sketcher_CreatePoint"
Expand Down Expand Up @@ -869,11 +864,6 @@ bool ViewProviderSketch::mouseButtonPressed(int Button, bool pressed, const SbVe
break;
case STATUS_SELECT_Edge:
{
//Get Viewer
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();
Gui::View3DInventorViewer *viewer ;
viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer();

Gui::MenuItem *geom = new Gui::MenuItem();
geom->setCommand("Sketcher constraints");
*geom << "Sketcher_ConstrainVertical"
Expand Down Expand Up @@ -1337,8 +1327,9 @@ Base::Vector3d ViewProviderSketch::seekConstraintPosition(const Base::Vector3d &
const SoNode *constraint)
{
assert(edit);
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();
Gui::View3DInventorViewer *viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer();
Gui::View3DInventor* mdi = qobject_cast<Gui::View3DInventor*>(this->getEditingView());
Gui::View3DInventorViewer *viewer = mdi->getViewer();

SoRayPickAction rp(viewer->getSoRenderManager()->getViewportRegion());

float scaled_step = step * getScaleFactor();
Expand Down Expand Up @@ -1823,8 +1814,7 @@ SbVec3s ViewProviderSketch::getDisplayedSize(const SoImage *iconPtr) const

void ViewProviderSketch::centerSelection()
{
Gui::Document* doc = Gui::Application::Instance->getDocument(getObject()->getDocument());
Gui::View3DInventor* view = qobject_cast<Gui::View3DInventor*>(doc->getFirstViewOfViewProvider(this));
Gui::View3DInventor* view = qobject_cast<Gui::View3DInventor*>(this->getEditingView());
if (!view || !edit)
return;

Expand All @@ -1845,7 +1835,6 @@ void ViewProviderSketch::centerSelection()

SbBox3f box = action.getBoundingBox();
if (!box.isEmpty()) {
// get cirumscribing sphere
SoCamera* camera = viewer->getSoRenderManager()->getCamera();
SbVec3f direction;
camera->orientation.getValue().multVec(SbVec3f(0, 0, 1), direction);
Expand Down Expand Up @@ -2561,9 +2550,9 @@ void ViewProviderSketch::drawConstraintIcons()
double x0,y0,x1,y1;
SbVec3f pos0(startingpoint.x,startingpoint.y,startingpoint.z);
SbVec3f pos1(endpoint.x,endpoint.y,endpoint.z);
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();
Gui::View3DInventorViewer *viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer();

Gui::View3DInventor* mdi = qobject_cast<Gui::View3DInventor*>(this->getEditingView());
Gui::View3DInventorViewer *viewer = mdi->getViewer();
SoCamera* pCam = viewer->getSoRenderManager()->getCamera();
if (!pCam) return;

Expand Down Expand Up @@ -2929,11 +2918,12 @@ void ViewProviderSketch::drawTypicalConstraintIcon(const constrIconQueueItem &i)

float ViewProviderSketch::getScaleFactor()
{
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();
if (mdi && mdi->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
Gui::View3DInventorViewer *viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer();
Gui::View3DInventor* mdi = qobject_cast<Gui::View3DInventor*>(this->getEditingView());
if (mdi) {
Gui::View3DInventorViewer *viewer = mdi->getViewer();
return viewer->getSoRenderManager()->getCamera()->getViewVolume(viewer->getSoRenderManager()->getCamera()->aspectRatio.getValue()).getWorldToScreenScale(SbVec3f(0.f, 0.f, 0.f), 0.1f) / 3;
} else {
}
else {
return 1.f;
}
}
Expand All @@ -2942,9 +2932,6 @@ void ViewProviderSketch::draw(bool temp)
{
assert(edit);

// Get Bounding box dimensions for Datum text
Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView();

// Render Geometry ===================================================
std::vector<Base::Vector3d> Coords;
std::vector<Base::Vector3d> Points;
Expand Down Expand Up @@ -3920,12 +3907,17 @@ void ViewProviderSketch::draw(bool temp)
this->updateColor();

// delete the cloned objects
if (temp)
for (std::vector<Part::Geometry *>::iterator it=tempGeo.begin(); it != tempGeo.end(); ++it)
if (*it) delete *it;
if (temp) {
for (std::vector<Part::Geometry *>::iterator it=tempGeo.begin(); it != tempGeo.end(); ++it) {
if (*it)
delete *it;
}
}

if (mdi && mdi->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
static_cast<Gui::View3DInventor *>(mdi)->getViewer()->redraw();
// Get Bounding box dimensions for Datum text
Gui::View3DInventor* mdi = qobject_cast<Gui::View3DInventor*>(this->getEditingView());
if (mdi) {
mdi->getViewer()->redraw();
}
}

Expand Down

0 comments on commit 470b9ff

Please sign in to comment.