+ add convenience method to get editing view of a view provider
This commit is contained in:
parent
cbfdfd5c2e
commit
470b9ff756
|
@ -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
|
||||
|
|
|
@ -148,7 +148,7 @@ public:
|
|||
//@{
|
||||
/// 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -92,6 +92,8 @@ public:
|
|||
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
|
||||
|
|
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -3920,12 +3907,17 @@ Restart:
|
|||
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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user