interactively show origin objects for feature pick
This commit is contained in:
parent
4b545f9e6f
commit
c7555eaa63
|
@ -84,6 +84,48 @@ QIcon ViewProviderOrigin::getIcon(void) const
|
||||||
return Gui::ViewProvider::getIcon();
|
return Gui::ViewProvider::getIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ViewProviderOrigin::setTemporaryVisibilityMode(bool onoff, Gui::Document* doc)
|
||||||
|
{
|
||||||
|
tempVisDoc = doc;
|
||||||
|
|
||||||
|
if(tempVisMode == onoff)
|
||||||
|
return;
|
||||||
|
|
||||||
|
tempVisMode = onoff;
|
||||||
|
if(onoff && doc) {
|
||||||
|
App::Origin* origin = static_cast<App::Origin*>(pcObject);
|
||||||
|
tempVisMap.clear();
|
||||||
|
|
||||||
|
for(App::DocumentObject* obj : origin->getObjects()) {
|
||||||
|
Gui::ViewProvider* vp = doc->getViewProvider(obj);
|
||||||
|
if(vp) {
|
||||||
|
tempVisMap[vp] = vp->isVisible();
|
||||||
|
vp->setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tempVisMap[this] = isVisible();
|
||||||
|
setVisible(true);
|
||||||
|
}
|
||||||
|
else if(!onoff) {
|
||||||
|
for(std::pair<Gui::ViewProvider*, bool> pair : tempVisMap)
|
||||||
|
pair.first->setVisible(pair.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ViewProviderOrigin::setTemporaryVisibility(App::DocumentObject* obj, bool onoff)
|
||||||
|
{
|
||||||
|
Gui::ViewProvider* vp = tempVisDoc->getViewProvider(obj);
|
||||||
|
if(vp) {
|
||||||
|
vp->setVisible(onoff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ViewProviderOrigin::isTemporaryVisibilityMode()
|
||||||
|
{
|
||||||
|
return tempVisMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Python feature -----------------------------------------------------------------------
|
// Python feature -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
|
|
||||||
namespace Gui {
|
namespace Gui {
|
||||||
|
|
||||||
|
class Document;
|
||||||
|
|
||||||
class GuiExport ViewProviderOrigin : public ViewProviderGeoFeatureGroup
|
class GuiExport ViewProviderOrigin : public ViewProviderGeoFeatureGroup
|
||||||
{
|
{
|
||||||
PROPERTY_HEADER(Gui::ViewProviderOrigin);
|
PROPERTY_HEADER(Gui::ViewProviderOrigin);
|
||||||
|
@ -48,6 +50,16 @@ public:
|
||||||
virtual void unsetEdit(int ModNum);
|
virtual void unsetEdit(int ModNum);
|
||||||
|
|
||||||
virtual QIcon getIcon(void) const;
|
virtual QIcon getIcon(void) const;
|
||||||
|
|
||||||
|
//temporary mode to override visibility of grouped objects
|
||||||
|
void setTemporaryVisibilityMode(bool onoff, Gui::Document* doc = NULL);
|
||||||
|
bool isTemporaryVisibilityMode();
|
||||||
|
void setTemporaryVisibility(App::DocumentObject* obj, bool onoff);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool tempVisMode = false;
|
||||||
|
Gui::Document* tempVisDoc;
|
||||||
|
std::map<Gui::ViewProvider*, bool> tempVisMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef ViewProviderPythonFeatureT<ViewProviderOrigin> ViewProviderOriginPython;
|
typedef ViewProviderPythonFeatureT<ViewProviderOrigin> ViewProviderOriginPython;
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
#include <Gui/Application.h>
|
#include <Gui/Application.h>
|
||||||
#include <Gui/BitmapFactory.h>
|
#include <Gui/BitmapFactory.h>
|
||||||
#include <Gui/MainWindow.h>
|
#include <Gui/MainWindow.h>
|
||||||
|
#include <Gui/Document.h>
|
||||||
|
#include <Gui/ViewProviderOrigin.h>
|
||||||
#include <App/Document.h>
|
#include <App/Document.h>
|
||||||
#include <Base/Tools.h>
|
#include <Base/Tools.h>
|
||||||
|
|
||||||
|
@ -81,6 +83,9 @@ TaskFeaturePick::TaskFeaturePick(std::vector<App::DocumentObject*>& objects,
|
||||||
// These are not implemented yet
|
// These are not implemented yet
|
||||||
ui->radioDependent->setEnabled(false);
|
ui->radioDependent->setEnabled(false);
|
||||||
ui->radioXRef->setEnabled(false);
|
ui->radioXRef->setEnabled(false);
|
||||||
|
|
||||||
|
auto guidoc = Gui::Application::Instance->activeDocument();
|
||||||
|
auto origin_obj = App::GetApplication().getActiveDocument()->getObjectsOfType<App::Origin>();
|
||||||
|
|
||||||
std::vector<featureStatus>::const_iterator st = status.begin();
|
std::vector<featureStatus>::const_iterator st = status.begin();
|
||||||
for (std::vector<App::DocumentObject*>::const_iterator o = objects.begin(); o != objects.end(); o++) {
|
for (std::vector<App::DocumentObject*>::const_iterator o = objects.begin(); o != objects.end(); o++) {
|
||||||
|
@ -88,6 +93,19 @@ TaskFeaturePick::TaskFeaturePick(std::vector<App::DocumentObject*>& objects,
|
||||||
QString::fromAscii(" (") + getFeatureStatusString(*st) + QString::fromAscii(")"));
|
QString::fromAscii(" (") + getFeatureStatusString(*st) + QString::fromAscii(")"));
|
||||||
ui->listWidget->addItem(item);
|
ui->listWidget->addItem(item);
|
||||||
st++;
|
st++;
|
||||||
|
|
||||||
|
//check if we need to set any origin in temporary visibility mode
|
||||||
|
for(App::Origin* obj : origin_obj) {
|
||||||
|
if(obj->hasObject(*o)) {
|
||||||
|
Gui::ViewProviderOrigin* vpo = static_cast<Gui::ViewProviderOrigin*>(guidoc->getViewProvider(obj));
|
||||||
|
if(!vpo->isTemporaryVisibilityMode())
|
||||||
|
vpo->setTemporaryVisibilityMode(true, guidoc);
|
||||||
|
|
||||||
|
vpo->setTemporaryVisibility(*o, true);
|
||||||
|
origins.push_back(vpo);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
groupLayout()->addWidget(proxy);
|
groupLayout()->addWidget(proxy);
|
||||||
|
@ -97,13 +115,18 @@ TaskFeaturePick::TaskFeaturePick(std::vector<App::DocumentObject*>& objects,
|
||||||
|
|
||||||
TaskFeaturePick::~TaskFeaturePick()
|
TaskFeaturePick::~TaskFeaturePick()
|
||||||
{
|
{
|
||||||
|
for(Gui::ViewProviderOrigin* vpo : origins)
|
||||||
|
vpo->setTemporaryVisibilityMode(false, NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TaskFeaturePick::updateList()
|
void TaskFeaturePick::updateList()
|
||||||
{
|
{
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
|
//get all origins in temporary mode
|
||||||
|
|
||||||
|
|
||||||
for (std::vector<featureStatus>::const_iterator st = statuses.begin(); st != statuses.end(); st++) {
|
for (std::vector<featureStatus>::const_iterator st = statuses.begin(); st != statuses.end(); st++) {
|
||||||
QListWidgetItem* item = ui->listWidget->item(index);
|
QListWidgetItem* item = ui->listWidget->item(index);
|
||||||
|
|
||||||
|
@ -174,8 +197,8 @@ std::vector<App::DocumentObject*> TaskFeaturePick::getFeatures() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TaskFeaturePick::onSelectionChanged(const Gui::SelectionChanges& msg)
|
void TaskFeaturePick::onSelectionChanged(const Gui::SelectionChanges& msg)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
|
@ -26,12 +26,14 @@
|
||||||
#include <Gui/TaskView/TaskView.h>
|
#include <Gui/TaskView/TaskView.h>
|
||||||
#include <Gui/Selection.h>
|
#include <Gui/Selection.h>
|
||||||
#include <Gui/TaskView/TaskDialog.h>
|
#include <Gui/TaskView/TaskDialog.h>
|
||||||
|
#include <Gui/ViewProviderOrigin.h>
|
||||||
#include <App/DocumentObject.h>
|
#include <App/DocumentObject.h>
|
||||||
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
|
||||||
namespace PartDesignGui {
|
namespace PartDesignGui {
|
||||||
|
|
||||||
|
class SoSwitch;
|
||||||
class Ui_TaskFeaturePick;
|
class Ui_TaskFeaturePick;
|
||||||
class TaskFeaturePick : public Gui::TaskView::TaskBox, public Gui::SelectionObserver
|
class TaskFeaturePick : public Gui::TaskView::TaskBox, public Gui::SelectionObserver
|
||||||
{
|
{
|
||||||
|
@ -68,6 +70,8 @@ protected Q_SLOTS:
|
||||||
private:
|
private:
|
||||||
Ui_TaskFeaturePick* ui;
|
Ui_TaskFeaturePick* ui;
|
||||||
QWidget* proxy;
|
QWidget* proxy;
|
||||||
|
SoSwitch* featureswitch;
|
||||||
|
std::vector<Gui::ViewProviderOrigin*> origins;
|
||||||
|
|
||||||
std::vector<QString> features;
|
std::vector<QString> features;
|
||||||
std::vector<featureStatus> statuses;
|
std::vector<featureStatus> statuses;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user