PartDesign: use selection filter gate for picking references for pattern/transform features
This commit is contained in:
parent
68995739d6
commit
2540a19a5d
|
@ -284,6 +284,7 @@ void TaskLinearPatternParameters::onButtonReference(bool checked)
|
|||
showOriginals();
|
||||
referenceSelectionMode = true;
|
||||
Gui::Selection().clearSelection();
|
||||
addReferenceSelectionGate(true, true);
|
||||
} else {
|
||||
exitSelectionMode();
|
||||
}
|
||||
|
@ -349,14 +350,6 @@ const unsigned TaskLinearPatternParameters::getOccurrences(void) const
|
|||
return ui->spinOccurrences->value();
|
||||
}
|
||||
|
||||
void TaskLinearPatternParameters::exitSelectionMode()
|
||||
{
|
||||
originalSelectionMode = false;
|
||||
referenceSelectionMode = false;
|
||||
showObject();
|
||||
hideOriginals();
|
||||
}
|
||||
|
||||
|
||||
TaskLinearPatternParameters::~TaskLinearPatternParameters()
|
||||
{
|
||||
|
|
|
@ -77,12 +77,9 @@ protected:
|
|||
virtual void changeEvent(QEvent *e);
|
||||
virtual void onSelectionChanged(const Gui::SelectionChanges& msg);
|
||||
|
||||
bool referenceSelectionMode;
|
||||
|
||||
private:
|
||||
void setupUI();
|
||||
void updateUI();
|
||||
void exitSelectionMode();
|
||||
|
||||
private:
|
||||
Ui_TaskLinearPatternParameters* ui;
|
||||
|
|
|
@ -230,6 +230,7 @@ void TaskMirroredParameters::onButtonReference(bool checked)
|
|||
showOriginals();
|
||||
referenceSelectionMode = true;
|
||||
Gui::Selection().clearSelection();
|
||||
addReferenceSelectionGate(false, true);
|
||||
} else {
|
||||
exitSelectionMode();
|
||||
}
|
||||
|
@ -276,15 +277,7 @@ const std::string TaskMirroredParameters::getMirrorPlane(void) const
|
|||
return ui->lineReference->text().toStdString();
|
||||
}
|
||||
|
||||
void TaskMirroredParameters::exitSelectionMode()
|
||||
{
|
||||
originalSelectionMode = false;
|
||||
referenceSelectionMode = false;
|
||||
showObject();
|
||||
hideOriginals();
|
||||
}
|
||||
|
||||
|
||||
TaskMirroredParameters::~TaskMirroredParameters()
|
||||
{
|
||||
delete ui;
|
||||
|
|
|
@ -71,13 +71,10 @@ protected:
|
|||
virtual void changeEvent(QEvent *e);
|
||||
virtual void onSelectionChanged(const Gui::SelectionChanges& msg);
|
||||
|
||||
bool referenceSelectionMode;
|
||||
|
||||
private:
|
||||
void onStdMirrorPlane(const std::string& plane);
|
||||
void setupUI();
|
||||
void updateUI();
|
||||
void exitSelectionMode();
|
||||
|
||||
private:
|
||||
Ui_TaskMirroredParameters* ui;
|
||||
|
|
|
@ -281,6 +281,7 @@ void TaskPolarPatternParameters::onButtonReference(bool checked)
|
|||
showOriginals();
|
||||
referenceSelectionMode = true;
|
||||
Gui::Selection().clearSelection();
|
||||
addReferenceSelectionGate(true, false);
|
||||
} else {
|
||||
exitSelectionMode();
|
||||
}
|
||||
|
@ -346,14 +347,6 @@ const unsigned TaskPolarPatternParameters::getOccurrences(void) const
|
|||
return ui->spinOccurrences->value();
|
||||
}
|
||||
|
||||
void TaskPolarPatternParameters::exitSelectionMode()
|
||||
{
|
||||
originalSelectionMode = false;
|
||||
referenceSelectionMode = false;
|
||||
showObject();
|
||||
hideOriginals();
|
||||
}
|
||||
|
||||
|
||||
TaskPolarPatternParameters::~TaskPolarPatternParameters()
|
||||
{
|
||||
|
|
|
@ -77,12 +77,9 @@ protected:
|
|||
virtual void changeEvent(QEvent *e);
|
||||
virtual void onSelectionChanged(const Gui::SelectionChanges& msg);
|
||||
|
||||
bool referenceSelectionMode;
|
||||
|
||||
private:
|
||||
void setupUI();
|
||||
void updateUI();
|
||||
void exitSelectionMode();
|
||||
|
||||
private:
|
||||
Ui_TaskPolarPatternParameters* ui;
|
||||
|
|
|
@ -24,6 +24,10 @@
|
|||
|
||||
#ifndef _PreComp_
|
||||
# include <QMessageBox>
|
||||
# include <TopoDS_Shape.hxx>
|
||||
# include <TopoDS_Face.hxx>
|
||||
# include <TopoDS.hxx>
|
||||
# include <BRepAdaptor_Surface.hxx>
|
||||
#endif
|
||||
|
||||
#include "TaskTransformedParameters.h"
|
||||
|
@ -179,6 +183,53 @@ void TaskTransformedParameters::showOriginals()
|
|||
}
|
||||
}
|
||||
|
||||
void TaskTransformedParameters::exitSelectionMode()
|
||||
{
|
||||
originalSelectionMode = false;
|
||||
referenceSelectionMode = false;
|
||||
Gui::Selection().rmvSelectionGate();
|
||||
showObject();
|
||||
hideOriginals();
|
||||
}
|
||||
|
||||
class ReferenceSelection : public Gui::SelectionFilterGate
|
||||
{
|
||||
const App::DocumentObject* support;
|
||||
bool edge, plane;
|
||||
public:
|
||||
ReferenceSelection(const App::DocumentObject* support_, bool edge_, bool plane_)
|
||||
: Gui::SelectionFilterGate((Gui::SelectionFilter*)0),
|
||||
support(support_), edge(edge_), plane(plane_)
|
||||
{
|
||||
}
|
||||
bool allow(App::Document* pDoc, App::DocumentObject* pObj, const char* sSubName)
|
||||
{
|
||||
if (!sSubName || sSubName[0] == '\0')
|
||||
return false;
|
||||
if (pObj != support)
|
||||
return false;
|
||||
std::string subName(sSubName);
|
||||
if (edge && subName.size() > 4 && subName.substr(0,4) == "Edge")
|
||||
return true;
|
||||
if (plane && subName.size() > 4 && subName.substr(0,4) == "Face") {
|
||||
const Part::TopoShape &shape = static_cast<const Part::Feature*>(support)->Shape.getValue();
|
||||
TopoDS_Shape sh = shape.getSubShape(subName.c_str());
|
||||
const TopoDS_Face& face = TopoDS::Face(sh);
|
||||
if (!face.IsNull()) {
|
||||
BRepAdaptor_Surface adapt(face);
|
||||
if (adapt.GetType() == GeomAbs_Plane)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void TaskTransformedParameters::addReferenceSelectionGate(bool edge, bool face)
|
||||
{
|
||||
Gui::Selection().addSelectionGate(new ReferenceSelection(getSupportObject(), edge, face));
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
//**************************************************************************
|
||||
|
|
|
@ -81,7 +81,9 @@ protected:
|
|||
void showObject();
|
||||
void hideOriginals();
|
||||
void showOriginals();
|
||||
void exitSelectionMode();
|
||||
|
||||
void addReferenceSelectionGate(bool edge, bool face);
|
||||
protected:
|
||||
virtual void changeEvent(QEvent *e) = 0;
|
||||
virtual void onSelectionChanged(const Gui::SelectionChanges& msg) = 0;
|
||||
|
@ -89,7 +91,9 @@ protected:
|
|||
protected:
|
||||
QWidget* proxy;
|
||||
ViewProviderTransformed *TransformedView;
|
||||
|
||||
bool originalSelectionMode;
|
||||
bool referenceSelectionMode;
|
||||
|
||||
/// The MultiTransform parent task of this task
|
||||
TaskMultiTransformParameters* parentTask;
|
||||
|
|
Loading…
Reference in New Issue
Block a user